欢迎访问 如意编程网!

如意编程网

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

STM32 C/C++ uCOSII 函数调用return 无法返回或者函数无法正常反回上一层函数的问题

发布时间:2024/9/3 c/c++ 15 豆豆
如意编程网 收集整理的这篇文章主要介绍了 STM32 C/C++ uCOSII 函数调用return 无法返回或者函数无法正常反回上一层函数的问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我这里说明的问题,一般会出现在UCOS系统上,如果是裸机应该不怎么会出现,只要程序不是太大,不是无休止的使用内存。

我遇到的现象是,在某个任务运行中进行多层函数调用时在return时无法返回,这种情况一般都是因为堆栈过小的问题。一般涉及工程中两个地方。

一个是任务堆栈设置那里,一个是总堆栈设置那里(stm32平台一般是stm32xxxxx.s文件中),任务堆栈设置的位置每个工程可能都不一样,自行寻找修改即可,总堆栈在stm32平台中在下面代码红色所示的位置:

<span style="color:#ff0000;">Stack_Size EQU 0x00000D00</span>AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h>Heap_Size EQU 0x00000200AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit 把总堆栈和任务堆栈同时调大或者够用的状态无法返回的问题即可解决。也不要太大,免得浪费内存。


还有一个问题,如果在函数内部使用大的数组,如分配一个4K大小的数组,这样是不行的,当然还是对有操作系统的来说,裸机也有可能会出问题,当然取决于设置的栈大小,这是我的理解,没有做测试。

在操作系统中不要这么使用,如果是大的数组,那么尽量设置为全局的形式,免得程序莫名其妙的崩溃(我花了好长时间来寻找这个问题~~~~(>_<)~~~~)。
在使用UCOS这类操作系统时,对内存的使用以及指针的使用要务必格外小心仔细,要不然出现了莫名其妙的问题,很难去定位寻找,因为是多任务运行,这句话有问题,但是引起这句有问题的地方在哪却是未知。






总结

以上是如意编程网为你收集整理的STM32 C/C++ uCOSII 函数调用return 无法返回或者函数无法正常反回上一层函数的问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得如意编程网网站内容还不错,欢迎将如意编程网推荐给好友。