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.

[参考译文] TMS570LS1224:使用 IAR EWARM V8.22的 TMS570引导加载程序

Guru**** 2609285 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LS1224

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/745865/tms570ls1224-tms570-bootloader-using-iar-ewarm-v8-22

器件型号:TMS570LS1224
主题中讨论的其他器件:HALCOGEN

您好!

我使用 IAR EWARM V8.22进行开发、并遵循 Hercules TMS570LS12x MCU 引导加载程序的 SPNA192文档。

但是、我无法编译该项目。 请您向我推荐一个解决方案。

您是否建议必须修改为 CCS 工程提供的链接器文件以支持 IAR?

谢谢、此致、

Abrar

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

    我正在使用 IARv8.22使用 HALCOGEN 生成的 sys_link.cmd 文件

    我遇到以下错误:  

    ERROR[Li005]:"copy_in"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_copyAPI 2RAM_"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_binit___"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:没有"_TI_Handler_Table_BASE"的定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:没有"_TI_Handler_Table_limit"的定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_CINIT_BASE"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_CINIT_LIMIT"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_Pinit_BASE"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_Pinit_limit"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    致命错误[Lp049]:没有提到_IAR_DATA_init3、但需要初始化段.bss (bl_check.o #8)
    运行链接器时出错

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

    您好 Abrar、

    IAR Workbench 使用不同的链接器 cmd 文件。 请使用 HALCoGen 为 IAR 工作平台生成一个:

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

    您好!

    感谢您的回复。
    我已使用 HALCoGen 为 IAR 工作平台生成的 sys_link.cmd。

    以下是 sys_link.cmd 的内容
    /*------------------ *
    定义大小为4G 的存储器内存内存;

    define region vectors = mem:[来自0x00000000大小0x00000020];
    定义区闪存=内存:[0x00000020大小0x0013FFE0];
    define region stack = mem:[从0x08000000开始、大小为0x00001500];
    定义区域 RAM =内存:[自0x08001500大小0x0002EB00];
    定义块堆、大小= 0x800、对齐= 8{};

    通过副本{readwrite}进行初始化;
    不初始化{section.noinit};

    放入向量{readonly section .intvecs};
    置于闪存{readonly}中;
    放入 RAM{readwrite};
    放入 RAM{block heap};
    /*------------------ *


    但我遇到以下编译错误:

    ERROR[Li005]:"copy_in"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_copyAPI 2RAM_"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_binit___"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:没有"_TI_Handler_Table_BASE"的定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:没有"_TI_Handler_Table_limit"的定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_CINIT_BASE"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_CINIT_LIMIT"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_Pinit_BASE"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    ERROR[Li005]:"_TI_Pinit_limit"没有定义[引用自 D:\SafetyMCU_Bootloader\object\Debug\Obj\sys_startup.o]
    致命错误[Lp049]:没有提到_IAR_DATA_init3、但需要初始化段.bss (bl_check.o #8)
    运行链接器时出错

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    汇编函数"_copyAPI 2RAM_"基于 CCS 链接器命令文件。 sys_startup.c 不应调用__TI_auto_init ();

    您可以编写 C 代码,在 main()的开头将闪存 API 从闪存复制到 SRAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我已经为 F021_API_CortexR4_be.lib 提供了库路径、并修改了链接器文件、如下所示:

    /*------------------ //
    定义大小为4G 的内存内存内存内存内存内存;
    
    定义区域矢量=内存:[自0x00000000大小0x00000020];
    定义区域闪存=内存:[自0x00000020大小0x0013FFE0];
    定义区域堆栈=内存:[自0x08000000大小0x00001500];
    定义区域 RAM = mem:[从0x08001500开始、大小为0x0002EB00];
    定义大小为= 0x800、对齐= 8{}的块堆;
    
    通过复制进行初始化{readwrite};
    通过复制进行初始化{object bl_flash.o};
    通过复制{object F021_api_cortexr4_be.lib}进行初始化;
    不初始化{section .novecs};
    
    只将向量放在.intvecs 段中;
    放入闪存{readonly};
    放入 RAM {readwrite};
    放入 RAM {block heap};
    /*------------------ * 

    但是、当我尝试从闪存读取时、我在 IAR 中得到以下错误。

    请您建议一个解决方案。

    谢谢、此致、
    Abrar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于我使用 IAR EWARM V8.22和微控制器 TMS570LS1224 (大端字节序)、我尝试了以下操作:
    1) 1)在文件 CgT.IAR.h 中、我修改了行
    #if !defined (__little_ENDIAN__)//是大端字节序编译*/
    更改为
    #if (__little_ENDIAN__=0)/*是大端字节序编译*/
    2) 2)为了使 F021_API_CortexR4_be.lib 和 BL_FLASH_c 从 RAM 运行、我在链接器文件中添加了以下行:
    通过复制{对象 BL_FLASH.o }进行初始化;
    通过复制{对象 F021_API_CortexR4_be.lib}进行初始化;
    3) 3)我在访问闪存之前必须设置以下内容:
    a) FRDCNTL_BIT.RWAIT = 0;//因为我的运行频率低于50MHz
    b) FSM_WR_ENA_BIT.WR_ENA = 5;//启用写入使能
    c) EEPROM_CONFIG = 2 // EEPROM 等待配置。
    d) FSM_WR_ENA_BIT.WR_ENA = 2;//禁用写入使能
    4)在访问闪存之前禁用中断(_disable_interrupt_()),并在闪存访问完成后启用中断(_enable_interrupt_())。
    5) 5)我必须忽略以下警告:
    警告[Lt009]:不一致的 wchar_t 大小
    read.MarginByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy
    和15个其他对象具有 wchar_t 大小16位
    ADC.o 和72个其他对象、其中一些在 dl7Sx_TBN.a 中
    其他12个库具有 wchar_t 大小为32位

    根据 e2e.ti.com/.../746903上的帖子
    目前唯一的权变措施是降级 IAR Workbench。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是否由不同的 wchar_t 定义引起? 如果您切换回旧版本的 IAR Workbench、问题是否解决了?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Abrar、

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

    编译错误被解决并且闪存读取/写入/擦除在 IAR EWARM 8.22中工作。

    我没有切换回旧版本的 IAR Workbench、因此 F021_API_CortexR4_be.lib 中存在一条有关 wchar_t 大小不一致的警告。
    到目前为止,我没有发现任何问题是由於这项警告而引起的。

    非常感谢您的持续支持。

    此致、
    Abrar