主题中讨论的其他器件: MSP430FR6989
我们使用 MSP430FR5989的 ADC12_B 模块来捕获热敏电阻的转换
我们的编码基于示例代码 OutOfBox MSP430FR6989。
resumkling 代码是函数代码、但不可靠、因为它会在多次之后崩溃。
次数不是确定性的。
如果您能了解我们所做的工作、并向我们指出处理这一问题的正确方法、这将是一个很大的帮助
谢谢你
Jean-Pierre Saintfeld
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.
我们使用 MSP430FR5989的 ADC12_B 模块来捕获热敏电阻的转换
我们的编码基于示例代码 OutOfBox MSP430FR6989。
resumkling 代码是函数代码、但不可靠、因为它会在多次之后崩溃。
次数不是确定性的。
如果您能了解我们所做的工作、并向我们指出处理这一问题的正确方法、这将是一个很大的帮助
谢谢你
Jean-Pierre Saintfeld
Bruce、
早上好:-)
感谢您在您的系统上尝试此操作。
我们有两个症状在不同的时间出现。
1) 1)我们应用的有效温度范围为[0-40]、对应于[2510-808]的 ADC 计数范围
超出此范围的任何值都将获得-5的任意值(请参阅 tempsensorMode.c 中 getTemperature 函数开头的检查)
在循环执行前后和执行期间、以简单平均值连续运行仅返回-5的值。
2) 2)经过一段时间后、代码将完全崩溃、PC 将是0x04的"荒谬"值。 之后、应用程序位于杂草中。
这两种情况是随机的。 根据我们在 ADC12MEM0采集之前或之后引入的延迟量、行为会发生变化。
我已检测代码在 ADC ISR (main.c)中具有一个标志。
在采集前、我清除这个标志、并等待 ISR 再次置位该标志、然后再访问 ADC12MEM0。
这一过程很有效、但速度非常慢、因为设置标志需要很长时间。
这是我到目前为止得到的结果。
您是否对如何解决这些问题有一些想法?
再次感谢您的友好帮助。
[我这里没有我的材料、所以我在内存中工作。]
1) 1)我没有您的设备、因此我的 ADC 只是"采样空气"。 但是、在读取代码之前、我看不到任何等待 ADC 完成的东西。 (OOB 代码为此使用了 LPM3。) 在稳定状态下、这可能不明显、因为 MEM0中的值会过时、但并不不合理。 但我记得、您的采样非常长(SHT=256?) 因此、您可能会在第一个(或前几个)时间看到一些奇怪的东西。
2) 2)我建议您增大堆栈大小。 我在发现我错过了一个#define (printf_UART 或某些这样的)、这似乎是为了清除症状、我遇到了一个由堆栈溢出引起的分支到0x4。 (Xprintf 是堆栈日志。) 随后对 SP 进行的抽查显示堆栈很大、但不会溢出、但在我看来、时间变化可能会使堆栈翻转。 我没有看到任何 malloc()调用,因此如果 SRAM 用完,您可能可以将堆压缩到接近0。