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.
在闪存模式下调试"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 段中:
#pragma CODE_SECTION(myFunction, ".TI.ramfunc");
在代码自动初始化期间、本部分中的函数从闪存复制到 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、您好!
很高兴看到您能够解决这个问题。 我认为您执行的上述步骤没有任何问题。
伊袋