Setting up Eclipse to Develop Firmware
-
Here is the link command I get:
arm-none-eabi-gcc -L"C:\Eclipse\Firmware\CoreNG\SAM4E8E" -Os -Wl,–gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -TC:\Eclipse\Firmware\CoreNG\variants\duetNG\linker_scripts\gcc\flash.ld -Wl,-Map,C:\Eclipse\Firmware\RepRapFirmware\DuetWiFi/DuetWiFiFirmware.map -o "DuetWiFiFirmware.elf" -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "C:\Eclipse\Firmware\CoreNG\SAM4E8E\cores\arduino\syscalls.o" ./src/Tools/Filament.o ./src/Tools/Tool.o ./src/Storage/CRC32.o ./src/Storage/FileStore.o ./src/Storage/MassStorage.o ./src/Movement/Kinematics/CartesianKinematics.o ./src/Movement/Kinematics/CoreBaseKinematics.o ./src/Movement/Kinematics/CoreXYKinematics.o ./src/Movement/Kinematics/CoreXYUKinematics.o ./src/Movement/Kinematics/CoreXZKinematics.o ./src/Movement/Kinematics/Kinematics.o ./src/Movement/Kinematics/LinearDeltaKinematics.o ./src/Movement/Kinematics/PolarKinematics.o ./src/Movement/Kinematics/ScaraKinematics.o ./src/Movement/Kinematics/ZLeadscrewKinematics.o ./src/Movement/BedProbing/Grid.o ./src/Movement/BedProbing/RandomProbePointSet.o ./src/Movement/DDA.o ./src/Movement/DriveMovement.o ./src/Movement/Move.o ./src/Libraries/sha1/sha1.o ./src/Libraries/Math/Isqrt.o ./src/Libraries/General/IP4String.o ./src/Libraries/General/StringRef.o ./src/Libraries/Fatfs/ccsbcs.o ./src/Libraries/Fatfs/diskio.o ./src/Libraries/Fatfs/fattime_rtc.o ./src/Libraries/Fatfs/ff.o ./src/Heating/Sensors/CpuTemperatureSensor.o ./src/Heating/Sensors/CurrentLoopTemperatureSensor.o ./src/Heating/Sensors/DhtSensor.o ./src/Heating/Sensors/RtdSensor31865.o ./src/Heating/Sensors/SpiTemperatureSensor.o ./src/Heating/Sensors/TemperatureSensor.o ./src/Heating/Sensors/Thermistor.o ./src/Heating/Sensors/ThermocoupleSensor31855.o ./src/Heating/Sensors/ThermocoupleSensor31856.o ./src/Heating/Sensors/TmcDriverTemperatureSensor.o ./src/Heating/FOPDT.o ./src/Heating/Heat.o ./src/Heating/Pid.o ./src/Heating/TemperatureError.o ./src/GCodes/GCodeBuffer.o ./src/GCodes/GCodeInput.o ./src/GCodes/GCodeMachineState.o ./src/GCodes/GCodeQueue.o ./src/GCodes/GCodes.o ./src/GCodes/GCodes2.o ./src/GCodes/RestorePoint.o ./src/FilamentSensors/Duet3DFilamentSensor.o ./src/FilamentSensors/FilamentSensor.o ./src/FilamentSensors/SimpleFilamentSensor.o ./src/DuetNG/DuetWiFi/Network.o ./src/DuetNG/DuetWiFi/Socket.o ./src/DuetNG/DuetWiFi/WifiFirmwareUploader.o ./src/DuetNG/DueXn.o ./src/DuetNG/FirmwareUpdater.o ./src/DuetNG/FtpResponder.o ./src/DuetNG/HttpResponder.o ./src/DuetNG/NetworkBuffer.o ./src/DuetNG/NetworkResponder.o ./src/DuetNG/SX1509.o ./src/DuetNG/TMC2660.o ./src/DuetNG/TelnetResponder.o ./src/Fan.o ./src/IoPort.o ./src/Logger.o ./src/OutputMemory.o ./src/Platform.o ./src/PortControl.o ./src/PrintMonitor.o ./src/RepRap.o ./src/RepRapFirmware.o ./src/Roland.o ./src/Scanner.o ./src/SoftTimer.o ./src/ZProbeProgrammer.o -lCoreNG -Wl,--end-group -lm -gcc
So the file it's missing on your machine is, on my machine, "C:\Eclipse\Firmware\CoreNG\SAM4E8E\cores\arduino\syscalls.o". That should come from this "Command line pattern" setting in the Cross G++ Linker settings:
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LINK_FLAGS_1} "${workspace_loc:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}" ${INPUTS} ${LINK_FLAGS_2}
I've noticed before that if Eclipse can't find a file, it just omits it from the command line. If you built the SAM4E configuration of CoreNG before you built RRF, that file should be there.
HTH David
-
Ok we are getting closer to a solution.
I found the missing file here:
/Users/John/eclipse-workspace/CoreNG/SAM4E8E/cores/arduino/syscalls.o
[it appears there with a bunch of other files after building CoreNG]In the RRF Cross G++ Linker "Command line pattern" box, I see this written:
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LINK_FLAGS_1} "${workspace_loc:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}" ${INPUTS} ${LINK_FLAGS_2}Its the same as yours, so seems like its not a problem.
Maybe the problem is with how I build CoreNG and RRF:
- First I right click CoreNG, Build Configurations > Clean All.
- Repeat for RepRapFirmware folder
- Right click CoreNG, Build Configurations > Build Selected… then I select SAM4E8E and hit ok.
- Wait for build to finish (8 seconds)
- Repeat for RepRapFirmware folder, but select DuetWiFi and hit ok.
- Error
Should I build it differently?
-
That's the correct build order.
In Properties -> C/C++ Build -> Build Variables, do you have CoreName defined as CoreNG ?
-
For the RepRapFirmware folder, yes it is there. Name: CoreName || Type: String || Value: CoreNG
For the CoreNG folder, nothing is listed in the list. Should it be there?
-
I really just need to make some small firmware changes and some custom g-code commands.
I purchased the DuetWifi, PanelDue, and am waiting for the Duex5. Hoping to have it solved by the time it arrives! If I can't get it to work on Mac or Windows, I may just uninstall everything and try again when firmware version 1.2 is out.
Thanks for all the help you've provided so far!
-
I had no problem installing/compiling under linux. You may try to install a linux system in a Virtualbox env, and compile from there.
-
Ok, I will try. I'm using a decently powered Mac using Parallels to run windows and I assume I can put Linux on here too. Which Linux OS/distribution do you recommend? Ubuntu? I have limited experience with Linux, but I can learn!
-
So strange though. It seems like the only thing I need to fix is these empty quotation marks and it will fix everything:
-Wl,–start-group ""The file it is looking for is 100% in the right folder. And the command line pattern is exactly how dc42's is.
-
I run debian, but I think ubuntu is fine too (all dev libs exist).
About the missing path, you can try to replace:
${CoreName}
by
CoreNG
or ${workspace_loc:/${CoreName}
by
/Users/John/eclipse-workspace/CoreNG
to see if it fixes the problem.
-
LOL, I literally just tried it before reading your post AND IT WORKED!!!!!!
Just in case someone in the future has this problem, this is what I changed:
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LINK_FLAGS_1} "${workspace_loc:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}" ${INPUTS} ${LINK_FLAGS_2}
changed it to:
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LINK_FLAGS_1} "/Users/John/eclipse-workspace/CoreNG/SAM4E8E/cores/arduino/syscalls.o" ${INPUTS} ${LINK_FLAGS_2}(make sure the quotes are there but the curly brackets and dollar signs removed).
Thanks everyone!
-
I'm so happy
-
Good!
But I think I found the issue. The string:
"${workspace_loc:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}"
should be :
"${workspace_loc}:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}"
There where a missing bracket at the end of the workspace_loc var…
Can you confirm?
-
When I browse around in the settings, the way that all of the Includes are is like this:
"${workspace_loc:/${CoreName}/asf/common/utils}"So I don't think that was the issue.
-
Eg. when you write it like this:
"${workspace_loc}:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}"you have an extra curly bracket because there is one on the far right 2nd last to the end.
-
Mmm, you're right, they are all defined this way… Strange.
-
If it is of any help, I was getting the exact same error because I made the mistake of having the projects not under the workspace directory.
When I created the workspace in the parent directory of the project sources (CoreNG and RepRapFirmware directories) the error went away as expected. The ${workspace_loc:} is expecting them to be under the workspace directory.
However, I am getting undefined reference errors during linking for: lprintf, sqrtf, floorf, etc.
I am running under OS X with gcc-arm-none-eabi-6-2017-q2-update tools. Is there a library missing from the linker options that the IDE should include based on dependencies?
-
My problem of unresolved references was solved by resetting .cproject and .settings/language.settings.xml in RepRapFirmware project to repository version and then changing the project properties as per instructions. Subsequent build was successful.
-
@fma:
Good!
But I think I found the issue. The string:
"${workspace_loc:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}"
should be :
"${workspace_loc}:/${CoreName}/SAM4E8E/cores/arduino/syscalls.o}"
There where a missing bracket at the end of the workspace_loc var…
Can you confirm?
Recently I was getting this issue intermittently. I think it is an Eclipse bug. So in the latest commit I changed the path to this:
"${workspace_loc}/${CoreName}/SAM4E8E/cores/arduino/syscalls.o"
This seems to have resolved it.