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.

[参考译文] AM3352:代码编译问题

Guru**** 2589265 points
Other Parts Discussed in Thread: SYSBIOS, AM3352

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/603249/am3352-code-compilation-issues

部件号:AM3352
“线程:SysBIOS”中讨论的其它部件,

所以这可能不是孤立于一个例程,但我首先在这一例中注意到了这一点

GNU编译器4.9 .................................................................3.

TI RTOS SysBIOS 6.46 .1.38

CCS v 6.2

所以我有一个例程似乎很混乱。我声明了几个变量,它们不会在分解中出现,但肯定会被使用。 我有一些代码区域具有IF和ELSE,但其他代码不会显示在不可擦除的文件中,而其他许多代码在该例程的更低版本中也是如此。当我构建它时,看起来它的构建和链接都很好, 当我模拟变量显示在变量窗口中但未初始化的值时,即使我在声明中初始化缺少的变量,也不能在声明中设置断点, 但我可以处理其他变量。当我单步执行该例程时,我点击了所有其他变量,但缺少的变量。我关闭了优化,这是在调试模式下

这是我的第一个am3352项目,所以我想知道是项目设置还是.cfg设置错误。  

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

    如果您在此处发布代码,将会很有帮助。

    从您的描述来看,编译器的优化似乎已删除了代码和数据。

    编译时不进行优化和比较。

    只有常量值的局部变量是常量。 变量可以进行优化。

    条件列表常量可以优化的IF/ELSE语句。

    未调用的本地函数可能会被优化掉。

    函数可以内联。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我在最初的帖子优化中所说的那样,已关闭

    重复使用变量

    IF/ELSE不包含常量

    函数未内联

    我可以共享代码(如果需要),但这似乎是越来越多的例程的问题,因为我现在通过反汇编窗口查看它们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我环顾四周时,似乎c_int00没有运行,当我在反汇编窗口中放置一个断点时,我从未碰到它。我搞错了什么设置,会阻止我点击c_int00?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果重复使用,则可能会将其放入寄存器中。 这被视为编译器SOP,而不是优化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很好,只要它的行为正确,它就不会显示。我初始化声明中的变量,我得到这些变量的随机值。正如我之前发布的那样,它看起来似乎c_int00没有运行,所以我相信我的静态变量没有被设置 以及其他事项
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所以 当我环顾四周时,似乎c_int00没有运行,当我在反汇编窗口中放置一个断点时,我从未碰到它。我搞错了什么设置,使我无法按c_int00?

    两条评论:

    1)我认为该符号需要是 _c_int00 (前导下划线),而不是 c_int00。 不确定您的帖子中是否出现打字错误。

    这是基于查看与您的SYS/BIOS版本不完全相同的版本。

    2)由于 在main之前调用_c_int00函数,从CCS 7.2 起,如果 CCS调试器在启动调试器会话时运行到main,则不会遇到_c_int00上的断点。 取消勾选 "自动运行"和"启动选项  "中的选项将允许在_c_int00上遇到断点。

    [这可能是 由_c_int00作为入口点引起的]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我未选中该设置,因此它不会运行到主菜单

    我应该注意,我的C6000主板都从_c_int00开始,而AM3352从CACHEDataCleanInvRange开始
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我应该注意,我的C6000主板都从_c_int00开始, 而AM3352 从CACHEDataCleanInvRange

    开始。使用GCC编译的TIVA ARM Cortex-M设备程序存在CCS调试器为程序选择错误的输入地址的问题。 这会导致程序崩溃-请参阅 使用CCS GCC/Linaro 6.1 4.8 时的已知问题.................4.

    您可能遇到类似的问题。 作为变通方法,请尝试将以下内容添加到.lds链接程序脚本中以设置入口点:

    条目(_c_int00) 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所以我改变了这个,我还把它添加到了基本链接程序部分的项目属性中。所以开始是"_c_int00"。奇怪的是根据映射文件,_c_int00的地址现在是它的开始位置。但是, 在调试窗口中,它仍然显示CACHEDataCleanInvRange,但地址是正确的。这是我不应该担心的吗? 但是,即使这样做,我的静态变量仍然没有初始化它们的值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CACHEDataCleanInvRange:查看链接器映射文件。

    变量初始值:在_c_int00开始时可能不执行变量的初始化代码。

    在main()处放置一个断点,运行到main ,然后检查它们现在是否已初始化。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能错过了我的帖子,但我确实重新检查了我的值,但它们仍未初始化
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是否与链接程序基本选项-nodstartfiles有关?

    我一直检查它,当我取消选中它时,我收到以下错误:

    Makefile:198:目标'Model840i 3352.out '的配方失败
    C:\ti\BIOS_6_46_01_38\packages\gnu\targets\arm\rtsv7A\lib\boot.aa8fg(startup.oa8fg):在函数`_fini'中:
    C:\ti\BIOS_6_46_01_38\packages\gnu\targets\arm\rtsv7A/startup.c:94:多个`的定义
    C:/ti/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/./lib/gcc/arm-none-eabi/arm.3/armv7-ar/thum/fpU/crti.o:(.fini+0x0) 4.9 :首先在此处定义
    C:\ti\BIOS_6_46_01_38\packages\gnu\targets\arm\rtsv7A\lib\boot.aa8fg (startup.oa8fg):(.data.__DSO_handl+0x0):`__DSO_handle的多个定义
    C:/ti/ccsv6/tools/compiler/gcc-arm-none-eabi-4_9-2015q3/bin/./lib/gcc/arm-none-eabi/arm.3/armv7-ar/thum/fpU/crtbegin.o:(.data+0x0) 4.9 :首先在此处定义
    collect2.exe:错误:LD返回1个退出状态
    gmake [1]:***[Model840i 3352.输出]错误1
    gmake:***[All]错误2
    Makefile:194:目标'All'的配方失败
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是否与链接器基本选项-nosstartfiles相关?

    我曾查看过一些使用GCC编译器的ARM Cortex-A SYS/BIOS程序,这些程序也有 -nosstartfiles。 当尝试删除 -nostartfiles选项时,我得到了与您相同的重复符号错误。

    SYS/BIOS有自己的启动功能,因此认为 需要使用-nodstartfiles。

    至于全局变量未初始化的问题,仍不能确定是什么导致了这一问题。 另外,我在 SYS/BIOS中看不到函数CACHEDataCleanInvRange。 是否正在使用StarterWarer或某些其他库软件?

    是否可以发布完整的项目,或者链接程序映射文件失败?

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

    包括TI RTOS星型器件库。我曾问过一次,在一篇老文章中,我是否看到了库列表,但没有人帮助我,所以我有点走了。我对ARM和星型器件完全不熟悉,所以学习曲线很好 非常陡峭

    我无法加载整个项目。我可以包括项目文件(.ccsproject,.cproject,.project),地图文件以及我拥有的任何链接器文件(如果需要)。如果只需要地图文件,我可以执行此操作

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

    cobsonchael 说:
    我可以包括项目文件(.ccsproject,.cproject,.project)和地图文件以及我拥有的任何链接器文件(如果需要)。

    如果您发布这些文件,那么了解项目如何按库结构化将非常有用。

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

    好的,zip文件中包括.ccsproject,.cproject,AM335x.lds文件和正在使用的平台

    e2e.ti.com/.../projectfiles.zip

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

    我尝试在CCS中打开您的项目,但在属性中看不到链接的库。
    如何最好地重现变量问题?
    无需共享整个项目,是否有一个简单的示例在您的系统上显示此行为?

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果这是尝试解决问题的唯一方法,那么我想我必须尝试将项目缩减为我可以分享的内容。这可能需要几天时间
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是,如果它只是链接库的列表,下面是我对库的了解:
    "C"
    ":ti.osal.aa8fg"
    ":ti.drv.emac.am335x.aa8fg"
    ":ti.drv.mmcsd.aa8fg"
    ":ti.transport。nk.nimu.aa8fg"
    ":EDMA3_LLD_rm_sample.aa8fg"
    ":EDMA3_LLD_drv_sample.aa8fg"
    ":EDMA3_LLD_drv.aa8fg"
    ":EDMA3_LLD_rm.aa8fg"
    ":ti.fs.fatfs.aa8fg"
    "gcc"
    "米"
    "鼻子"
    ":os.aa8fg"
    "SOC"

    下面是搜索路径的内容:
    "${NDK_INSTALL_DIR}/packages/ti/NDK/OS/lib"
    "${pdk_install_path}\ti\osal\lib\tirtos\AM335x\A8\release"
    "${pdm_install_path}\ti\drv\mmcsd\lib\AM335x\A8\release"
    "${pdm_install_path}\ti\drv\emac\lib\am335x\armv7"
    "${EDMA3_LLD_INSTALL_DIR}\packages\ti\sdo_EDMA3\drv\samples\lib\AM335x-EVM\A8\release"
    "${EDMA3_LLD_INSTALL_DIR}\packages\ti\sdo_EDMA3\rm\samples\lib\AM335x-EVM\A8\release"
    "${EDMA3_LLD_INSTALL_DIR}\packages\ti\sdo_EDMA3\drv\lib\A8\release"
    "${EDMA3_LLD_INSTALL_DIR}\packages\ti\sdo_EDMA3\rm\lib\AM335x-EVM\A8\release"
    "${PDK_INSTALL_PATH}\ti\translation_NDK\Nimu\lib\AM335x\A8\release"
    "${pdm_install_path}\ti\fs\fatfs\lib\A8\release"
    "${BIOS_CG_ROOT}/packages/GNU/Targets/arm/libs/install-native/arm-none-eabi/lib/FPU"
    "$(BIOS_INSTALL_PATH)/packages/GNU/targets/arm/libs/install-native/arm-none-eabi/lib/FPU"
    "${PDK_INSTALL_PATH}/ti/starterware/binary/soC/lib/AM335x-EVM/A8/release/gcc"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用CCS 6.2 v链接GNU ARM编译器库选择时存在一个已知问题。 我们建议您使用6.1 3来防止出现此类构建问题。 请参阅此处:
    e2e.ti.com/.../53.9973万

    由于代码链接到拇指模式ARM库,我怀疑这是您问题的根本原因。

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

    因此,我看到在该线程中,它还指出7.0 发行版中有一个类似的错误。 CCS现在支持7.2。 是否有方法验证此问题在7.2 中已解决?

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

    处理器7.0 0.0.0043万 支持的CSv 7.0 (v 3.3 ,RTOS )版本已修复了此问题,因为我们已使用该版本对发行进行了系统测试。您可以在此处查看确切的版本:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_Release_Notes

    n`t试图在文档中的不同位置添加注释以警告用户此问题,但遗憾的是,在所有位置都没有突出显示此问题。 n`t正在努力寻找将CCS发行版与SDK发行版绑定的方法,以便用户不会遇到这种兼容性问题。

    此致,
    拉胡尔

    附:我们建议您使用发行说明和下载文件夹中所述的CCS版本,因此我们不建议您现在更新到7.2。 处理器SDK RTOS 4.0 将支持7.1 ,因此我们在3Q17发行版之前不会访问7.2。

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

    所以我把自己降级到6.1 3,我的静态变量仍然没有初始化,我仍然从CACHEDataCleanInvRange开始,它仍然是与_c_int00相同的位置。看起来没有什么变化

    我必须有一些设置被弄乱,或者包含一些库或文件,我不应该重叠

    e2e.ti.com/.../Model840i-3352.zip

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

    所以我降级到CCCACCOZ3 6.1 ,我的静态变量仍未初始化,我仍然从CACHEDataCleanInvRange开始,该位置与_c_int00仍然相同。似乎没有任何变化

    查看您发布的地图文件CACHEDataCleanInvRange 和 _c_int00符号位于不同的地址:

    .c_int00 0x81.46万e8 0xb4
    *(.c_int00)
    .c_int00 0x81.46万e8 0xb4 C:\ti\BIOS_6_46_02_47\packages\gnu\targets\arm\rtsv7A\lib\boot.aa8fg (boot.oa8fg)
    0x81.46万e8 _c_int00
    
    .text.CACHEDataCleanInvRange
    0x800b3de4 0x14 C:/ti/pdm_AM335x_1_0_3/packages/ti/starterware/binary/soC/lib/AM335x-EVM/A8/release/gcc\liboc.a (cache_arm.o)
    0x800b3de4 CACHEDataCleanInvRange 

    从MAP文件我无法解释CCS调试器为什么会在 与_c_int00相同的位置显示CACHEDataCleanInvRange。 能否发布CCS调试器的屏幕截图?

    此外,如果您可以在  启动调试会话时启用调试服务器日志记录,并发布可能有助于了解问题的日志。

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

    下面是调试服务器日志和屏幕截图

    e2e.ti.com/.../ds.zip

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

    这是调试服务器日志和屏幕截图

    调试服务器日志显示感兴趣符号的以下地址:

    0x0.0022万B4 32257432257 4 OFS_dwarf D:elf .symtab符号"CACHEDataCleanInvRange",地址0x2148220388x。
    0x0.0022万B4 32252432252 4 OFS_dwarf D:elf .symtab symbol "_c_int00" at address 0x2168848616x。 

    调试服务器日志中的符号地址实际上是十进制的,而不是0x前缀所建议的十六进制。 转换为十六进制符号地址与链接程序映射文件中的匹配。 因此,CCS在  读取.out文件时正确解析CACHEDataCleanInvRange和_c_int00符号的地址。 我不理解CCS stackbacktrace为什么将地址 0x81.46万e8报告为 CACHEDataCleanInvRange而不 是_c_int00,但我认为这是CCS调试器中的显示问题,而不是变量未正确初始化的原因。

    下面显示了在调试服务器日志中采样的不同程序计数器值,其中GTI_WRITEREG是CCS,它在_c_int00中设置初始入口点:

    	行6202:0x0.0001万B24 846848468 3 CortxA8 GTI R:GTI_READREG( 0x52CC60C8,0x0000020F,*0x4E9FE8F0 = 0x8146.041万 )= 0x0万
    	行6392:0x00001B24 849448494 3 CortxA8 GREG R:GTI_READTI R( 0x52CC60C8,0x0.002万F0
    	= 0x846.0004万:0:0 GTI_READREG( 0x52CC60C8, 0x0.002万F,*0x4E9FE780 = 0x8146.041万 )= 0x0万
    	行6519: 0x0.0001万B24 852748527 3 CortxA8 GTI R:GTI_READC8( 0x52CC60C8, 0x0000020F,*0x4E9FE780 = 0x81460410行0X81.46024亿F0= 0x0.0008万X24000X8F0:
    	0x24000X24000X24000X8F0=2.4万 0x24000X24000X24000X8F0= X24000X24000X24000X24000F02.4万 X24000X24000X24000X24000F0 =2.4万 = X24000X24000X24000F024000 X24000X24000X24000F0</s>24000 240002400024000240002400024000
    	0x0.0001万B24 30902430902 3 CortxA8 GTI R:GTI_WRITEREG( 0x52CC60C8,0x0000020F,*0x4E9FE924 = 0x814600E8 )= 0x00000000
    	行50454:0x00001B24 30905430905 3 CortxA8 GREG R:GTI_READ0000( 0x52CC60C8,0x0.0008万
    	= 0x0.0008万F000008:0.0008万:0x00008 E0008:0x0.0008万F: GTI_READREG( 0x52CC60C8, 0x0.002万F,*0x4E9FE780 = 0x81.46万E8 )= 0x0万
    	行5.0636万:0x0.0001万B24 30940430940 3 CortxA8 GTI R:GTI_READRE( 0x52CC60C8, 0x0000020F,*0x4E9FE780 = 0x81.46万E780
    	
    	行0x0.0008万:0x00008 E00008F: 0x00008F: 0x0000800080008 E0008 0x0.0001万B24 37221437221 3 CortxA8 GTI R:GTI_READREG( 0x52CC60C8, 0x0000020F,*0x4E9FE8F0 = 0x80072CB0)= 0x0万
    	Line 20.9057万: 0x0.0001万B24 72856472856 3 CortxA8 G209R: GTI_READ76( 0x5456FF0= 0x8000072CB0)= 0x00000008F248FTI
    	行:0x0.0008万F240x00008F248F0, 0x000000.0008万 0x00000:0万:0x00008F248F24= 0x00008F248F248F24: 0x0000E000X00000</s>00000 GTI_READREG( 0x5456F558, 0x0.002万F,*0x4E9FE750= 0x8146.041万 )= 0x0万
    	行209310: 0x00001B24 72890472890 3 CortxA8 GTI R: GTI_READRE( 0x5456F558, 0x0.002万F,*0x4E9FE750= 0x0.008万000248F4080000=
    	0x451F408F408:0.0248万 0x451F408F408: 0x558F408:4080000 0x558F408:
    	0x0.0001万B24 73265473265 3 CortxA8 GTI R:GTI_READREG( 0x5456F558,0x0.002万F,*0x4E9FE8C0 = 0x0.2412万A)= 0x0万 

    0x81.46万E8 _c_int00的起始位置,因此是预期的。

    0x8.0072万CB0是MAIN函数的8个字节,因此是预期的。

    0x8146.041万位于ti_SysBIOS_family_arm_A8_intcps_HWI_vectors中,偏移表示发生了数据中止。

    0x2.4126万和 0x0.2412万A位于公共引导ROM中。

    如果采样的程序计数器显示发生了数据中止异常,并且输入了引导ROM,则程序似乎在进入主程序后的某个时间出现数据中止异常,从而崩溃。 这是否与调试器中观察到的行为匹配?

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

    在我运行到main之后,我关闭了调试会话,因为我认为可能是问题的部分是我理解在main发生之前发生的。所以我想这是可以预料到的,因为我是关闭它的人。

    我被告知运行调试服务器,但不知道在哪里运行。我希望我提供的内容足以说明为什么静态变量没有初始化为声明时设置的值。

    如果一切似乎都在进行中,那么下一步该怎么做?

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

    我被告知运行调试服务器,但不知道在哪里运行。我希望我提供的内容足以说明为什么我的静态变量没有初始化为声明时设置的值。

    我没有完全解释, 但是运行调试服务器的请求是尝试确定CCS调试器是否正确加载程序(因为CACHEDataCleanInvRange显示在回溯中与c_int00相同的地址)。 根据再次查看调试服务器日志,我看不到任何明显的问题。

    对于静态变量未正确初始化的问题,您是否可以显示一些未正确初始化的变量?

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

    所有静态变量都未初始化并且具有随机值,这就是为什么我认为c_int未运行的原因。这使我无法开发此项目。您是否要求屏幕截图?

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

    所有静态变量都未初始化,并且具有随机值,这就是为什么我认为c_int没有运行。

    请再看 Model840i 3352.映射链接器映射文件您之前在那里发布的__data_start__ , __data_end__, __bss_start__和 __end__符号的两个副本:

    0x8030dd68 __data_start__=。
    0x8031.095万 __data_end__=。
    0x8030dd68 __data_load__= LOADADADDDR (.data)
    0x8031.095万 __data_start__=。
    0x8031.095万 __data_end__=。
    0x8036.848万 __bss_start__=。
    0x8143c60c __bss_end__=。
    0x8143c60c __bss_start__=。
    0x8143c60c __bss_end__=。 

    BIOS_6_46_02_47\packages\gnu\targets\arm\rtsv7A\startup.c源文件使用上述符号来初始化静态变量(在BSS和数据部分)。 有两 个带不同值的__data_start__符号(0x8030dd68 .vs.  0x8031.095万)和两 个具有不同值的__bss_start__符号(0x8036.848万 .vs.  0x8143c60c)。 我认为重复的符号导致静态变量无法初始化,因为 BIOS_6_46_02_47\packages\GNU/Targets\arm\rtsv7A\startup.c源文件只能看到两个不同的符号值之一。

    怀疑重复的符号来自 项目中的非SYS/BIOS AM335x.lds链接程序脚本文件。 是否可以尝试从 项目中删除AM335x.lds链接程序脚本,然后查看是否会导致静态变量正确初始化?

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

    所以这确实是有效的。现在的情况比以前好得多,我的静态变量似乎已经初始化了。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特
    感谢您参与讨论并提供帮助。 非常感谢。

    Lali