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.
工具/软件:Code Composer Studio
尊敬的 C2K Champs:
我将继续回答最后一个问题。
最后一个问题是以下链接。
https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/891196/3301091#3301091
闪存写入和擦除工作正常、在2~3minite 之后、电路板发生了复位功能。
我不明白为什么它发生了复位功能
禁用看门狗。
我非常乐于助人、感谢您的回答
谢谢、此致、
Edward
爱德华
闪存擦除/编程/验证序列后、您在应用中执行什么操作?
您是否尝试找到导致复位的指令? 请使用断点和步进执行来计算导致它的指令。
您是否检查了 RESC 寄存器和 NMIFLG 寄存器? 有什么提示吗?
希望您在使用任何 ramfunc (.TI.ramfunc)内容之前执行 memcpy()。 memcpy()将在应用程序从 RAM 地址执行之前将代码从闪存复制到 RAM。 否则,应用程序将在 ITRAP 中结束。
我将根据您的回复将帖子分配给系统专家。
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回复
请参阅我的代码(Project_Edward.zip)
1) 1)闪存擦除/编程/验证序列后、您在应用中执行什么操作?
->没有、我只配置了闪存写入和闪存擦除序列。 请参阅以下代码。 请参阅我的代码的 main_cpu1.c。
总结而言、
while (1){
if (SCIARxBuff_CPU1[0]= 0x0061)// a
{
Flash_write();//闪存
}
否则、如果(SCIARxBuff_CPU1[0]= 0x0062)// b
{
FLASH_READ (缓冲器322);//闪存
}
否则、如果(SCIARxBuff_CPU1[0]= 0x0063)// c
{
FLASH_ERASE ();//闪存
}
否则、如果(SCIARxBuff_CPU1[0]= 0x0064)// d
{
SCIARxBuff_CPU1[0]= 0x0065;//闪存
DSP_SCIA_Write (Buffer322、0xFF);//闪存串行写入
}
2) 2)您是否尝试找到导致复位的指令? 请使用断点和步进执行来计算导致它的指令。
->我找不到。 如何查找? 我将看门狗设置为禁用。
3) 3)您是否检查了 RESC 寄存器和 NMIFLG 寄存器? 有什么提示吗?
->否 我找不到提示。 当程序运行时、程序禁用看门狗。 清除 RESC 和 NMIFLG 寄存器是否有意义?
4)希望您在使用任何 ramfunc (.TI.ramfunc)内容之前执行 memcpy ()。 memcpy()将在应用程序从 RAM 地址执行之前将代码从闪存复制到 RAM。 否则,应用程序将在 ITRAP 中结束。
->如何在使用任何 ramfunc (.TI.ramfunc)内容之前执行 memcpy ()?
参阅我的代码、我在 flash_programming.c 中使用"#pragma CODE_SECTION (Flash_Programming、ramFuncSection);"
是这样吗?
e2e.ti.com/.../Project_5F00_edward.zip
谢谢、此致、
Edward
尊敬的 Vamsi
出现另一个问题。
如果我将其他函数与 main.c 中的闪存函数一起使用、它将成为 ITRAP。
while (1){
DO _UDP_CONFIG (4);//配置套接字4
if (CONFIG_FLASH_SET_FLAG = 1)// a
{
CONFIG_FLASH_SET_FLAG = 0;
Flash_write();//闪存
}
否则、如果(CONFIG_FLASH_SET_FLAG = 2)// c
{
CONFIG_FLASH_SET_FLAG = 0;
FLASH_ERASE ();//闪存
}
谢谢、此致、
Edward
爱德华
2) 2) 2)不是在 CCS 调试视图中单击"继续"按钮、而是单击"步入"或"步越"按钮。 使用这些按钮、您可以通过指令执行代码指令。 通过这种方法、您可以确定导致复位的指令。 此外、您可以在代码中定期使用断点、然后单击"继续"。 这样、您就可以知道控件是否达到代码中的特定断点。 如果未达到、则您知道该断点之前的代码存在一些需要调试的问题。 您可以右键单击 CCS 中的代码行并启用断点。
3) 3)您可以为 NMI 和 ITRAP 启用和定义 ISR、并包括用于调试目的的 Estop。 在 ISR 中、您可以检查这些寄存器的值以了解复位的原因。
4) 4)映射到 ramfuncs 的任何代码都应在执行该代码之前使用 memcpy()从闪存复制到 RAM。 如果不是、当控制跳转到 RAM 中的相应位置时、由于代码未复制到闪存、将提取 RAM 位置的垃圾、从而导致 ITRAP。 我建议您使用其中一个 C2000Ware 示例、启用闪存构建配置并逐步执行、以了解闪存执行流程。 请参阅此帖子以了解有关此主题的更多详细信息: https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/878674/3250523#3250523
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回复
如您所知、独立 USB 示例代码运行良好。
我合并了 USB 示例代码和我的项目代码。 我觉得初始化效果很好。
正如您所说的,我在代码中从 Device_init()执行 Flash_initModule()之前使用了 memcpy()。(如下代码所示):
////代码
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
//
//调用闪存初始化以设置闪存等待状态。 此函数必须执行的操作
//驻留在 RAM 中。
//
Flash_initModule (FLASH0CTRL_base、FLASH0ECC_BASE、DEVICE_FLASH_WAITSTATES);
//////
我阅读了您的建议 URL 帖子(e2e.ti.com/.../3250523)
所以我感觉、检查了所有内容。
但是当我设置闪存写入命令时、它发生了 ITRAP。
在第二张图片中,Fapi_initiatizeAPI()中出现错误。
因此、请确认我的源代码。 该代码包含了每个函数。
e2e.ti.com/.../0647.Project_5F00_edward.zip
我指的是"Disassembly"字段。(Excel 文件)
在提到"Disassembly"字段时、我在错误部分绘制了黄色标记。
我不理解此装配体部分。
e2e.ti.com/.../error_5F00_Disaeembly.xlsx
谢谢、此致、
Edward
尊敬的 Vamsi
我解决了。
问题是 RAM 和闪存堆栈。
在闪存中存储代码并将其保存在 RAM 中时、RAM 存储器区域崩溃所导致的问题。
因此、我会缩小存储器区域的大小。
我真的想知道、如何设置 RAM 和闪存大小、以便 CPU1和 CPU2不会发生碰撞?
我们仍然存在重置问题...
我不知道为什么发生复位。
谢谢、此致、
Edward
爱德华
很高兴您能够解决这个问题。
关于存储器问题、您是否在 CPU1和 CPU2链接器 cmd 文件中使用共享 RAM?
能否附加链接器 cmd 文件?
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回复
我在 CPU1和 CPU2链接器 cmd 文件中都使用非共享 RAM。
我附加了文件。
请参阅以下内容。
e2e.ti.com/.../linker_5F00_cmd.zip
谢谢、此致、
Edward
爱德华
为什么在 PAGE 0和 PAGE 1中都定义了 RAMLS2和 RAMLS3? 您只能在一页中定义存储器。
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回复
RAMLS2和 RAMLS3是前几代产品。 (前任曾工作)
但是、我并不完全了解 RAM。
我能学到什么吗? 文档或其他内容。
最后一个问题是由于 RAM 大小不足而发生错误。
因此、我想增大 CPU1上 RAMGS01的大小。 我该如何工作?
我对您的评论非常有帮助。
谢谢、此致、
Edward
爱德华
您可以 在 F2837xD 技术讲座中了解链接器命令文件的用法、网址为:
https://training.ti.com/c2000-f2837xd-microcontroller-workshop?context=1137791-1137781
如果要增加特定 RAM 块的大小、您始终可以将两个或多个 RAM 块组合在一起。 但是、您需要确保只在一个页面(page0或 page1)中定义任何给定的 RAM 地址。 如果您重复使用(page0和 page1)给定的存储器范围、编译器/链接器不会向您发出错误。
关于 GSxRAM: 默认情况下、所有 GSxRAM 块(0至15)都归 CPU1所有。 在链接器 cmd 文件中、您在第1页中定义了许多 GSX RAM。 查看地图文件和应用程序、确定是否确实需要第1页中的许多 GSxRAM 块。 如果您不需要、可以将其中的一些内容移至第0页、并用于代码等
谢谢、此致、
Vamsi
尊敬的 Vamsi
感谢您的回答。
首先、复位问题似乎已经解决。
如果我重复测试闪存写入和擦除、它被复位、但是如果它与我的项目代码一同工作、它不能被复位。
我不知道原因。
使用此代码进行2天的老化测试表明它未复位且工作正常。
现在、如果您正确了解内存分配、则可以使用其他应用程序。
非常感谢您的帮助。
谢谢、此致、
Edward