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.

[参考译文] TMS320F280049C:对于"_system_post_cinit ()"消息没有源可用、同时在"Release mode&quot 中对 TMS320F280049C 进行编程;以及带有 Linkar 命令文件"280049C_flash_lnk.cmd"

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1264892/tms320f280049c-no-source-available-for-_system_post_cinit-message-while-programming-the-tms320f280049c-in-release-mode-and-with-linkar-command-file-280049c_flash_lnk-cmd

器件型号:TMS320F280049C
主题中讨论的其他器件:LAUNCHXL-F280049C、、 SysConfig

在闪存模式下调试"LAUNCHXL-F280049C 板"TMS320F280049C 微控制器"时出现问题。 (首次使用任何"TI"微控制器)。 程序已成功上传到"RAM"。 在使用"280049C_RAM_lnk.cmd"链接命令文件时。 程序也在调试模式下运行。 但是、当我将其切换到"Release"模式并将链接命令文件更改为"280049C_FLASH_lnk.cmd"时、仍然可以将程序上传到微控制器。 但当我单击"Resume"按钮时,会出现消息"No source available for "_system_post_cinit ()"。 我该怎么做? 为什么会出现呢?

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

    Shashi、您好!

    要检查的两个事项:

    -您的项目中是否包含正确的 RTS 库?

    -您的 Launchpad 上的引导模式引脚是否设置为闪存引导(两个引脚都应处于 ON 位置)?

    此致、
    伊袋

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

    谢谢主席先生的答复。

    关于 RTS 库:-我认为它在"Project Properties">"CCS General"中设置为"automatic"。

     

    关于引导模式引脚:-引导开关朝向"1"位置。  

    我阅读了文档"C2000 Piccolo F28004x 系列 Launch Pad 开发套件"、发现引导开关应位于"1"侧、以便器件从闪存引导。 该表的屏幕截图如下所示:-

    还有一点需要与大家讨论、那就是在注释掉"device_delay_US (10000);"行 后、"_system_post_cinit ()"不会出现。 我的程序的屏幕截图如下:-

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

    Shashi、您好!

    尝试将 RTS 库设置为特定库(您选择的库应该与您的编译器设置匹配)。

    此致、
    伊袋

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

    我已经尝试链接 RTS 库"rts2800_fpu32.lib"、但同样的问题仍然存在。 然后、我尝试了不同的可用库、但问题仍然存在。

    我有一个非常简单的程序:-

    #include "board.h"
    空 main (void)
    {
    Board_init();
    for (;;)
    {
    GPIO_togglePin (LED);
    DEVICE_DELAY_US (10000);

    当我 使用 "280049C_RAM_lnk.cmd"链接器命令文件将其运行时、上述程序可以正常运行。 但随着它运行到 RAM 内存中、因此、一旦我移除电源和命令、程序就会消失(正如预期的那样)。 但是、当我使用"280049C_FLASH_lnk.cmd" 链接器命令文件运行它进入"释放模式"时、我们对 uC 进行了编程、但当我单击"恢复"按钮时、它显示了相同的错误消息(如前所述)。  根据该错误消息、C 运行时环境的初始化似乎存在问题。

    但是、当我从程序中注释掉"device_delay_US (10000);"时、它甚至可以从闪存中运行。 然后、我使用"CPU 计时器中断功能"来切换 LED。 该函数如下:


    #include "board.h"
    #include "interrupt.h"

    uint16_t cpuTimer0IntCount;

    __interrupt void cpuTimer0ISR (void);

    void initCPUTimers (void);
    void configCPUTimer (uint32_t、float、float);

    空 main (void)
    {
    Board_init();
    interrupt_initModule();
    interrupt_initVectorTable();
    Interrupt_register (INT_TIMER0、&cpuTimer0ISR);
    initCPUTimers();
    configCPUTimer (CPUTIMER0_BASE、DEVICE_SYSCLK_FREQ、100);
    CPUTimer_enableInterrupt (CPUTIMER0_BASE);
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
    Interrupt_enable (INT_TIMER0);
    CPUTimer_startTimer (CPUTIMER0_BASE);
    EINT;
    ERTM;
    GPIO_writePin (LED、1);

    for (;;)
    {
    if (cpuTimer0IntCount >= 1000)
    {
    GPIO_togglePin (LED);
    cpuTimer0IntCount = 0;



    initCPUTimers (空)
    {
    //
    //将计时器周期初始化为最大值
    //
    CPUTimer_setPeriod (CPUTIMER0_BASE、0xFFFFFFFF);
    //
    //初始化被1分频的预分频计数器(SYSCLKOUT)
    //
    CPUTimer_setPreScaler (CPUTIMER0_BASE、0);
    //
    //确保计时器已停止
    //
    CPUTimer_stopTimer (CPUTIMER0_BASE);
    //
    //使用周期值重新加载所有计数器寄存器
    //
    CPUTimer_reloadTimerCounter (CPUTIMER0_BASE);
    //
    //重置中断计数器
    //
    cpuTimer0IntCount = 0;


    configCPUTimer (uint32_t cpuTimer、浮点频率、浮点周期)
    {
    uint32_t 温度;

    //
    //初始化计时器周期:
    //
    temp =(uint32_t)(freq /1000000 *周期);
    CPUTimer_setPeriod (cpuTimer、temp);

    //
    //将预分频计数器设置为1分频(SYSCLKOUT):
    //
    CPUTimer_setPreScaler (cpuTimer、0);

    //
    //初始化计时器控制寄存器。 计时器停止并重新加载、
    //禁用自由运行,启用中断。
    //此外,还设置自由位和软位
    //
    CPUTimer_stopTimer (cpuTimer);
    CPUTimer_reloadTimerCounter (cpuTimer);
    CPUTimer_setEmulationMode (cpuTimer、CPUTIMER_EMULATIONMODE_STOPAFTERNEXTTECREMENT);
    CPUTimer_enableInterrupt (cpuTimer);

    //
    //重置三个 cpuTimers 的中断计数器
    //
    如果(cpuTimer => CPUTIMER0_BASE)
    {
    cpuTimer0IntCount = 0;


    __中断无效
    cpuTimer0ISR (空)
    {
    cpuTimer0IntCount++;
    //
    //确认该中断以接收来自组1的更多中断
    //
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_GROUP1);

    现在、在程序上传到 UC 后、当我按下"debug">"resume"时、LED 立即正常闪烁。 但当我关闭电源并再次将其打开时、LED 会以较慢的速率闪烁。 可能是由于闪存中定义了"等待状态"。 所以、

    1) 1)请向我提供有关如何处理错误消息的解决方案?

    2) 2)如何在主程序中将闪存内容复制到 RAM?

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

    Shashi、

    您能否确认 您是否在工程中的 SysConfig 中添加了闪存模块? 如果您这样做、这应该会正确地初始化闪存模块、预取模式和等待状态。

    如果希望从 RAM 执行特定函数、则需要使用 以下语法将其放置在.TI.ramfunc 段中:

    Fullscreen
    1
    #pragma CODE_SECTION(myFunction, ".TI.ramfunc");
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在代码自动初始化期间、本部分中的函数从闪存复制到 RAM、并将从闪存中执行。

    此致、
    伊袋

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

    您好,Ibukun Olumuyiwa,

    程序运行正常、未发现问题。 我的更新程序如下:

    #ifndef _flash
    #define _flash
    #endif
    #include "device.h"
    #include "board.h"
    空 main (void)
    {
    device_init();
    Board_init();
    for (;;)
    {
    GPIO_togglePin (LED);
    device_delay_us (500000);

    就上述计划而言,我所采取的步骤如下:

    *打开"TI 系统配置工具"并进行设置:GPIO、SYSCTL、器件支持、并将文件保存到新文件夹中。
    *关闭"TI 系统配置工具"
    *打开 CCS、然后通过 File > New > CCS Project 创建新项目。
    *写项目名称并将其放入使用"TI 系统配置工具"创建的文件夹中。
    *将连接器命令文件和运行时支持文件保留为"自动"模式。
    *按"完成",项目将设置。
    *通过右键单击 Project Name、然后选择 Properties > CCS Build > C2000 compiler > Include Options 来提供到头文件的路径。
    *在主工程中使用的工程文件夹中添加相应的支持 C 文件(与第一步创建的新文件夹相同)(例如,在该工程中添加了 gpio.c、sysctl.c 等)。 此外、还会将"codestartbranch.asm"目标文件添加到同一文件夹中。
    *运行项目。 默认情况下、工程将在 RAM 存储器中运行(因为默认情况下、 280049C_RAM_lnk.cmd 有效)
    *现在、将构建选项更改为释放模式、然后在属性> CCS 通用>链接器命令文件中将其更改为"280049C_FLASH_lnk.cmd"。 其余的都是相同的。 保存并退出。
    *再次、通过右键单击 Project Name、然后选择 Properties > CCS Build > C2000 compiler > Include Options 来给出到头文件的路径。
    *现在、将"_flash"添加到 Properties > CCS Build > C2000 Compiler > Predefined symbols name > Predefined symbols name > add


    *现在,程序将刻录到闪存中并运行。

    如果我在创建和运行该基本 LED 闪烁程序时犯了任何错误或遗漏了任何一点、请予以更正。

    感谢您的支持。

    此致、

    Shashi

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

    Shashi、您好!

    很高兴看到您能够解决这个问题。 我认为您执行的上述步骤没有任何问题。

    伊袋

x 出现错误。请重试或与管理员联系。