【问题标题】:Cortex M0 hardfault; BLC HuffmanCortex M0 硬故障; BLC霍夫曼
【发布时间】:2015-06-21 16:07:52
【问题描述】:

在我的应用程序中,我在 Nordic Semiconductor 的 nRF51422 IC 内运行了一个 Cortex M0。

在尝试使用 Basic Compression Library 时,我让 LZ 和 Rice 正常工作,但 Huffman_Compress 给了我一个硬件故障。 我怀疑处理器正在访问一个未对齐的内存地址,但是如何确定呢?

您能否快速查看一下代码,看看是否能找到错误? 这是来自开发者网站的code。 在这段代码中,我尝试在处理器挂起之前使用 RTT 打印东西,它完成了_Huffman_Hist( in, sym, insize );,但甚至没有进入_Huffman_MakeTree( sym, &stream ); 函数。

提前致谢! =)

【问题讨论】:

  • Huffman_Compress() 放在int main() 的开头我可以打印更多内容:我进入_MakeTree 例程,while( nodes_left > 1 ) 出于某种原因一直运行到nodes_left == 4。跨度>
  • 一句话,没有。根本不可能查看 500 行库代码并知道这些函数的所有 your 调用是否正确、堆和堆栈设置正确、将有效地址作为缓冲区传递等。我们还不知道您的工具链和选项的特定组合将 C 代码变成了什么 - 那里也有一整类微妙的错误。我建议从硬故障处理程序中查看堆栈上的异常上下文 - 知道哪条指令出错,以及当时它试图做什么,对于确定它有很长的路要走。

标签: arm compression huffman-code cortex-m nrf51


【解决方案1】:

您可能会在此处看到堆栈溢出Huffman_Compress() 需要多于 1 KB,_Huffman_MakeTree() 需要多于 2 KB 额外堆栈空间,因此此时您总共需要大约 3 KB。

默认链接器脚本只为堆栈分配 2 KB,其中大部分空间用于软设备无线电操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2013-09-09
    相关资源
    最近更新 更多