Microchip
直播中

王桂荣

8年用户 200经验值
私信 关注
[问答]

如何在PIC32 MX150 F128B上使用FRIERTOS创建固件

你好,我想在PIC32 MX150 F128B上使用FRIERTOS创建固件。因此,为了测试FRIERTOS,我试图让LED闪烁。因此,我用MHC和FrRetos创建了一个应用程序,并在AppTebug循环中添加了LILIN。LED闪烁如预期,但当我添加另一项任务时,什么也没有发生。我现在处理它,它似乎是总的堆大小为10240字节是不够的。我把它设置为20480字节,现在LED闪烁,有两个任务正在运行。那么问题是什么呢?我的应用程序或任务的“任务大小”设置为1024。因此,我有2个自定义任务和系统任务,它们还有1024个字节的内存,它们应该使用3K内存。在FRIERTOS FAQ()中,他们说RTOS使用236字节。有人能告诉我我在忽略什么吗?10K内存如何不能满足闪烁的LED和另一个空任务?什么样的值应该设置MHC的“任务大小”?谢谢你的回答!

回帖(6)

唐红菊

2020-5-14 07:29:40
您确定堆栈大小是字节而不是单词吗?三个1024字栈将消耗12kb。
举报

张毕鹄

2020-5-14 07:42:02
我确信我配置为10240和20480的总堆大小wich的值。没有给出“任务大小”值的单位。但是如果是单词,那么为什么程序不能工作,但是将任务大小设置为1024个单词是否合理?
举报

唐红菊

2020-5-14 07:53:26
任务需要多少堆栈取决于任务运行的代码。操作系统有一些最低要求,除此之外,还需要为跨函数调用保存的本地变量和寄存器留出空间。对于一个只在一个循环中切换LED的任务来说,一百个字应该是绰绰有余的。
举报

张小林

2020-5-14 08:01:33
堆栈大小是用字来指定的,而不是字节。请参阅XTaskCeCuto()API函数的文档页。我不确定我是否可以在这里发布链接,但我会尝试。如果它没有显示,那么只显示Google xTaskCreate(),并且它应该是顶部链接:http://www.freertos.org/a00125.htmlMIPS体系结构具有相对大的上下文,并且上下文被保存到任务堆栈中,因此任务堆栈必须至少足够大以容纳上下文。上下文大小是硬件的特性,而不是RTOS。此后所需的堆栈大小取决于任务正在做什么——函数调用嵌套深度是什么、声明的任何堆栈变量、编译器优化级别等等。LLER超过190个单词(760字节)。1024字栈通常比需要的多。如果你有两个任务,每个字1024个,那么这将是8K的堆栈空间组合。然后,您还需要用于空闲任务的堆栈空间,以及可能(取决于配置)RTOS守护进程任务(以前称为计时器任务)。您可以使用uxTaskGetStackHighWaterMark()函数(尝试发布另一个链接:http://www.freertos.org/uxTaskGetStackHighWaterMark.html)。要查看任务实际使用多少堆栈,以及堆栈溢出钩子(尝试另一个链接:http://www.freertos.org/Stacks-and-stack-overflow-checking.html)来捕获堆栈溢出,然后将它们放在一起,就可以调整所需的堆栈数量。我相信,还有一些GCC命令行选项可以让您知道使用多少堆栈,因为堆栈在优化级别上变化很大。希望这能有所帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分