主题中讨论的其他器件: HALCOGEN
工具/软件:Code Composer Studio
您好!
MI 名为 Julian、我已经与 TMS570LC4357合作了很长时间。 简而言之、我有一个设置、在该设置中、我将使用一个具有 FreeRTOS 的 TMS570LC4357和一个自定义代码来处理串行端口作为输入提供的任何内容、然后通过 EMAC 将其输出发送到另一个电路板。 我将通过带有终端的串行端口向第一个板馈送数据。
总之、我在没有任何处理输入的自定义代码的情况下尝试了此设置。 我已连接两个板(杂费、两个相同型号)、它们与通过 EMAC 发送的定期生成的帧通信良好。 现在、当我介绍处理代码后、我可以执行几次(完全随机)执行、而不会出现任何问题。 但是、在执行一定数量的执行后、由于堆栈溢出发生、电路板停止运行。 我使用 FreeRTOS 中的堆栈溢出挂钩任务来管理溢出。
现在、直到这里、它看起来相当正常。 我在一个正常工作的系统中引入了一个新函数、现在它出现了溢出问题、那么该函数出错了。 但代码在 RAM 中应有足够的空间、以避免导致堆栈溢出。 即使这样、我也已将用户堆栈长度增加到0x1A000 (106496)、这已经是我的 RAM 的五分之一(这已经非常重要!)。 即使这样、也会发生相同的错误。
这将使我进入我的问题:如何确定溢出的原因? 似乎很明显、故障是我的处理功能、但是... 我如何跟踪它? 简单地说、堆栈溢出发生、我被发送到数据输入中断(基本上是一个错误!) 然后我将通过 LR 进行查找。 LR 会将我发送到"portSAVE_CONTEXT "(将当前任务的上下文保存在操作系统中)、这对我来说并不意味着太多(为什么保存任务时会出现溢出 ocurr?)。
最后:有几种不同类型的堆栈、如 Halcogen (总堆栈、用户堆栈、监控器堆栈、FIQ 堆栈、IRQ 堆栈、 中止堆栈、未定义的堆栈)。 我是否增加了错误堆栈的大小?
我非常抱歉,这个制度含糊不清,因为它有很多不同的内容。 但我认为、将其缩小到有效的操作系统+自定义代码、可以解决这个问题。 但是、我不确定堆栈的类型以及导致溢出的原因(当然、在我的职能范围内)、这显然已经将我带到了这里。
此致、感谢您阅读、
Julian
编辑:措辞。