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.
大家好。
我正在开发一个需要在 RAM 中使用大型数据阵列的应用。
IAR 存储器映射显示我在 一个18KB RAM 器件上使用的是"17 178字节的数据存储器(+ 151绝对值)"。
我的代码运行良好、但我需要您的意见 、我是否会因为高 RAM 使用率而在执行过程中遇到问题。
此致、
您好、Ryan。
我更深入地了解了 IAR、发现我的堆栈使用量为1336 + 1300 = 2666字节
(二
**
*堆栈使用情况*
**
(二
调用图根类别 | 最大使用量 | 总使用 |
-------------- | ---- | ------ |
中断 | 1 294 | 1 330人 |
程序进入 | 1 336 | 1 336 |
因此,我将堆栈大小更改为2700字节,这将在存储器映射中提供:18278字节的数据存储器(+ 151绝对值)= 18429字节。
不知道+151绝对值来自、18278为0x33+0x3CA7+0xA8C。
因此、存储器映射保持:
DATA16_I | 1C00 - 1C32 | 33. | 版本 | 1 |
DATA16_Z | 1C34 - 58DA | 3CA7. | 版本 | 1 |
CODE_I | 58DC | 版本 | 1 | |
DATA20_Z | 58DC | 版本 | 1 | |
DATA20_I | 58DC | 版本 | 1 | |
DATA20_N | 58DC | 版本 | 1 | |
CSTACK | 5974 - 63FF | A8C | 版本 | 1 |
据我所知、由于我的 RAM 介于1C00 - 63FF 之间、尽管我在限制范围内、但我不应该有问题、对吧?
此致、
豪尔赫
您好、Ryan。
我喜欢住在边缘...
我做了更多的测试、并使用一些其他 IAR 功能、如堆栈视图和 RAM 存储器视图、我发现堆栈上实际上只使用了1294个字节。 因此、据我了解、映射文件上的堆栈使用情况会造成最坏的情况。 我应该很幸运,不会遇到麻烦……
UART 调试消息是导致高堆栈使用率的因素之一。 因为我仍在开发、所以我需要它、但在生产固件中、它不是必需的、所以我将对它进行检索、从而为堆栈留出更多空间。
您能告诉我映射文件上的"数据存储器(+ 151绝对值)"是什么意思吗?
此致、
豪尔赫
[引用 user="Jorge Cunha18">因此,据我了解,映射文件上的堆栈使用情况是最坏的情况。 对此我应该感到幸运、而不会遇到麻烦...[/引述]
至少我使用的工具链(不包括 MSP430!) 请勿进行任何静态堆栈大小计算和检查。 即使是高价工具、如果它们这样做、静态堆栈大小估算也会很薄弱。 映射文件反映了在其他位置完成的堆栈大小设置、通常是在工程设置中的某个位置。
实际堆栈使用情况取决于应用程序的复杂性(调用深度)、ABI (参数传递方法)和异步事件(使用堆栈的中断)。 因此、您基本上必须"支撑"最坏情况下的应用、并进行合理的猜测。 这种最坏的情况可能会出现罕见的情况、即使在测试了所有可预见的情形后、也会以看似随机的方式使您的应用崩溃。 (具有优先中断和潜在大型中断堆栈帧的 MCU -具有 FPU 上下文保存功能的 MSP432 -在这里更容易...)。
[引用 user="Jorge Cunha18"]您能告诉我映射文件上的"数据存储器(+ 151绝对值)"是什么意思吗?
我没有 MSP430编译器/链接器方面的经验、但应该很容易找到。 检查哪些数据进入该部分、并交叉参考源。 可能是恒定数据?