My system initializes large array and the WDT times out, so it never gets to the main(). I have a non-trivial union constructor:
union TSample { uint8_t ui8[2]; uint16_t ui16; TSample() {} // usefull for array init TSample(uint16_t val, uint16_t exponent) { ui16 = (val << 4) & 0xFFE0; ui16 |= exponent & 0x1F; } }
When the union is initialized the WDTHOLD is low. I tried the following to keep it high:
I tried a couple of thing:
1) Per section 4.3.5 set the --cinit_hold_wdt=on. This had no affect on the system. During the startup the WDTHOLD remains low. This results in following linking command:
Building target: hw_1_5.out Invoking: MSP430 Linker "/home/sporty/ti/ccsv6/tools/compiler/msp430_15.12.2.LTS/bin/cl430" -vmspx --data_model=large --code_model=large --near_data=none -O1 --opt_for_speed=3 --use_hw_mpy=F5 -g --c++03 --define=__MSP430F5335__ --define=DEBUG=1 --diag_wrap=off --diag_warning=225 --display_error_number --abi=eabi --silicon_errata=CPU21 --silicon_errata=CPU22 --silicon_errata=CPU40 --printf_support=minimal -z -m"hw_1_5.map" --stack_size=1200 --heap_size=0 --cinit_hold_wdt=on -i"/home/sporty/ti/ccsv6/ccs_base/msp430/include" -i"/home/sporty/ti/ccsv6/ccs_base/msp430/lib" -i"/home/sporty/ti/ccsv6/ccs_base/msp430/lib/5xx_6xx_FRxx" -i"/home/sporty/ti/ccsv6/tools/compiler/msp430_15.12.2.LTS/include" -i"/home/sporty/ti/ccsv6/tools/compiler/msp430_15.12.2.LTS/lib" --reread_libs --diag_wrap=off --warn_sections --display_error_number --xml_link_info="hw_1_5_linkInfo.xml" --use_hw_mpy=F5 --rom_model -o "hw_1_5.out" "./coap_resources/hg.obj" "./coap_resources/root_dir.obj" "./coap_resources/system.obj" "./coap_resources/system_dir.obj" "./coap_resources/system_location.obj" "./coap_resources/system_log.obj" "./coap_resources/system_log_dir.obj" "./coap_resources/system_session.obj" "./driverlib/adc10_a.obj" "./driverlib/adc12_a.obj" "./driverlib/aes.obj" "./driverlib/battbak.obj" "./driverlib/comp_b.obj" "./driverlib/crc.obj" "./driverlib/ctsd16.obj" "./driverlib/dac12_a.obj" "./driverlib/dma.obj" "./driverlib/eusci_a_spi.obj" "./driverlib/eusci_a_uart.obj" "./driverlib/eusci_b_i2c.obj" "./driverlib/eusci_b_spi.obj" "./driverlib/flashctl.obj" "./driverlib/gpio.obj" "./driverlib/lcd_b.obj" "./driverlib/ldopwr.obj" "./driverlib/mpy32.obj" "./driverlib/oa.obj" "./driverlib/pmap.obj" "./driverlib/pmm.obj" "./driverlib/ram.obj" "./driverlib/ref.obj" "./driverlib/rtc_a.obj" "./driverlib/rtc_b.obj" "./driverlib/rtc_c.obj" "./driverlib/sd24_b.obj" "./driverlib/sfr.obj" "./driverlib/sysctl.obj" "./driverlib/tec.obj" "./driverlib/timer_a.obj" "./driverlib/timer_b.obj" "./driverlib/timer_d.obj" "./driverlib/tlv.obj" "./driverlib/ucs.obj" "./driverlib/usci_a_spi.obj" "./driverlib/usci_a_uart.obj" "./driverlib/usci_b_i2c.obj" "./driverlib/usci_b_spi.obj" "./driverlib/wdt_a.obj" "./miwt_os/cell_modem/clock_sm.obj" "./miwt_os/cell_modem/coap_server_sm.obj" "./miwt_os/cell_modem/gps_sm.obj" "./miwt_os/cell_modem/modem_sm.obj" "./miwt_os/coap/cbor_decoder.obj" "./miwt_os/coap/cbor_encoder.obj" "./miwt_os/coap/coap_pdu.obj" "./miwt_os/coap/coap_server.obj" "./miwt_os/coap/directory.obj" "./miwt_os/coap/option.obj" "./miwt_os/dispatcher/array_safe.obj" "./miwt_os/dispatcher/common.obj" "./miwt_os/dispatcher/event.obj" "./miwt_os/dispatcher/modem.obj" "./miwt_os/dispatcher/sm_names.obj" "./miwt_os/dispatcher/state_machine.obj" "./miwt_os/dispatcher/task.obj" "./miwt_os/dispatcher/tstamp.obj" "./miwt_os/sensor/sampling_sensor.obj" "./miwt_os/sensor/sensor_alarms.obj" "./miwt_os/sensor/sensor_sm.obj" "./miwt_os/sensor/transient_sensor.obj" "./miwt_os/serial/TI_aes_128.obj" "./miwt_os/serial/base64.obj" "./src/debug.obj" "./src/globals.obj" "./src/hw_abstraction.obj" "./src/hw_layer_ISRs.obj" "./src/init.obj" "./src/isr_clock.obj" "./src/isr_uart.obj" "./src/main.obj" "../lnk_msp430f5335.cmd" -llibc.a -llibmath.a <Linking> Finished building target: hw_1_5.out
2) added custom function
int _system_pre_init(void) { WDTCTL = WDTPW + WDTHOLD; return 1; }
but the system still keeps WDTHOLD low during C++ object construction and the system fails, why?