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.

[参考译文] TMS320F28379D:未初始化静态变量(.cinit 与.data)

Guru**** 2039500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1278552/tms320f28379d-static-variable-not-initialized-cinit-vs-data

器件型号:TMS320F28379D

大家好!

我使用了闪存编程器项目来制作次级引导加载程序。 我遇到了一个问题,我可以 QuickFix,但我有兴趣找到它的根本原因。
我有一个静态结构数组、我在 c 文件中声明并初始化该结构数组。 问题是初始化没有正确完成、因为我第一次使用时所有数据都是0。
此处是代码的一部分:

静态 SciData_T _sciList[SCIPORT_NUM]=
{
// Reg;InCircBuf;OutCircBuf;InBuf;OutBuf; RxGpioNo;TxGpioNo;MuxPos
{&SciaRegs、&_uploadInputCircBuf、&_uploadOutputCircBuf、_uploadInputBuf、_uploadOutputBuf、 SCI_UPL_RX_GPIO_NO、SCI_UPL_TX_GPIO_NO、SCI_UPL_MUX_POS}//上传端口输入+输出
{&ScibRegs、&_debugInputCircBuf、&_debugOutputCircBuf、_debugInputBuf、_debugOutputBuf、 SCI_DEBUG_RX_GPIO_NO、SCI_DEBUG_TX_GPIO_NO、SCI_DEBUG_MUX_POS}//调试端口输出
};
#define SCI_LIST_LEN (sizeof (_sciList)/sizeof (_sciList[0])


#if SCI_DataList_LEN!= SCIPORT_NUM
#error "_sciList 与 SCIPORT_NUM"的大小不同
#endif


/
公有函数
* /

/
*
*参数:-
*
*输出:如果 INIT 运行良好则为 true ,否则为 false
*
*描述:设置循环缓冲器和 SCI 端口
*用于固件上传和调试端口
*
* /
bool_T 45g Handler_Init (空)
{
bool_T initOK= false;
Uint16_T I = 0;


如果(!_initDone)
{

对于(I=0;I<SCI_LIST_LEN;I++)
{
initOK &= cir19u Buffer_Init (_sciList[I].CircInputBuffer,_sciList[I].InputBuf,update_buf_size_in);
initOK && cironoci Buffer_Init (_sciList[i].cOutputBuffer,_sciList[I].OutputBuf,update_buf_size_out);

当我 在 Handler_Init 中使用_sciList()时,数据全部为0。 我将我的项目(COFF)与我拥有的另一个项目(ELF)进行了比较、区别似乎是我的数据位于.cinit 段中、而在我的其他项目中、这些数据位于.data 段中。 链接器文件似乎大致相同。 如何解决此问题?

下面是一些映射文件:


TMS320C2000连接器 PC v22.6.0

>>链接周一十月9 12:00:11 2023

输出文件名:<0822047_secondaryBootloader.out>
入口点符号:"code_start"地址:00080000


存储器配置

名称源长度已使用未使用属性填充
---------------- ---------------- ---------------- ---------------- ---------------- ----------------
PAGE0:
RAMM0 00000123 000002dd 00000000 000002dd RWIX
RAMLS0 00008000 00000800 000000d5 0000072b RWIX
RAMLS1 00008800 00000800 00000000 00000800 RWIX
RAMLS2 00009000 00000800 00000000 00000800 RWIX
RAMLS3 00009800 00000800 00000000 00000800 RWIX
RAMLS4 0000a000 00000800 00000000 00000800 RWIX
RAMD0 0000b000 00000800 00000000 00000800 RWIX
RAMGS14 0001a000 00001000 00000000 00001000 RWIX
RAMGS15 0001b000 00000ff8 00000000 00000ff8 RWIX
BEGIN 00080000 00000002 00000002 00000000 RWIX
FLASHA 00080002 00001ffe 00000000 00001ffe RWIX
FLASHB 00082000 00002000 00001ff8 00000008 RWINIX
FLASHC 00084000 00002000 00001c21 000003df RWIX
FLASHD 00086000 00002000 000000d5 00001f2b RWIX
FLASHE 00088000 00008000 00000000 00008000 RWIX
FLASHF 00090000 00007ff0 00000626 000079ca RWIX
FLASHF_meta 00097ff0 00000010 00000008 00000008 RWIX
FLASHK 000b8000 00002000 00000000 00002000 RWIX
FLASHL 000ba000 00002000 00000000 00002000 RWIX
FLASHM 000bc000 00002000 00000000 00002000 RWIX
FLASHN 000be000 00001ff0 00000000 00001ff0 RWIX
复位003fffc0 00000002 00000000 00000002 RWIX

第1页:
BOOT_RSVD 00000002 00000121 00000000 00000121 RWIX
RAMM1 00000400 000003f8 000003f8 00000000 RWIX
ADCARESULT 00000b00 00000018 00000018 00000000 RWIX
ADCBRESULT 00000b20 00000018 00000018 00000000 RWIX
ADCCRESULT 00000b40 00000018 00000018 00000000 RWIX
ADCDRESULT 00000b60 00000018 00000018 00000000 RWIX
CPUTIMER 0 00000c00 00000008 00000008 00000000 RWIX
CPUTIMER 1 00000c08 00000008 00000008 00000000 RWIX
CPUTIMER 2 00000c10 00000008 00000008 00000000 RWIX
PIECTRL 00000ce0 0000001a 0000001a 00000000 RWIX
PIEVECTTABLE 00000d00 00000200 000001c0 00000040 RWIX
DMA 00001000 00000200 000000e0 00000120 RWIX
CLA1 00001400 00000080 0000003E 00000042 RWIX
CLB1LOGICCFG 00003000 00000052 0000003E 00000014 RWIX
CLB1LOGICCTRL 00003100 00000040 00000040 00000000 RWIX
CLB1DATAEXCH 00003200 00000200 00000108 000000f8 RWIX
CLB2LOGICCFG 00003400 00000052 0000003e 00000014 RWIX
CLB2LOGICCTRL 00003500 00000040 00000040 00000000 RWIX
CLB2DATAEXCH 00003600 00000200 00000108 000000f8 RWIX
CLB3LOGICCFG 00003800 00000052 0000003E 00000014 RWIX
CLB3LOGICCTRL 00003900 00000040 00000040 00000000 RWIX
CLB3DATAEXCH 00003a00 00000200 00000108 000000f8 RWIX
CLB4LOGICCFG 00003C00 00000052 0000003e 00000014 RWIX
CLB4LOGICCTRL 00003d00 00000040 00000040 00000000 RWIX
CLB4DATAEXCH 00003e00 00000200 00000108 000000f8 RWIX
EPWM1 00004000 00000100 00000100 00000000 RWIX
EPWM2 00004100 00000100 00000100 00000000 RWIX
EPWM3 00004200 00000100 00000100 00000000 RWIX
EPWM4 00004300 00000100 00000100 00000000 RWIX
EPWM5 00004400 00000100 00000100 00000000 RWIX
EPWM6 00004500 00000100 00000100 00000000 RWIX
EPWM7 00004600 00000100 00000100 00000000 RWIX
EPWM8 00004700 00000100 00000100 00000000 RWIX
EPWM9 00004800 00000100 00000100 00000000 RWIX
EPWM10 00004900 00000100 00000100 00000000 RWIX
EPWM11 00004a00 00000100 00000100 00000000 RWIX
EPWM12 00004b00 00000100 00000100 00000000 RWIX
eCAP1 00005000 00000020 0000001a 00000006 RWIX
ECAP2 00005020 00000020 0000001a 00000006 RWIX
ECAP3 00005040 00000020 0000001a 00000006 RWIX
ECAP4 00005060 00000020 0000001a 00000006 RWIX
ECAP5 00005080 00000020 0000001a 00000006 RWIX
ECAP6 000050a0 00000020 0000001a 00000006 RWIX
EQEP1 00005100 00000022 00000022 00000000 RWIX
EQEP2 00005140 00000022 00000022 00000000 RWIX
EQEP3 00005180 00000022 00000022 00000000 RWIX
DACA 00005c00 00000008 00000007 00000001 RWIX
DACB 00005c10 00000008 00000007 00000001 RWIX
DACC 00005c20 00000008 00000007 00000001 RWIX
CMPSS1 00005c80 00000020 0000001b 00000005 RWIX
CMPSS2 00005ca0 00000020 0000001b 00000005 RWIX
CMPSS3 00005cc0 00000020 0000001b 00000005 RWIX
CMPSS4 00005ce0 00000020 0000001b 00000005 RWIX
CMPSS5 00005d00 00000020 0000001b 00000005 RWIX
CMPSS6 00005d20 00000020 0000001b 00000005 RWIX
CMPSS7 00005d40 00000020 0000001b 00000005 RWIX
CMPSS8 00005d60 00000020 0000001b 00000005 RWIX
SDFM1 00005e00 00000080 00000048 00000038 RWIX
SDFM2 00005e80 00000080 00000048 00000038 RWIX
MCBSPA 00006000 00000024 00000024 00000000 RWIX
MCBSPB 00006040 00000024 00000024 00000000 RWIX
SPIA 00006100 00000010 00000010 00000000 RWIX
SPIB 00006110 00000010 00000010 00000000 RWIX
*** 00006120 00000010 00000010 00000000 RWIX
uPP 00006200 00000048 00000048 00000000 RWIX
WD 00007000 0000002b 0000002b 00000000 RWIX
NMIINTRUPT 00007060 00000007 00000007 00000000 RWIX
XINT 00007070 0000000b 0000000b 00000000 RWIX
SCIA 00007200 00000010 00000010 00000000 RWIX
SCIB 00007210 00000010 00000000 RWIX
SCIC 00007220 00000010 00000010 00000000 RWIX
SCID 00007230 00000010 00000010 00000000 RWIX
I2CA 00007300 00000022 00000022 00000000 RWIX
I2CB 00007340 00000022 00000022 00000000 RWIX
ADCA 00007400 00000080 0000007c 00000004 RWIX
ADCB 00007480 00000080 0000007c 00000004 RWIX
ADCC 00007500 00000080 0000007c 00000004 RWIX
ADCD 00007580 00000080 0000007c 00000004 RWIX
INPUTXBAR 00007900 00000020 00000020 00000000 RWIX
XBAR 00007920 00000020 0000000e 00000012 RWIX
SYNCSOC 00007940 00000006 00000006 00000000 RWIX
DMACLASRCSEL 00007980 0000001a 0000001a 00000000 RWIX
EPWMXBAR 00007a00 00000040 00000040 00000000 RWIX
CLXBAR 00007a40 00000040 00000040 00000000 RWIX
OUTPUTXBAR 00007a80 00000040 00000040 00000000 RWIX
GPIOCTRL 00007c00 00000180 00000180 00000000 RWIX
GPIODATA 00007f00 00000030 00000030 00000000 RWIX
RAMLS5 0000a800 00000800 000007ff 00000001 RWIX
RAMD1 0000b800 00000800 00000000 00000800 RWIX
RAMGS0 0000c000 00001000 0000005a 00000fa6 RWIX
RAMGS1 0000d000 00001000 00000000 00001000 RWIX
RAMGS2 0000e000 00001000 00000000 00001000 RWIX
RAMGS3 0000f000 00001000 00000000 00001000 RWIX
RAMGS4 00010000 00001000 00000000 00001000 RWIX
RAMGS5 00011000 00001000 00000000 00001000 RWIX
RAMGS6 00012000 00001000 00000000 00001000 RWIX
RAMGS7 00013000 00001000 00000000 00001000 RWIX
RAMGS8 00014000 00001000 00000000 00001000 RWIX
RAMGS9 00015000 00001000 00000000 00001000 RWINX
RAMGS10 00016000 00001000 00000000 00001000 RWIX
RAMGS11 00017000 00001000 00000000 00001000 RWIX
RAMGS12 00018000 00001000 00000000 00001000 RWIX
RAMGS13 00019000 00001000 00000000 00001000 RWIX
CPU2TOCPU1RAM 0003f800 00000400 00000000 00000400 RWIX
CPU1TOCPU2RAM 0003fc00 00000400 00000000 00000400 RWIX
EMIF1 00047000 00000070 00000028 00000048 RWIX
EMIF2 00047800 00000070 00000028 00000048 RWIX
CANA 00048000 00000200 00000164 0000009c RWIX
CANB 0004a000 00000200 00000164 0000009c RWIX
IPC 00050000 00000024 00000024 00000000 RWIX
FLASHPUMPSEMAPHORE 00050024 00000002 00000002 00000000 RWIX
DEVCFG 0005d000 0000012e 0000012e 00000000 RWIX
ANALOGUESUBSYS 0005d180 00000048 0000003E 0000000A RWIX
CLKCFG 0005d200 00000032 00000032 00000000 RWIX
CPUSYS 0005d300 00000082 00000082 00000000 RWIX
ROMPREFETCH 0005e608 00000002 00000002 00000000 RWIX
DCSMZ1 0005f000 00000024 00000022 00000002 RWIX
DCSMZ2 0005f040 00000024 00000022 00000002 RWIX
DCSMCOMMON 0005f070 00000008 00000006 00000002 RWIX
MEMCFG 0005f400 00000080 00000076 0000000a RWIX
EMIF1CONFIG 0005f480 00000020 0000000a 00000016 RWIX
EMIF2CONFIG 0005f4a0 00000020 0000000a 00000016 RWIX
ACCESSPROTECTION 0005f4c0 00000040 0000002e 00000012 RWIX
MEMORRYERROR 0005f500 00000040 0000003a 00000006 RWIX
ROMWAITSTATE 0005f540 00000002 00000002 00000000 RWIX
FLASH0CTRL 0005f800 00000182 00000182 00000000 RWIX
FLASH0ECC 0005fb00 00000028 00000000 RWIX


段分配映射

输出属性/
章节页面原点长度输入章节
---------------- ---------------- ---------------- ----------------
代码起始
* 0 00080000 00000002
00080000 00000002 fwupgradec1toc2_start.obj (codestart)

.cinit 0 00082000 000000af
00082000 00000026 BootloadHandler.obj (.cinit)
00082026 0000001e SciHandler.obj (.cinit:__sciList)
00082044 0000001b LedHandler.obj (.cinit)
0008205f 00000011 FlashHandler.obj (.cinit:_sectorErased)
00082070 0000000e Timer_Util.obj (.cinit)
0008207e 0000000b ProtocolHandler.obj (.cinit)
00082089 0000000b BootloadHandler.obj (.cinit:_BOOTL_STATE_STR)
00082094 00000009 SciHandler.obj (.cinit)
0008209d 00000008 PinDriver.obj (.cinit)
000820a5 00000004 SCI_GetFunction.obj (.cinit)
000820a9 00000004 rts2800_fpu32.lib:errno.c.obj (.cinit)
000820ad 00000002 --孔--[填充=0 ]

.switch 0 000820b0 00000032

等等。。。。

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    您是否可以尝试使用 pragma 指令将 _sciList  数据分配给另一个段?

    我得研究一下它的编译、所以第二天内就会回到您的身边。

    谢谢。此致、

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    有关为此问题初始化静态变量和全局变量、您可以参阅 C28x 编译器手册

    www.ti.com/.../spru514y.pdf

    谢谢。此致、

    查尔斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Charles:
    感谢您的消息。 如果我没有设置 pragma、我的数据位于0x0AE1E@数据中。 对 COFF 中初始化静态变量的预期。 如果我使用该 pragma 并将其放在".ebss"中、则会得到相同的结果- NULL 数据。 我在链接器文件中制作了自己的段:
    我的博客:> RAMGS10       PAGE = 1

    当然、我在下面的代码中对其进行了更改:
    #pragma DATA_SECTION (_sciList、"MySciList")
    静态 SciData_T _sciList[SCIPORT_NUM]=...

    数据现在位于 0x00016000@Data 中 、但结果相同。 我尝试了".data"、".ebss"、这是我自己的分区、具有不同的 RAM 区域...甚至是闪存。


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、通过您的链接、我看到 COFF 不一定会将静态变量设置为零。 这就是为什么我们应该明确这样做的。 但事实并非如此、因为我一开始就初始化我的变量。 这完全不是完成的。 所以、在您发送给我的链接中、我真的没有看到任何解决我的问题的方法。