主题中讨论的其他器件:TM4C1294KCPDT、
您好!
我正在处理一个项目、它卡在 boot.asm 中
我无法跟踪这种情况的发生原因和原因。 是否有办法获得该信息或任何人对此有任何想法?
它是非 RTOS 项目。
这是它卡住的地方
NVIC_FAULT_STATUS 值为 0x00000000
有人可以帮助我解决这个问题吗?
谢谢。
-Deepak
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.
您好!
我正在处理一个项目、它卡在 boot.asm 中
我无法跟踪这种情况的发生原因和原因。 是否有办法获得该信息或任何人对此有任何想法?
它是非 RTOS 项目。
这是它卡住的地方
NVIC_FAULT_STATUS 值为 0x00000000
有人可以帮助我解决这个问题吗?
谢谢。
-Deepak
Deepak、您好!
不确定问题是什么。 我有几个问题和一些建议。
您在闪存中有什么程序? 您是否还记得在加载新程序后是否出现问题?
2.程序是否运行到 main()?
3.如果您有另一个板,您可以在它上尝试相同的程序吗? 您可以在不同的电路板上重复同样的问题吗?
4.如果加载另一个程序,是否可以重复相同的问题? 请尝试一个简单的程序、如"Hello"或"Blinky"示例。
您好、Charles、
我从进入该状态的位置中找出了这个状态。我正在使用一个名为 FlashPBSave 的函数。
我没有对此函数进行任何更改。 这对于 TM4C1294KCPDT 工作正常。
这是否与,y 控制器更改为 TM4C1294NCPDT 有关?
这是功能
无效
FlashPBSave (uint8_t * pui8Buffer)
{
uint8_t * pui8新;
uint32_t ui32Idx、ui32Sum;
//
//检查参数。
//
assert (pui8Buffer!=(void *) 0);
//
//查看闪存中是否有有效的参数块。
//
if (g_pui8FlashPBCurrent)
{
//
//将序列号设置为比最近的序列号大1
//参数块。
//
pui8Buffer[0]= g_pui8FlashPBCurrent[0]+ 1;
//
//尝试立即写入新的参数块
//最近参数块。
//
pui8New = g_pui8FlashPBCurrent + g_ui32FlashPBSize;
if (pui8New = g_pui8FlashPBEnd)
{
pui8New = g_pui8FlashPBStart;
}
}
其他
{
//
//闪存中没有有效的参数块,所以设置序列
//将此参数块的数量设为零。
//
pui8Buffer[0]= 0;
//
//尝试在闪存的开头写入新参数块
//参数块的空间。
//
pui8New = g_pui8FlashPBStart;
}
//
//计算要写入的参数块的校验和。
//
对于(ui32Idx = 0、ui32Sum = 0;ui32Idx < g_ui32FlashPBSize;ui32Idx++)
{
ui32Sum = pui8Buffer[ui32Idx];
}
//
//将校验和存储到参数块中。
//
pui8Buffer[1]+= ui32Sum;
//
//查找存储此参数块的位置。 这个无限循环
//将在找到有效位置时显式细分。
//
while (1)
{
//
//查看此位置是否在擦除块的开头。
//
if ((((uint32_t) pui8New &(flash_sector_size - 1))= 0)
{
//
//擦除闪存的这个块。 这不会假设
//如果闪存的这个块已经损坏,擦除成功
//使用太多。 考虑到它的频率极低
//写入参数块,这可能永远不会失败。
//但是,这一假设并不是为了安全。
//
map_FlashErase (((uint32_t) pui8New);
}
//
//循环浏览闪存的这一部分,查看是否全部为1 (在其他中
//字、它是闪存的已擦除部分)。
//
对于(ui32Idx = 0;ui32Idx < g_ui32FlashPBSize;ui32Idx++)
{
if (pui8New[ui32Idx]!= 0xff)
{
中断;
}
}
//
//如果闪存这一部分中的所有字节都为1、则会中断
//循环,因为这是存储参数的好位置
//块。
//
if (ui32Idx = g_ui32FlashPBSize)
{
中断;
}
//
//递增到下一个参数块位置。
//
pui8New += g_ui32FlashPBSize;
if (pui8New = g_pui8FlashPBEnd)
{
pui8New = g_pui8FlashPBStart;
}
//
//如果每个可能的位置都已被选中,并且没有一个位置是有效的,那么
//无法写入此参数块。 简单地说
//返回而不写入。
//
if ((g_pui8FlashPBCurrent &&)(pui8New == g_pui8FlashPBCurrent))||
(!g_pui8FlashPBCurrent &&(pui8New == g_pui8FlashPBStart)))
{
返回;
}
}
//
//将此参数块写入闪存。
//
MAP_FlashProgram (((uint32_t *) pui8Buffer、(uint32_t) pui8New、
G_ui32FlashPBSize);
//
//将参数块数据与现在应该在中的数据进行比较
//闪存。 如果有任何数据不比较、则返回、留下先前的数据
//闪存中的参数块为最新的(自当前参数起)
//块无法正确编程)。
//
对于(ui32Idx = 0;ui32Idx < g_ui32FlashPBSize;ui32Idx++)
{
if (pui8New[ui32Idx]!= pui8Buffer[ui32Idx])
{
返回;
}
}
//
//新的参数块成为最新的参数块。
//
G_pui8FlashPBCurrent = pui8New;
}
此致、
Deepak
您好、Charles、
我回复了、但我认为没有正确发布。 以下是答案、
1.我有的程序用于定制板。 当我在代码中进行更改并刷写代码时、问题就会开始。
2.我的程序在上午8点和晚上8点完全正常运行了将近12小时,我正在使用 FlashPBSave,这就是我看到这个问题的时候。
目前、我只有一个板。 我将在星期一之前获得更多的板。 我之前无法在另一个电路板上进行测试。
4.我尝试恢复到正常工作的旧代码。 我也会在该代码中看到相同的问题。 这是否与坏内存有关?
有时我也会收到此错误(在图像中)
这是否相关?
此致、
Deepak