我的项目项目程序按照规程建立后,发现freertos 系统 无法跑通 (已经调查过不是内存不足问题,应该 也不是优先级的问题),我的S32DS编译器版本如下图
任务直接建立失败,这个版本不支持freertos 吗?还是配置有什么特殊要求吗?
你好@sunshine88 ,
应用程序实际上并不是因为 sys_msleep(5000) 调用本身而卡住的。该行为表明 sys_now() 使用的时间基准没有递增。因此,sys_msleep() 中的超时条件永远不会达到。
在 OSIF 配置截图中,OsIfUseSystemTimer 已启用,操作系统类型设置为 FreeRTOS。但是,OsIfCounterConfig_0 下的引用(包括计数器和系统定时器时钟引用)似乎不完整或为空。仅添加 PIT 组件并不能保证 OSIF 时基已正确配置和初始化。
目前请不要修改 TCP/IP 协议栈源代码或实现其他延迟解决方法。我建议如下:
lwip_FreeRTOS_s32K358 示例。sys_now() 是否递增。我们仍然需要之前请求的信息才能正确分析定制项目:
lwip_FreeRTOS_s32K358 示例是否能在相同的硬件上运行;sys_now() 实现;xTaskGetTickCount() 返回的 FreeRTOS tick 计数是否增加。请先检查xTaskGetTickCount()。如果 sys_now() 保持不变而它增加,则说明 FreeRTOS 调度程序和滴答中断正在运行,问题具体出在 OSIF 时基配置或初始化中。如果 xTaskGetTickCount() 也保持不变,则问题更加根本,必须调查 FreeRTOS 滴答中断或调度程序配置。
如果可以,请提供完整的项目存档,而不仅仅是配置截图。如果没有生成的配置和初始化代码,就无法确定 sys_now() 实际使用的是哪个定时器或时钟源。
顺祝商祺!
帕维尔
你好,现在我建立了一个LWIP程序例程,但是以太网mainLoopTask任务却卡在 sys_msleep(5000); 无法延时,我单步进入此函数,发现 startTime = sys_now(); sys_now()函数无法计数,现在我的配置页如下,是什么原因造成的那?感觉很迷惑。
你好@sunshine88 ,
您截图中显示的版本应该支持 FreeRTOS。S32 设计工作室 3.5 更新 14,RTD 4.0.0FreeRTOS 4.0.0 和 TCP/IP 协议栈 1.0.4看起来是预期的软件包组合,所以这似乎不是一般的版本兼容性问题。
根据所示代码,故障直接发生在 xTaskCreate() 中。请您提供以下信息?
请注意,MCU 总 RAM 充足并不一定意味着 FreeRTOS 堆内存充足。xTaskCreate() 从 FreeRTOS 堆中动态分配任务控制块和任务堆栈。此外,1024U 堆栈深度参数通常表示堆栈元素而不是字节,因此在 Cortex-M7 上实际分配的内存大于 1024 字节。
作为基准测试,我建议导入并运行原始的 lwIP FreeRTOS 示例,不要做任何修改。一旦原始示例运行正常,请添加一个带有小堆栈、普通优先级和循环内 vTaskDelay() 调用的附加任务。这将有助于区分环境或电路板配置问题与额外任务引入的问题。
此致,
帕维尔