Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Setting up Eclipse to Develop Firmware

    Scheduled Pinned Locked Moved
    Firmware developers
    4
    42
    5.7k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • fmaundefined
      fma
      last edited by

      @jml:

      Interesting how the prior error was "command not found", but then this error is "No such file or directory."

      This is a common mistake, due to poor error messages: in the first case, this is sh which can't find gcc, in the second case, this is gcc which can't find a file. sh reports which file it can't find (gcc, here), but gcc does not report the missing file…

      I suspect a library path not setup correctly, so gcc can't find a .o to build something else.

      Frédéric

      1 Reply Last reply Reply Quote 0
      • dc42undefined
        dc42 administrators
        last edited by

        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

        Duet WiFi hardware designer and firmware engineer
        Please do not ask me for Duet support via PM or email, use the forum
        http://www.escher3d.com, https://miscsolutions.wordpress.com

        1 Reply Last reply Reply Quote 0
        • jmlundefined
          jml
          last edited by

          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?

          1 Reply Last reply Reply Quote 0
          • dc42undefined
            dc42 administrators
            last edited by

            That's the correct build order.

            In Properties -> C/C++ Build -> Build Variables, do you have CoreName defined as CoreNG ?

            Duet WiFi hardware designer and firmware engineer
            Please do not ask me for Duet support via PM or email, use the forum
            http://www.escher3d.com, https://miscsolutions.wordpress.com

            1 Reply Last reply Reply Quote 0
            • jmlundefined
              jml
              last edited by

              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?

              1 Reply Last reply Reply Quote 0
              • jmlundefined
                jml
                last edited by

                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!

                1 Reply Last reply Reply Quote 0
                • fmaundefined
                  fma
                  last edited by

                  I had no problem installing/compiling under linux. You may try to install a linux system in a Virtualbox env, and compile from there.

                  Frédéric

                  1 Reply Last reply Reply Quote 0
                  • jmlundefined
                    jml
                    last edited by

                    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!

                    1 Reply Last reply Reply Quote 0
                    • jmlundefined
                      jml
                      last edited by

                      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.

                      1 Reply Last reply Reply Quote 0
                      • fmaundefined
                        fma
                        last edited by

                        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.

                        Frédéric

                        1 Reply Last reply Reply Quote 0
                        • jmlundefined
                          jml
                          last edited by

                          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!

                          1 Reply Last reply Reply Quote 0
                          • jmlundefined
                            jml
                            last edited by

                            I'm so happy

                            1 Reply Last reply Reply Quote 0
                            • fmaundefined
                              fma
                              last edited by

                              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?

                              Frédéric

                              1 Reply Last reply Reply Quote 0
                              • jmlundefined
                                jml
                                last edited by

                                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.

                                1 Reply Last reply Reply Quote 0
                                • jmlundefined
                                  jml
                                  last edited by

                                  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.

                                  1 Reply Last reply Reply Quote 0
                                  • fmaundefined
                                    fma
                                    last edited by

                                    Mmm, you're right, they are all defined this way… Strange.

                                    Frédéric

                                    1 Reply Last reply Reply Quote 0
                                    • vschundefined
                                      vsch
                                      last edited by

                                      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?

                                      1 Reply Last reply Reply Quote 0
                                      • vschundefined
                                        vsch
                                        last edited by

                                        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.

                                        1 Reply Last reply Reply Quote 0
                                        • dc42undefined
                                          dc42 administrators
                                          last edited by

                                          @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.

                                          Duet WiFi hardware designer and firmware engineer
                                          Please do not ask me for Duet support via PM or email, use the forum
                                          http://www.escher3d.com, https://miscsolutions.wordpress.com

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA