工具/软件:
您好、
客户正在开发 MSP430i2041。
如果在闪存中分配原始段并在使用#pragma DATA_SECTION ()的段中分配声明变量、则它们不能调试程序。
但是、它们可以调试仅在链接器命令文件中分配闪存部分的程序。 (在 C 文件中、注释掉#pragma DATA_SECTION ())
你有什么想法来解决这个问题吗?
谢谢、
GR
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.
工具/软件:
您好、
客户正在开发 MSP430i2041。
如果在闪存中分配原始段并在使用#pragma DATA_SECTION ()的段中分配声明变量、则它们不能调试程序。
但是、它们可以调试仅在链接器命令文件中分配闪存部分的程序。 (在 C 文件中、注释掉#pragma DATA_SECTION ())
你有什么想法来解决这个问题吗?
谢谢、
GR
您好 Bruce、
>请求的 data_section 位于何处(根据链接器.cmd 文件)?
部分位于 Flash 中。 它由 liker 命令文件分配。
>当他们尝试调试时会发生什么?
如果运行调试、它不会在断点处停止。 它不会停止 main()上的第一个断点。 因此不会启动主程序。
如果在完全相同的程序中测试 MSP430FR4xxx (FRAM 系列)、则不会有问题。 所以我相信这个 probrem 取决于 Flash。
此致、
GR
您好 Eason、
最小代码如下。
您可以从任何示例代码中进行编辑。
1.链接器命令文件
MEMORY{ -FLASH : origin = 0x8000, length = 0x7FDC +FLASH : origin = 0x8000, length = 0x6BDC +FLASH_DATA : origin = 0xEBDC, length = 0x1400 } SECTIONS{ +.data_flash : {} > FLASH_DATA }
2.主 C 代码
+#pragma DATA_SECTION(data_short, ".data_flash") +volatile short data_short[50][50] = {0}; void main(void){ +short sData = 1; +sData = data_short[1][2];
此致、
GR
是否可以尝试使用"const short DATA_SHORT[50][50]={0};" 来替换"volatile short DATA_SHORT[50][50]={0};"
此外、您可以尝试这个 cmd 文件吗?
内存"
+FLASH:origin = 0x8000、length = 0x6000
+FLASH_DATA:origin = 0xE000、length = 0x1400
}
Sections{
+.data_flash :{}> flash_data
}
尊敬的 Eason:
[引述 userid="372580" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1519849/msp430i2041-if-allocate-original-section-in-flash-and-declaration-variable-in-the-section-we-can-not-debug-the-program/5844882 #584882"]此外、您可以尝试这个 cmd 文件吗?
内存"
+FLASH:origin = 0x8000、length = 0x6000
+FLASH_DATA:origin = 0xE000、length = 0x1400
}
Sections{
+.data_flash :{}> flash_data
}
[/报价]他们尝试过、但问题没有得到解决。
我们发现、如果程序由 CCS 调试会话加载、它就会遇到 copy_decompress_lzss.c 上的最后一个 for ()循环
您是否知道为什么 MCU 被打碎?
此致、
GR
我创建了一个简单的示例、没有看到问题:
请查看示例: e2e.ti.com/.../i20.zip