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     0x00000200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit
把总堆栈和任务堆栈同时调大或者够用的状态无法返回的问题即可解决。也不要太大,免得浪费内存。


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

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






  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值