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.
您好!
我已经开始为 TMS570LS0914开发 CAN 引导加载程序。 引导加载程序在单个应用程序中工作正常、但无法在 FreeRTOS 上运行。 当我使用 FreeRTOS 时、应用程序根本无法启动、因此我开始寻找解决方案。 基于 tms570ls20212自定义引导加载程序和 FreeRTOS 线程、我修改了代码、但除了其他问题之外、我的引导加载程序代码卡在启动代码中的此处:
if ((esmREG->SR1[2])!= 0U)
{
/*用户代码开始(24)*/
/*用户代码结束*/
/*SAFETYMCUSW 5 C MR:NA "for (;;)可通过在上述和下方的用户代码中添加"#if 0"和"#endif"来删除。"*/
/*SAFETYMCUSW 26 S MR:NA "for (;;)可通过在上述和下方的用户代码中添加"#if 0"和"#endif"来删除。"*/
/*SAFETYMCUSW 28 D MR:NA "for (;;)可通过在上述和下方的用户代码中添加"#if 0"和"#endif"来删除。"*/
for (;;)
{
}/*等待*/
/*用户代码开始(25)*/
/*用户代码结束*/
}
当我针对循环删除此内容时、我无法在 FreeRTOS 中使用简单的 LED 闪烁程序、但当我尝试上传产品代码时、LED 闪烁任务工作正常、但速度至少慢了10倍。
谢谢!
此致、
Keno
这些建议基于这样一个理念:如果您使用 FreeRTOS、那么您将创建任务。
结果= xTaskCreate (pFunction、
姓名、
StackDepth、
null、
PRIO | portPRIVILEGE_BIT、
&TaskHandleVector[Index]);
HL QJ、
通常我无法调试从 RAM 运行的代码、我不知道原因。 我在反汇编中看到这一点:
但在我看来、程序运行正常、只是在本例中我无法读取 RAM。 我从0x00020000检查了闪存、在我看来擦除成功了、如果我移除了校验功能、它工作正常。 闪存存储器:
我还观察到这个问题取决于应用程序代码大小。 当出现此问题时、程序大小为0x00019e9e、如果您偏离4、则提醒将为2。 因此、在最后一次检查操作中、字节= 0x4;字节值可以是一些非常大的地址。 因此、我修改了代码、如下所示:
uint32_t Flash_Erase_Check (uint32_t Start_Address、uint32_t 字节)
{
uint32_t error=0;
寄存器 uint32_t * dst1 =(uint32_t *) Start_Address;
寄存器 uint32_t bytes =字节;
while (字节> 0)
{
if (* dst1++!= 0xFFFFFFFF){
误差= 2;
}
字节-= 0x4;
if (字节< 4)
{
if (* dst1++!= 0xFFFFFFFF)
{
误差= 2;
}
字节= 0;
}
}
#ifdef DEBUG_MSG_L2
UART_putString (UART、"\r 擦除闪存错误:");
UART_send32BitData (sciREG1、错误);
UART_putString (UART、"\r ");
#endif
return (错误);
}
通过这种修改、代码每次都能正常运行、并且能够以各种大小的应用代码运行。
此致、
Keno