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.

[参考译文] RTOS:基于闪存的应用程序上载 SCI-A 和闪存内核程序的问题

Guru**** 2539500 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/567133/rtos-flash-based-applicaiton-program-uploading-issue-with-sci-a-and-flash-kernel-program

Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

我将 F28377D 与 SYSBIOS 搭配使用。

我制作了一个基于闪存的应用程序、它通过 JTAG 加载它。

现在、我要使用 SCI-A 端口(引导 ROM 和 F2837xD_sci_flash_kernels_cpu01.c)上传应用程序以进行现场操作。

查看 F2837xD_sci_flash_kernels_cpu01.c 后、 rogram 和 verify 的算法 基于4个字的算法。

但是   、我的应用程序的段(.text:ti_catalog_c2800_initF2837x_flashfuncs)不与4个字对齐、因此 我在  上载期间记录了程序错误

我要附加链接器 cmd & map 文件。  是否自动合并(.ti_catalog_c2800_initF2837x_begin 和.text:ti_catalog_c2800_initF2837x_flashfuncs)的两个段或 对齐4个字?

e2e.ti.com/.../6052.App_5F00_Map_5F00_LinkerCMD.zip

此致、

JY Koh

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

    Jae Yong

    有几种方法可以实现这一点。  

    一种方法是修改 ti/catalog/c2800/initF2837x/Boot.c 以使用 CODE_ALIGN pragma。  但这需要重新构建启动模块本身,而且我不认为在您的产品安装中有一种简单的方法可以做到这一点。

    第二种方法是在安装中修改链接器命令模板。  可以向文件 ti/catalog/c2800/initF2837x/linkcmd.xdt 添加对齐规范:

    部分{
       .text:ti_catalog_c2800_initF2837x_flashfuncs:align=0x4 load =`Boot.loadSegment`、
                                                 Run =`Boot.runSegment`、
                                                 表(BINIT)


    这可能是最简单的、但如果您迁移到内核或 XDC 工具的更高版本、这将会丢失。

    第三个选项涉及修改用于应用的链接器命令文件、以创建具有所需对齐方式的特殊存储器区域、并在其中显式放置闪存函数。  例如、将 FLASHA 拆分以在链接器命令文件中添加特殊的 MYFLASH 区域:
    …μ A
         /*闪存引导地址*/
         开始  :origin = 0x080000,length = 0x000002

          /*闪存扇区*/
    // FLASHA    :origin = 0x080002,length = 0x001FFE //片上闪存*/
         MYFLASH:origin = 0x080004,length = 0x000080 //片上闪存*/
         FLASHA    :origin = 0x080100,length = 0x001EFE/* 片上闪存*/
    …μ A

    然后在应用配置中、告诉引导模块将闪存功能放置在特殊区域。  例如,在.cfg 文件中,我将“MYFLASH PAGE = 0”指定为“为闪存函数加载段”。  这可以在图形配置工具中完成、也可以通过将其添加到.cfg 文件中来完成:

    BOOT = xdc.useModule('ti.catalog.c2800.initF2837x.Boot');
    boot.bootFromFlash = true;
    boot.configureFlashController = true;
    boot.loadSegment ="MYFLASH PAGE = 0";

    然后、根据区域定义对齐闪存函数:

     ti_catalog_c2800_initF2837x_begin
    *         0   00080000   00000002     
                     00080000   00000002    Boot.a28FP:Boot_ASM.o28FP (.ti_catalog_c2800_initF2837x_begin)

    .text:ti_catalog_c2800_initF2837x_flashfuncs
    *         0    00080004   00000027    运行 ADDR = 0000b000
                     00080004   00000027    Boot.a28FP:Boot.o28FP (.text:ti_catalog_c2800_initF2837x_flashfuncs:_ti_catalog_c2800_initF2837x_Boot_initFlash)

    econst   0   00080100   00001d8f


    我不知道后面这两种方法中哪一种最适合您的用例,但我认为这两种方法都可以使用。

    此致、
    Scott

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

    您好、Scott、

    感谢您的友好解释。

    我认为第三种选择适合这种情况。

    最好的地方

    JY Koh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有一个建议的答案、由于此主题在一周内未激活、建议的答案被标记为验证。 请随意选择"拒绝回答"按钮、并回复更多详细信息。