This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hello,
I am trying to generate a CRC on Flash memory using the SL_CRC_Calculate() function. However, I cannot find a way to access the origin or start address of the .cinit section in memory. I know the linker provides the symbols __TI_CINIT_Base and __TI_CINIT_Limit, but this does not cover the whole .cinit section as can be seen from the map file:
SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- .kernelTEXT * 0 00000020 00005604 00000020 00002f04 os_tasks.obj (.kernelTEXT) 00002f24 000012dc os_queue.obj (.kernelTEXT) 00004200 00000818 os_event_groups.obj (.kernelTEXT) 00004a18 000004b0 os_portasm.obj (.kernelTEXT) 00004ec8 000003e0 os_port.obj (.kernelTEXT) 000052a8 0000037c os_heap.obj (.kernelTEXT) .cinit 0 00005628 000000e8 00005628 0000009d (.cinit..data.load) [load image, compression = lzss] 000056c5 00000003 --HOLE-- [fill = 0] 000056c8 0000000c (__TI_handler_table) 000056d4 00000009 (.cinit..kernelBSS.load) [load image, compression = lzss] 000056dd 00000003 --HOLE-- [fill = 0] 000056e0 00000008 (.cinit..bss.load) [load image, compression = zero_init] 000056e8 00000008 (.cinit..kernelHEAP.load) [load image, compression = zero_init] 000056f0 00000020 (__TI_cinit_table) ... GLOBAL SYMBOLS: SORTED BY Symbol Address address name ------- ---- 00000000 resetEntry .... 0000560c vPortInitialiseBlocks 00005628 __TI_static_base__ 000056c8 __TI_Handler_Table_Base 000056d4 __TI_Handler_Table_Limit 000056f0 __TI_CINIT_Base 00005710 __TI_CINIT_Limit
Notably, there's __TI_static_base__ and __TI_Handler_Table_Base in between the end of the previous section (ends @ 0x5628) and the __TI_CINIT_Base (0x56f0).
I wasn't able to find any documentation on __TI_static_base__, and couldn't find any confirmation that the Handler table will always appear before the Cinit table. Is there a way to capture the whole of the .cinit section?
Thank you!
Hi Robin,
We started working on your issue and will provide an update soon.
--
Thanks & regards,
Jagadish.
The .cinit section contains the autoinit table for C/C++ programs. The __TI_CINIT_Base and __TI_CINIT_Limit point to the start and end of this table.
But the Linker CRC_table has the CRC value of .the whole .cinit section (start addr = 0x5628, and size=0xe8)
Hi QJ.
I should've clarified, I need symbols that point to the start and end of this .cinit section that I can reference in C code. The __TI_CINIT_Base and __TI_CINIT_Limit symbols only provide coverage of the autoinit table, but I need to be sure I can cover the .cinit..data.load range as well. Ideally I'd have a symbol pointing to the start address 0x5628 and the end address 0x5710.
Because I am using halcogen, I cannot insert symbols on my own into the section, as the code will be overwritten every time we regenerate halcogen code during development.
Because I am using halcogen, I cannot insert symbols on my own into the section, as the code will be overwritten every time we regenerate halcogen code during development.
You can insert your own code inside the predefined /* USER CODE BEGIN */, otherwise your code will disappear after you regenerate HalCoGen code.
I'd have a symbol pointing to the start address 0x5628 and the end address 0x5710.
I don't know if there is any symbol pointing to the starting address.
__TI_CINIT_Limit ponts to the end address.
Hi QJ,
Thanks for confirming the starting address behaviour. Do you know what __TI_static_base__ was used for? It seems to be generated at the start address of the .cinit section (0x5628) but I can't find any documentation confirming that this will always be true.
.cinit is for the initialized global and static variables. __TI_static_base__ may not point to the starting address of .cinit table.
I could not find the definition of __TI_static_base__.