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/TMS320F28069:具有 SYSBIOS 的闪存 API

Guru**** 2616675 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/689301/rtos-tms320f28069-flash-api-with-sysbios

器件型号:TMS320F28069
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

你(们)好

我有一个使用闪存 API 函数 Flash_Program () flash_Program ()和 Flash_Verify ()的正常 F28069非 RTOS 应用程序。

然后、我使用中断、邮箱和任务从 NonRTOS 应用程序创建了一个 SYSBIOS 应用程序(我不使用 BIOS 中的任何引导或启动函数。 我从 NonBios 应用程序中获得了所有这些应用程序)。

现在,在应用程序启动后,它以一个名为 BIOS_linkedWithIncorrectBootLibrary()的无限循环函数结束。

这意味着什么? 我不使用任何引导函数。 我只想使用上面的闪存 API 函数。  

此致

Michael

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

    Michael、

    您是否确定遵循了闪存 API 文档中提到的规则?

    步骤10:回调、中断和看门狗的规则

    此致、
    曼诺伊

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

    您好、Manoj

    感谢您的回答。 我有点忙。 我是指 Flash_Program () Flash_Erase () Flash_Verify ()。

    是的、我遵循文档 TMS320F2806x 闪存 API 中的规则。 它在我的非 RTOS 应用程序中工作正常。

    但是、当我启动 BIOS (BIOS_start())时、它会在不使用任何 API 调用的情况下结束到 BIOS_linedWithIncorrectBootLibrary()中。

    ///----------------------------------
    全局 int main (void)
    ///----------------------------------

       //
       //备注:
       //应用程序主函数。 用于初始化和启动 RTOS。
       //输入   无
       //返回  代码
       //
       ///----------------------------------------------------------

       //
       //初始化并定义所有线程、系统和数据
       //
       SYS_INIT();         //系统初始化,计时
       Flash_initRam();    //准备用于 SRAM 的 API 闪存函数
       Flash_initData();   //从闪存读取客户数据
       BU_init();          //初始化业务单元线程和邮箱
       sci_init();         //初始化 UART 接口线程和邮箱
       LED_INIT();         //初始化周期性 LED 线程

       //启动系统 BIOS
       BIOS_start();   //不返回

       返回(0);


    此致

    Michael

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

    我从未使用过 SYSBIOS。 所以,我可能不是回答这个问题的正确人选。

    但是、我找到了一篇您可能会发现有趣的文章。 请检查
    e2e.ti.com/.../268608

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

    您好、Manoj

    感谢您的回答。

    您提到的帖子非常有趣。

    但我的问题出现在较早的时候。 我甚至不调用任何闪存 API 函数。
    在 BIOS_start()之后,程序会在 BIOS_linedWithIncorrectBootLibrary()无限循环中出现。

    void BIOS_linedWithIncorrectBootLibrary (void)

       /*
        * 如果执行到达此函数、则表示错误
        * 引导库与和 XDC 运行时启动函数链接在一起
        未 调用*。 如果代码生成工具的 RTS 库会发生这种情况
        * 之前是 SYS/BIOS 在链接行上生成的链接器 cmd 文件。
        *
       while (1);

    我不能完全理解上述评论。 我使用2806x_BootROM_API_TABLE_Symbols_fpu32.lib。

    我应该使用另一个库吗? 还是更新版本?

    此致

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此库文件2806x_BootROM_API_TABLE_Symbols_fpu32.lib 可用于调用 API 函数。 这似乎是与正版 SYSBIOS 相关的问题。 我已经与其他人进行了接触、希望在这个主题上为您提供帮助。

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

    为了使 SYS/BIOS 应用程序正常工作、您必须使用 XDC 运行时的应用程序入口点、而不是 TI RTS 库提供的应用程序入口点。 确保链接器命令文件(或命令行)按照链接顺序将这些库放置在 TI 提供的 RTS 库之前:

      "/ti/catalog/c2800/init/lib/Boot.a28FP "
      "/ti/targets/rts2800/lib/ti.targets.rts2800.a28FP "
      "/ti/targets/rts2800/lib/boot.a28FP "

    Alan

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

    此问题是否已解决?

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

    您好、Manoj

    不、不是。

    我不明白。  

    SYSBIOS 创建了一个包含以下内容的 Linker.cmd:

    -l"C:\Users\Mike\Dropbox\BraceEmbeddedWorking\Bmbed_TMDXCNCD28069\F28069AppSysBios\Debug\configPkg\package\ccfg\app_p28fp.o28fp"
    -l"C:\Users\Mike\Dropbox\BraceEmbeddedWorking\Bmbed_TMDXCNCD28069\F28069AppSysBios\src\SysBIOS\SysBIOS.a28fp"
    -l"C:\ti\BIOS_6_53_01_03\packages/ti\catalog\c2800\init\lib\Boot.a28fp"
    -l"C:\ti\BIOS_6_53_01_03\packages/ti\targets\rts2800\lib\ti.targets.rts2800.a28fp"
    -l"C:\ti\BIOS_6_53_01_03\packages/ti\targets\rts2800\lib\boot.a28fp"

    我还在 F28069App.cmd 中添加了:

       //
       // RAM 中的闪存编程例程
       //
       FlashProgrammingRamSect: load = Application,   page = 0
              运行= L8DpSaramMem、    页= 1
              Load_start (_FlashProgramming_loadstart)、
              LOAD_END  (_FlashProgramming_loadend)、
              RUN_START (_FlashProgramming_runstart)

    -使用 XDC 运行时应用程序条目需要做什么? XDC 启动时、该怎么办?

    -通常:我可以使用 2806x_BootROM_API_TABLE_Symbols_fpu32.lib 中的当前闪存函数吗?

    -我是否必须在 cfg 文件中定义特殊的启动条目函数? 启动时设置用户复位功能? C 运行时初始化之前的函数? (但这是只读的)

    -还是与 SYS/BIOS 启动配置页面类似? 它看起来与 XDC 类似。

    -我是否必须定义一个条目函数,以便在 BIOS 初始化之前初始化闪存函数? BIOS 开始之前的时间?

    -当我使用 SYSBIOS 模板为 C28069定义新的 CCS 工程、然后加载如上所示的闪存函数时、这是否有帮助?

    -我是否必须将闪存函数加载到内存中的特殊空间?  

    -您是否知道描述我的案例的正确文档? 我认为我的用例没有什么特别之处。 具有 SYSBIOS 和闪存编程功能的 F28069。

    重新分级

    Michael

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

    我不适合回答这个问题。 让我们等待 Alan 的回复。

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

    链接器命令文件看起来正常。 但链接器命令行是什么样的?

    生成的链接器命令文件必须出现在链接行中 codegen 工具的"libc.a"之前。 否则、来自 libc.a 的"c_int00"入口点将被拉入、而不是从"C:\ti\BIOS_6_53_01_03\packages/ti\targets\rts2800\lib\boot.a28fp"中拉入。

    Alan

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

    你好、Alan

    感谢您的回答。 在这里、我的链接器命令行:

    -v28 -ml -mt --cla_support=cla0 --float_support=fpu32 --vcu_support=vcu0 -g -c99 --diag_warning=225 --xml_warning=255 --diag_wrap=off --display_error_number --sysgen_func_subsections=on -z -xml_warning="-link_intrack_info-display_isde-link_ines=-link_ines"--link_ines"--link_inoid_ines=-link_ines"--link_ram_ram_ines"--inoid_clus_clus_overview_ines"--ines"-=clus_ines"./ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.7.LTS/include /ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.7.LTS/lib

    此致

    Michael

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

    CCS CDT 编译控制台输出中显示的最终链接器命令行应该如下所示:

    调用:C2000链接器
    "c:/ti/ccs810/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/bin/cl2000 "-v28 -ml -mt --cla_support=cla0 -float_support=fpu32 -vcu_support=vcu0 -g -diag_warning=225 --gen_warning=255 -diag_wrap=off -display_error_sections=on -z -diag_exclus_ram_ram_info-model -link/infot_intrack-"-link_libm.prisot.dlpage-fm.pru.pru.pru.pru.pru.cmpage-ines=clus.pru.pru.pru.pru.pru.pru.dlpage-ine-ines=clus.dlpf-nat_line-f28069 -line-intracknat_line-from-line-ine-ine-ines=clus.dlpf-natnatnatn.dl.dl.dl.dl.dl.dl.intrack-ine-ine-in /ti/ccs810/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/include /ti/ccs810/ccsv8/tools/compiler/ti-cgt-c2000_18.1.2.LTS/lib

    请注意、链接行上的最后3项应该是您的链接器命令文件、在构建 BIOS 配置期间生成的链接器命令文件以及 RTS 库的"libc.a"。

    包含在构建 BIOS 配置期间生成的链接器命令文件由项目的 C2000链接器文件搜索路径选项控制:


     

    我怀疑您的项目缺少上面以蓝色突出显示的两个项目。 确保"Include library file or command file as input"(将库文件或命令文件作为输入)列表中的"libc.a"显示在最后。

    Alan

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

    你好、Alan

    感谢您的回答。

    我明白了。
    该工程链接了 boot28.asm、而不是 boot_bg.asm。

    我希望将项目附近的所有文件(库、SYSBIOS 等)保留为本地文件。 因此使用了错误的引导文件。

    此致

    Michael