Arm 皮质M0硬断层;哈夫曼酒店

Arm 皮质M0硬断层;哈夫曼酒店,arm,compression,huffman-code,cortex-m,nrf51,Arm,Compression,Huffman Code,Cortex M,Nrf51,在我的应用程序中,Nordic Semiconductor的nRF51422 IC内部运行Cortex M0 当尝试使用时,我让LZ和Rice工作,但Huffman_Compress给了我一个硬件故障。 我怀疑处理器正在访问未对齐的内存地址,但如何确定 您能否快速查看一下代码,看看是否可以找到错误? 这是来自开发者网站的。 在这段代码中,我尝试在处理器使用RTT挂起之前打印东西,它完成了\u Huffman\u Hist(in,sym,insize)但甚至没有进入\u Huffman\u Mak

在我的应用程序中,Nordic Semiconductor的nRF51422 IC内部运行Cortex M0

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

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


提前感谢!=)

您可能会在此处看到堆栈溢出
Huffman\u Compress()
需要略多于1KB,而
\u Huffman\u MakeTree()
需要多于2KB的额外堆栈空间,因此此时总共需要3KB


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

Huffman\u Compress()
放在
int main()
的最开始,我可以打印更多内容:我输入
\u MakeTree
例程和
while(节点左>1)
由于某种原因一直运行到
节点\u left==4
为止。总之,不可能。如果堆和堆栈设置正确,将有效地址作为缓冲区传递,那么要查看500行库代码并知道这些函数的所有调用是否正确,是不可能的,等等。我们也不知道你的工具链和选项的特殊组合把C代码变成了什么——那里也有一整类微妙的错误。我建议从硬故障处理程序中查看堆栈上的异常上下文——知道哪条指令出现故障,以及它当时试图执行的操作,对于确定它有很大帮助。