当我通过调试器运行我的代码时,经过一系列步骤后,它最终会丢失并无序执行命令。我不确定堆栈是否溢出或什么。
这是我通常得到的错误:
MSP430:在长度为 0x1d2 的第 0 页上的 0xffe2e 处读取内存块时出现问题:参数无效
关于它可能是什么的任何建议?我简要阅读了有关不处理某些中断的可能问题。
另外,我正在尝试用特定值填充我的 RAM,以便我可以判断堆栈是否溢出,关于如何填充整个 RAM 的任何建议,比如值 0x1234?
谢谢!
当我通过调试器运行我的代码时,经过一系列步骤后,它最终会丢失并无序执行命令。我不确定堆栈是否溢出或什么。
这是我通常得到的错误:
MSP430:在长度为 0x1d2 的第 0 页上的 0xffe2e 处读取内存块时出现问题:参数无效
关于它可能是什么的任何建议?我简要阅读了有关不处理某些中断的可能问题。
另外,我正在尝试用特定值填充我的 RAM,以便我可以判断堆栈是否溢出,关于如何填充整个 RAM 的任何建议,比如值 0x1234?
谢谢!
我在使用代码编写器工作室和 TI 的 USBFET 编程器时也看到了这个错误,尽管我无法确定一个明确的原因。
假设您使用的是 CCS,这里有一些提示:
1) 捕获 ACCV (UNMI) 和 VMA (SYSNMI) 中断并在处理程序中设置断点。如果出现这些行程之一,请检查堆栈以获取有关触发中断的线索。
2) 如果您有任何重新启用中断(GIE 位)的中断处理程序,请确保它们没有被重复触发。
3)我在单步执行优化代码时(莫名其妙地)看到了这个错误;所以它可能有助于关闭优化。
如果您使用的是 code composer studio,作为初始化 RAM 的替代方法,您可以在堆栈溢出时设置断点。此外,通过暂停调试会话,CCS 让您可以选择使用您通过“内存”子窗口选择的任何值填充部分内存。
您使用的是什么调试器和编译器?我发现 msp430-gcc 和 msp430-gdb/gdbproxy 可能会与打开的 GCC 优化混淆。但是,有时会在没有打开它们的情况下发出损坏的代码(它确实是一种优质产品)。
填充内存最简单的方法是修改你的crt0.s启动文件并自己链接它。当内存设置为 0 时,您可以在那里更改模式。
您使用的是哪种设备?在 16 位设备上,0xffe2e 在处理器的地址空间之外,可能是一个数组索引或类似的已变为负数的索引。