OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13088|回复: 18

关于ucosii的堆栈大小设置问题的不解!

[复制链接]

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-6-1 18:15:25 | 显示全部楼层 |阅读模式
INT8U OSTaskStkChk(INT8U prio,OS_STK_DATA *pdata)
(1)prio是需检验任务的优先级
(2)pdata指向一个类型为OS_STK_DATA的数据结构。成员如下:
INT32U OSFree:堆栈中未使用的字节数。
INT32U OSUsed:堆栈中已使用的字节数。
有书上说:“堆栈的大小由OSFree+OSUsed得到”


问题1:任务实际要设置的堆栈大小到底是应该以哪个值为参考?
(1)以OSFree+OSUsed为参考;
(2)以OSUsed为参考;
问题2:图片中的话是什么意思?怎么觉得很矛盾啊。


乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2015-11-24 11:09:20 | 显示全部楼层
学习ucosii,网上找了个demo,移植到stm32f030R8,SRAM   20k
我的板子是stm32f030k6,SRAM 4K
就是电量LED,把io口配置改下,直接编译,报出很多内存不足的错误,不知怎么解决了,

原子哥,指点下吧

.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching os_core.o(.bss).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching lib_mem.o(.bss).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f030.o(STACK).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching os_cpu_c.o(.bss).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching os_core.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching system_stm32f0xx.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching stm32f0xx_rcc.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching cpu_core.o(.bss).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching app.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching os_cpu_c.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching cpu_core.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6406E: No space in execution regions with .ANY selector matching lib_mem.o(.data).
.\obj\Ucosii_Demo.axf: Error: L6407E: Sections of aggregate size 0x137c bytes could not fit into .ANY selector(s).
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-2 01:03:11 | 显示全部楼层
这功能表示没用过...
不过你这种测试方法也不一定准确,假设你的任务里面有很多功能要等待其他外界条件触发,才会使用.
那么你的这个测试,就很可能不准了,你不知道哪个条件才是最大堆栈使用?那你就得一个个去测试了.
我的直接是先设置64,死机-->128?--死机?-->256...一直到不死机,然后适当减少一些,自己觉得可以接受了(占用内寸不影响系统运行),又不死机了,就可以了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-6-2 15:36:33 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哦!像这样设置啊。任务堆栈的大小 占用的是stm32的哪里的内存呢?是flash还是RAM?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-2 23:09:43 | 显示全部楼层
内存对STM32来说,仅指SRAM.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-6-3 15:48:54 | 显示全部楼层


关于mini板跑ucosii,分配任务堆栈大小占用stm32内存的问题:
假设分配给ucosii每个任务的堆栈大小均为64,那么64X32bit=2048bit,而mini板的stm32的内存为20KB=20X1024B=20X1024X8bit=163840bit
那也就是说最多只能跑 163840/2048 = 80个任务吗?
我的计算有问题吗?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-3 21:24:40 | 显示全部楼层
回复【5楼】可乐虎:
---------------------------------
20K字节.
每个任务64字节.
理论上最大是320个任务...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-6-4 14:03:46 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我算错了吗?哪里错了呢?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-4 23:24:52 | 显示全部楼层
哦,我错了,我看成字节了,其实是4字节.
所以最大是80,没错.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-6-5 08:55:36 | 显示全部楼层
回复【8楼】 正点原子 :
---------------------------------
嗯谢啦!问下刘老师 一个显示屏里有多个页面需要有数据输入,该怎么办呢?


有没有什么成熟的搞法?我只会屏幕里只有一个页码要输入数据的。


乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-5 10:11:23 | 显示全部楼层
切换就是了...这东西多写代码自己锻炼能力吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-6-5 11:12:14 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
嗯 切换显示内容页面 我都实现了,现在就是不同页面的数据按键输入问题,不好搞啊!如果是采用只要有数据输入的页面都对应有一套按键解释代码,但我觉得这样做不太好。。。有啥好方法,提示下吧,谢了啊
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2012-8-25
在线时间
1 小时
发表于 2014-5-21 12:51:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,为什么我设置的堆栈只有小于等于64的时候才能够正常,大于的话就出问题了
开开心心每一天
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-21 22:23:32 | 显示全部楼层
不会吧,你设置多大?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-21 22:28:15 | 显示全部楼层
回复【12楼】24432972:
---------------------------------
设置多大?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-7-11
在线时间
8 小时
发表于 2014-9-14 19:26:41 | 显示全部楼层
我也是的,我设置256可以运行,但是设置512之后系统就卡死了,为什么呢?按说小了系统无法运行,大了怎么也会卡死呢,求教!
回复 支持 反对

使用道具 举报

3

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-7-29
在线时间
0 小时
发表于 2015-7-30 19:07:36 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
堆栈大小要怎么看设置多少才合适? 我本来是设置256, 换成64 , 死掉了! 换128 ,可以。 换80,死掉了! 再换100,可以正常运行。 所以想请教下原子老师我们怎么去确定堆栈大小?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-7-30 20:21:07 | 显示全部楼层
回复【16楼】那一片天空:
---------------------------------
换到不死为止。
一般宜大不宜小。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2015-7-29
在线时间
0 小时
发表于 2015-7-31 09:33:51 | 显示全部楼层
回复【17楼】正点原子:
---------------------------------
精辟的回复,谢谢原子老师
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-16 09:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表