Build troubles - 3.02 for DuetWifi



  • Build trouble on the 3.02 branch for DuetWifi. Last successful merge was from 10 June, AFAICT.
    The problem is something about templates with extern linkage. Partial error log at end.
    Build RepRapFirmware with the Duet2 config (hoping that's the right one for DuetWifi) using 2018-q4-major.

    I had to work around a few other problems:

    • Needed dev branch (not main) of FreeRTOS to build CANlib. (BuildInstructions.md is out of date on 3.02 branch.)
    • Building RepRapFirmware, got errors about SAME5x not set for configuration Duet2. (Worked around this by setting SAME5x=0)

    =======================================================================
    arm-none-eabi-g++ -std=gnu++17 -D__SAM4E8E__ -DRTOS -DDUET_NG -D_XOPEN_SOURCE -DSAME5x=0 -I"C:\Users\JARK\Repos\RRFLibraries" -I"C:\Users\JARK\Repos\FreeRTOS" -I"C:\Users\JARK\Repos\CoreNG" -I"C:\Users\JARK\Repos\CoreNG\cores\arduino" -I"C:\Users\JARK\Repos\CoreNG\libraries\Flash" -I"C:\Users\JARK\Repos\CoreNG\libraries\Wire" -I"C:\Users\JARK\Repos\CoreNG\asf" -I"C:\Users\JARK\Repos\CoreNG\asf\common\utils" -I"C:\Users\JARK\Repos\CoreNG\asf\common\services\clock" -I"C:\Users\JARK\Repos\CoreNG\asf\common\services\ioport" -I"C:\Users\JARK\Repos\CoreNG\asf\sam\drivers" -I"C:\Users\JARK\Repos\CoreNG\asf\sam\services\flash_efc" -I"C:\Users\JARK\Repos\CoreNG\asf\sam\utils" -I"C:\Users\JARK\Repos\CoreNG\asf\sam\utils\cmsis\sam4e\include" -I"C:\Users\JARK\Repos\CoreNG\asf\sam\utils\header_files" -I"C:\Users\JARK\Repos\CoreNG\asf\sam\utils\preprocessor" -I"C:\Users\JARK\Repos\CoreNG\asf\thirdparty\CMSIS\Include" -I"C:\Users\JARK\Repos\CoreNG\variants\duetNG" -I"C:\Users\JARK\Repos\RepRapFirmware\src" -I"C:\Users\JARK\Repos\RepRapFirmware\src\DuetNG" -I"C:\Users\JARK\Repos\RepRapFirmware\src\Networking" -I"C:\Users\JARK\Repos\DuetWiFiSocketServer\src\include" -I"C:\Users\JARK\Repos\FreeRTOS\src\include" -I"C:\Users\JARK\Repos\FreeRTOS\src\portable\GCC\ARM_CM4F" -I"C:\Users\JARK\Repos\RRFLibraries\src" -Os -Wall -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fexceptions -nostdlib -Wundef -Wdouble-promotion -Werror=return-type -fsingle-precision-constant "-Wa,-ahl=DhtSensor.s" -fstack-usage -MMD -MP -MF"src/Heating/Sensors/DhtSensor.d" -MT"src/Heating/Sensors/DhtSensor.o" -o "src/Heating/Sensors/DhtSensor.o" "../src/Heating/Sensors/DhtSensor.cpp"

    In file included from C:\Users\JARK\Repos\CoreNG\cores\arduino/RingBuffer.h:23,
    from C:\Users\JARK\Repos\CoreNG\cores\arduino/UARTClass.h:23,
    from C:\Users\JARK\Repos\CoreNG\variants\duetNG/variant.h:43,
    from C:\Users\JARK\Repos\CoreNG\cores\arduino/Core.h:190,
    from C:\Users\JARK\Repos\RepRapFirmware\src/Libraries/sd_mmc/ctrl_access.h:76,
    from ../src/Libraries/Fatfs/diskio.cpp:47:
    c:\program files (x86)\gnu tools arm embedded\8 2018-q4-major\arm-none-eabi\include\c++\8.2.1\cstddef:68:3: error: template with C linkage
    template<typename _IntegerType> struct __byte_operand { };
    ^~~~~~~~
    In file included from ../src/Libraries/Fatfs/diskio.cpp:47:
    C:\Users\JARK\Repos\RepRapFirmware\src/Libraries/sd_mmc/ctrl_access.h:64:1: note: 'extern "C"' linkage started here
    extern "C" {
    ^~~~~~~~~~
    In file included from C:\Users\JARK\Repos\CoreNG\cores\arduino/RingBuffer.h:23,
    from C:\Users\JARK\Repos\CoreNG\cores\arduino/UARTClass.h:23,
    from C:\Users\JARK\Repos\CoreNG\variants\duetNG/variant.h:43,
    from C:\Users\JARK\Repos\CoreNG\cores\arduino/Core.h:190,
    from C:\Users\JARK\Repos\RepRapFirmware\src/Libraries/sd_mmc/ctrl_access.h:76,
    from ../src/Libraries/Fatfs/diskio.cpp:47:
    c:\program files (x86)\gnu tools arm embedded\8 2018-q4-major\arm-none-eabi\include\c++\8.2.1\cstddef:69:3: error: template specialization with C linkage
    template<> struct __byte_operand<bool> { using __type = byte; };
    ^~~~~~~~
    In file included from ../src/Libraries/Fatfs/diskio.cpp:47:
    C:\Users\JARK\Repos\RepRapFirmware\src/Libraries/sd_mmc/ctrl_access.h:64:1: note: 'extern "C"' linkage started here
    extern "C" {
    ^~~~~~~~~~
    In file included from C:\Users\JARK\Repos\CoreNG\cores\arduino/RingBuffer.h:23,
    from C:\Users\JARK\Repos\CoreNG\cores\arduino/UARTClass.h:23,
    from C:\Users\JARK\Repos\CoreNG\variants\duetNG/variant.h:43,
    from C:\Users\JARK\Repos\CoreNG\cores\arduino/Core.h:190,
    from C:\Users\JARK\Repos\RepRapFirmware\src/Libraries/sd_mmc/ctrl_access.h:76,
    from ../src/Libraries/Fatfs/diskio.cpp:47:
    c:\program files (x86)\gnu tools arm embedded\8 2018-q4-major\arm-none-eabi\include\c++\8.2.1\cstddef:70:3: error: template specialization with C linkage
    template<> struct __byte_operand<char> { using __type = byte; };
    ^~~~~~~~



  • why are you using 3.0.2? and not 3.1.2?

    edit: my bad you said 3.02



  • @Veti said in Build troubles - 3.02 for DuetWifi:

    why are you using 3.0.2? and not 3.1.2?

    edit: my bad you said 3.02

    That's actually a worthwhile question. I went there because that's where the recent commits are. Ideally, there'd be a spot to go to that identifies the active branch, with up-to-date build instructions for that branch, including what branches of other repos are needed. (Sub modules are a way to manage that, but for now, I'd just like to be able to build.)



  • Looks like it's probably from

    #include <Core.h>
    

    being inside the

    extern "C" {
    

    in Src/Libraries/sd_mmc/ctl_access.h. Can anyone confirm that?
    Moving the include up gets rid of most, but not all the errors. If so, it's been broken since at least 10 July, which seems unlikely.
    Also seems strange that I'm running into so many different errors. Was there a tools change that I'm missing? Is no one building Duet2 any more?

    Last error seems to be:

    In file included from C:\Users\JARK\Repos\RepRapFirmware\src/GCodes/GCodeMachineState.h:14,
                     from ../src/GCodes/GCodeBuffer/StringParser.h:13,
                     from ../src/GCodes/GCodeBuffer/GCodeBuffer.h:12,
                     from ../src/GCodes/GCodeBuffer/ExpressionParser.cpp:10:
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:19:38: error: 'STRINGLIST_tan' was not declared in this scope
     #define STRINGLIST( ... ) VA_SELECT( STRINGLIST, __VA_ARGS__ )
                                          ^~~~~~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:12:21: note: in definition of macro 'CAT'
     #define CAT( A, B ) A ## B
                         ^
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:16:32: note: in expansion of macro 'SELECT'
     #define VA_SELECT( NAME, ... ) SELECT( NAME, VA_SIZE(__VA_ARGS__) )(__VA_ARGS__)
                                    ^~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:19:27: note: in expansion of macro 'VA_SELECT'
     #define STRINGLIST( ... ) VA_SELECT( STRINGLIST, __VA_ARGS__ )
                               ^~~~~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:86:53: note: in expansion of macro 'STRINGLIST'
      static constexpr const char* _names[NumValues] = { STRINGLIST(_v1, __VA_ARGS__) }; \
                                                         ^~~~~~~~~~
    ../src/GCodes/GCodeBuffer/ExpressionParser.cpp:19:1: note: in expansion of macro 'NamedEnum'
     NamedEnum(Function, unsigned int, abs, acos, asin, atan, atan2, cos, degrees, floor, isnan, max, min, mod, radians, random, sin, sqrt, tan);
     ^~~~~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:19:38: note: suggested alternative: 'STRINGLIST_14'
     #define STRINGLIST( ... ) VA_SELECT( STRINGLIST, __VA_ARGS__ )
                                          ^~~~~~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:12:21: note: in definition of macro 'CAT'
     #define CAT( A, B ) A ## B
                         ^
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:16:32: note: in expansion of macro 'SELECT'
     #define VA_SELECT( NAME, ... ) SELECT( NAME, VA_SIZE(__VA_ARGS__) )(__VA_ARGS__)
                                    ^~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:19:27: note: in expansion of macro 'VA_SELECT'
     #define STRINGLIST( ... ) VA_SELECT( STRINGLIST, __VA_ARGS__ )
                               ^~~~~~~~~
    C:\Users\JARK\Repos\RRFLibraries\src/General/NamedEnum.h:86:53: note: in expansion of macro 'STRINGLIST'
      static constexpr const char* _names[NumValues] = { STRINGLIST(_v1, __VA_ARGS__) }; \
                                                         ^~~~~~~~~~
    ../src/GCodes/GCodeBuffer/ExpressionParser.cpp:19:1: note: in expansion of macro 'NamedEnum'
     NamedEnum(Function, unsigned int, abs, acos, asin, atan, atan2, cos, degrees, floor, isnan, max, min, mod, radians, random, sin, sqrt, tan);
     ^~~~~~~~~
    


  • @trayracing said in Build troubles - 3.02 for DuetWifi:

    STRINGLIST_tan

    Right, that one is came in with ce3b93cd737f34c9206d6c42e3d277676c7f1f58, dc42
    28 Aug, which looks like an update to NamedEnum.h over in RRFLibraries might not be committed.


  • administrators

    @trayracing said in Build troubles - 3.02 for DuetWifi:

    @trayracing said in Build troubles - 3.02 for DuetWifi:

    STRINGLIST_tan

    Right, that one is came in with ce3b93cd737f34c9206d6c42e3d277676c7f1f58, dc42
    28 Aug, which looks like an update to NamedEnum.h over in RRFLibraries might not be committed.

    That's correct, I forgot to commit that change. I'll do that shortly.



  • Thanks @dc42. That commit, locally defining SAME5x=0, and the local change to ctl_access.h got me building again.


  • administrators

    @trayracing said in Build troubles - 3.02 for DuetWifi:

    Thanks @dc42. That commit, locally defining SAME5x=0, and the local change to ctl_access.h got me building again.

    You shouldn't need to define SAME5x or change ctrl_access.h if you use the dev branch of CoreNG.

    I've updated BuildInstructions.md (in the master branch).



  • I was able to build successfully. But the build doesn't work on my duet2wifi. Build without errors and flashed without errors but it doesn't boot

    I saw that on RepRapFirmeware there is just "Duet2" Configuration. Wasn't there Duet2-RTOS



  • @smoki3 you have selected all the various build configurations relevant for the Duet 2 Wifi?

    iirc:
    CoreNG -> SAM4E8E
    FreeRTOS -> SAM4E
    RepRapFirmware -> Duet2 Duet2_RTOS
    RRFLibraries -> SAM4E_RTOS



  • @smoki3 said in Build troubles - 3.02 for DuetWifi:

    I saw that on RepRapFirmeware there is just "Duet2" Configuration. Wasn't there Duet2-RTOS

    Which branch/tag are you building? 3.02 as pr the topic?



  • @bearer said in Build troubles - 3.02 for DuetWifi:

    @smoki3 said in Build troubles - 3.02 for DuetWifi:

    I saw that on RepRapFirmeware there is just "Duet2" Configuration. Wasn't there Duet2-RTOS

    Which branch/tag are you building? 3.02 as pr the topic?

    Yes 3.02 branch.
    RepRapFirmware: Duet2_RTOS is not availiable anymore.


  • administrators

    All builds of RRF3 are RTOS builds so I dropped the RTOS from the configuration name.

    I haven't yet tested that latest Duet 2 build. I will do that today.



  • @smoki3 said in Build troubles - 3.02 for DuetWifi:

    RepRapFirmware: Duet2_RTOS is not availiable anymore.

    indeed, seems to have chagned to just Duet2 after git pull on the 3.02 branch



  • @bearer said in Build troubles - 3.02 for DuetWifi:

    @smoki3 said in Build troubles - 3.02 for DuetWifi:

    RepRapFirmware: Duet2_RTOS is not availiable anymore.

    indeed, seems to have chagned to just Duet2 after git pull on the 3.02 branch

    Yes I saw the commit on git. But not able to get the build to boot on duet2. Lets see if dc42 can figure out more detailed


  • administrators

    It boots for me on a Duet WiFi. I have still to test it on Duet Ethernet.



  • @dc42 hmm wired. I there are special commands needed in the config.g?

    UPDATE:
    A screen /dev/tty.usbmodem1411 115200

    RepRapFirmware for Duet 2 WiFi/Ethernet Version 3.2-beta dated 2020-08-31b1
                                                                               Executing config.g...HTTP is enabled on port 80
                                              FTP is disabled
    
    


  • Okay looks like its not booting with my config:

    ; General preferences
    G90                                                					; Send absolute coordinates
    M83                                                					; relative extruder moves
    
    ;Panel Due
    M575 P1 S1 B57600
    
    ; Network
    M550 P"ToolChanger"                                   	   					; Set machine name
    M552 S1                                        	   					; Enable network
    M586 P0 S1                                         					; Enable HTTP
    M586 P1 S0                                         					; Disable FTP
    M586 P2 S0                                         					; Disable Telnet
    
    ; Drives
    M584 X7 Y8 Z0 E5:6:2:1 U9 V4 W3                         			; Map Drives to Axis
    M669 K1                                            					; Select CoreXY mode
    M569 P0 S0                                         					; Drive 0 goes forwards
    M569 P1 S0                                         					; Drive 1 goes forwards
    M569 P2 S0                                         					; Drive 2 goes forwards
    M569 P3 S1                                         					; Drive 3 goes forwards
    M569 P4 S1                                         					; Drive 4 goes forwards
    M569 P5 S0                                         					; Drive 5 goes forwards
    M569 P6 S1                                         					; Drive 6 goes forwards
    M569 P7 S0                                        					; Drive 7 goes forwards
    M569 P8 S0                                        					; Drive 8 goes forwards
    M569 P9 S0                                        					; Drive 9 goes forwards
    M350 X16 Y16 Z16 E16:16:16:16 V16 W16 I1                   			; Configure microstepping with interpolation
    M350 U8 I0					   		                    			; Configure microstepping without interpolation
    M92 X100 Y100 Z1600 U100 V400 W400 E409:427:427:427          		; Set steps per mm
    M566 X600 Y600 Z35 U2 V8 W8 E800:800:800:800         		        ; Set maximum instantaneous speed changes (mm/min)
    M203 X35000 Y35000 Z1200 U5000 V1200 W2400 E5000:5000:5000:5000    	; Set maximum speeds (mm/min)
    M201 X6000 Y6000 Z400 U500 V400 W400 E2500:2500:2500:2500         	; Set accelerations (mm/s^2)
    M906 X1650 Y1650 Z1100 U400 V1000 W1000 E1000:1000:1000:1450 I30    ; Set motor currents (mA) and motor idle factor in per cent
    M84 S120                                           					; Set idle timeout
    
    ; Axis Limits
    M208 X-35 Y-49 Z0 U0 V0 W0 S1                          		    	; Set axis minima
    M208 X328.5 Y243 Z300 U500 V34 W34 S0                     			; Set axis maxima
    
    ; Thermal Sensors
    M308 S0 P"bedtemp" Y"thermistor" T100000 B3950                   	; Set thermistor + ADC parameters for heater 0
    M308 S1 P"duex.e2temp" Y"thermistor" T100000 B4725 C7.060000e-8     ; Set thermistor + ADC parameters for heater 1
    M308 S2 P"e0temp" Y"thermistor" T100000 B4725 C7.060000e-8       	; Set thermistor + ADC parameters for heater 2
    M308 S3 P"duex.e3temp" Y"thermistor" T100000 B4725 C7.060000e-8     ; Set thermistor + ADC parameters for heater 3
    M308 S4 P"duex.e4temp" Y"thermistor" T100000 B4725 C7.060000e-8     ; Set thermistor + ADC parameters for heater 4
    
    ; Hardware
    M950 H0 C"bedheat" T0							; Bed Heater
    M950 H1 C"duex.e2heat" T1						; Tool 0 Heater
    M950 H2 C"e0heat" T2							; Tool 1 Heater
    M950 H3 C"duex.e3heat" T3						; Tool 2 Heater
    M950 H4 C"duex.e4heat" T4						; Tool 3 Heater
    M950 F0 C"fan0"									; Tool 1 PCF
    M950 F1 C"fan1"									; Tool 1 HEF
    M950 F3 C"duex.fan3"							; Tool 0 PCF
    M950 F4 C"duex.fan4"							; Tool 0 HEF
    M950 F5 C"duex.fan5"							; Tool 2 PCF
    M950 F6 C"duex.fan6"							; Tool 2 HEF
    M950 F7 C"duex.fan7"							; Tool 3 PCF
    M950 F8 C"duex.fan8"							; Tool 3 HEF
    M950 F9 C"duex.e5heat"							; LED
    
    ; Max Temp Protection
    M140 H0
    M143 H0 S140                                   	; Set temperature limit for heater 0 to 140C
    M143 H1 S275                                   	; Set temperature limit for heater 1 to 270C
    M143 H2 S275                                   	; Set temperature limit for heater 2 to 270C
    M143 H3 S275                                   	; Set temperature limit for heater 3 to 270C
    M143 H4 S275                                   	; Set temperature limit for heater 4 to 270C
    
    ; Fanmapping
    M106 P3 S0 I0 F500 H-1 C"Tool 0"               	; Set fan 3 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P0 S0 I0 F500 H-1 C"Tool 1"               	; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P5 S0 I0 F500 H-1 C"Tool 2"               	; Set fan 5 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P7 S0 I0 F500 H-1 C"Tool 3"               	; Set fan 7 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P9 S0 I0 F500 H-1 C"LED"               	; Set LED value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P4 S1 I0 F500 H1 T75                      	; Set fan 4 value for Tool 0, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 P1 S1 I0 F500 H2 T75                      	; Set fan 1 value for Tool 1, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 P6 S1 I0 F500 H3 T75                      	; Set fan 6 value for Tool 2, PWM signal inversion and frequency. Thermostatic control is turned on
    M106 P8 S1 I0 F500 H4 T75                      	; Set fan 8 value for Tool 4, PWM signal inversion and frequency. Thermostatic control is turned on
    
    ; Endstops
    M915 X Y S5 H350 F0 R0							; Set Stall detection sensitivity
    M915 V S2 H350 F0 R0                        	; Calibration
    M915 W S2 H350 F0 R0                          	; Cleaner
    M574 Y1 S3                            			; Set endstops controlled by motor load detection
    M574 X1 S3                            			; Set endstops controlled by motor load detection
    M574 U0                             			; Set endstops controlled by motor load detection
    M574 V1 S3                           			; Set endstops controlled by motor load detection
    M574 W1 S3                         				; Set endstops controlled by motor load detection
    
    ; Z-Probe
    M558 K0 P5 C"^!zprobe.in" H3 F180 T25000	   	; Z probe connected to Z endstop input
    G31 K0 X0 Y0 Z0.15 P500          	            ; Set Z probe offset + naher ran - weiter weg
    M557 X10:290 Y20:180 S40 					   	; Define mesh grid
    
    ; Tool Probe
    M558 K1 P8 C"!e0stop" H5 F80 T3000  		  	; Tool probe connected to Z endstop input
    G31 K1 X0 Y0 Z0 P500          	               	; Set Z probe offset + naher ran - weiter weg
    
    ; Tools
    M563 P0 D0 H1 F3                               	; Define tool 0, Fan 3
    M563 P1 D1 H2 F0                               	; Define tool 1, Fan 0
    M563 P2 D2 H3 F5                               	; Define tool 2, Fan 5
    M563 P3 D3 H4 F7                               	; Define tool 3, Fan 7
    
    ; PID Settings Tools
    M307 H1 A595.9 C199.5 D4.5 S1.00 V24.1 B0      	; Set PID settings tool 0
    M307 H2 A775.0 C252.4 D8.2 S1.00 V24.1 B0      	; Set PID settings tool 1
    M307 H3 A716.5 C237.1 D8.7 S1.00 V24.1 B0      	; Set PID settings tool 2
    M307 H4 A567.7 C241.0 D6.7 S0.80 V24.1 B0      	; Set PID settings tool 3
    M307 H0 A181.4 C631.5 D4.9 S1.00 V24.1 B0      	; Bed PID Settings
    
    ; Tools Temperatures
    G10 P0 R0 S0                                   	; Set initial tool 0 active and standby temperatures to 0C
    G10 P1 R0 S0                                   	; Set initial tool 1 active and standby temperatures to 0C
    G10 P2 R0 S0                                   	; Set initial tool 2 active and standby temperatures to 0C
    G10 P3 R0 S0                                   	; Set initial tool 3 active and standby temperatures to 0C
    
    ; Calibrate MCU Temperature
    M912 P0 S-8
    
    ; LED
    M106 P9 S0.5
    
    ; DAA
    M593 F50
    
    ; Pressure Advance
    ; M572 D3 S0.5
    M572 D0:1:2 S0.05
    
    ; Load config override
    M501
    
    

    Is there a new WifiFirmware needed?


  • administrators

    I am using new wifi firmware, but last time i tested it, it still worked with the old wifi firmware. Does it boot if you leave wifi disabled in config.g?



  • @dc42
    I was able to boot it without SD Card and enabled Wifi manually then I insert the SD Card, mounted it with a M21 and loaded my config.g. Now it is up.

    But as soon I reboot it is in a bootloop



  • @dc42

    I commented out

    ;M586 P0 S1                                         					; Enable HTTP
    ;M586 P1 S0                                         					; Disable FTP
    ;M586 P2 S0                                         					; Disable Telnet
    

    Now it is booting



  • @dc42 Thanks. The ctl_access.h problem was from outdated arm tools on my end.


  • administrators

    @smoki3 said in Build troubles - 3.02 for DuetWifi:

    @dc42

    I commented out

    ;M586 P0 S1                                         					; Enable HTTP
    ;M586 P1 S0                                         					; Disable FTP
    ;M586 P2 S0                                         					; Disable Telnet
    

    Now it is booting

    My Duet WiFi is booting even with M586 commands, however I am chasing other issues in 3.2 which may be related.


Log in to reply