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.

[参考译文] 编译器/TMS320F280049:BL_entrytable.asm EABI 编译

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/946842/compiler-tms320f280049-bl_entrytable-asm-eabi-compilation

器件型号:TMS320F280049
主题中讨论的其他器件:C2000WARE

工具/软件:TI C/C++编译器

您好!

我的 eabi 格式有另一个问题。

bl_entrytable.asm 汇编器文件存在问题、它包含在 bl_app 示例中。

如果切换到 COFF 格式、则所有内容都可以编译、在 EABI 格式中、编译器或链接器会抛出 pAppEntry 和 pAppSig 指针、并且 app_table 段保持为空。

如何在 EABI 模式下将这些指针放置在存储器中?

以下是此文件两种格式的内容示例。 我出了什么问题?

EABI 格式:

.def pBootEntry
.ref CRCestVector
.ref code_start
.def pAppEntry
***************************


*函数:codestart 段
*
说明:分支到代码起始点


.sect "app_table"

app_table:
pAppEntry .long code_start
pAppSig .long CRCestVector

.sect "BL_TABLE "

BL_table:
pBootEntry .long 0


.end 

COFF 格式:

.def _pBootEntry
.ref _CRCestVector
.ref code_start
.def _pAppEntry
.def _pAppSig


*函数:codestart 段
*
说明:分支到代码起始点


.sect "app_table"

app_table:
_pAppEntry .long code_start
_pAppSig .long _CRCestVector

.sect "BL_TABLE:


_pBootEntry .long 0

.end 

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

    您好!

    这是您的自定义项目还是正在尝试 C2000ware DriverLib 示例?

    错误消息是什么?

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

    您好!

    我正在制作自己的引导加载程序、但这也适用于2806x 示例中的引导加载程序。

    我已经弄清楚了问题是什么。 在 EABI 模式下、具有跳转地址(pAppEntry 和 pFwCrcTable)的向量会被编译器优化并丢弃。
    为避免这种情况、您需要使用它们、例如:

    extern volatile void * pFwCrcTable;
    
    void taskFxn (UArg a0、UArg A1)
    {
    system_printf ("enter taskFxn ()\n");
    
    Task_sleep (10);
    
    volatile uint32_t * ptr = pFwCrcTable;
    (空) ptr;
    
    system_printf ("exit taskFxn ()\n"\});
    
    system_flush();/*强制 SysMin 输出到控制台*/
    } 

    然而、在 EABI 模式下、我没有发现任何地方需要手动将转换矢量注册到 code_start、否则也会优化并由编译器抛出。 这是在 DriverLib 示例中完成的、而不是在旧示例中完成的。 很抱歉、TI 已经屈服于这种使用"高级"库的倾向。

    如果未正确指定转换矢量 CODE_START、则这些示例仅适用于调试。  

    权变措施: