硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7303|回复: 9
收起左侧

[FreeRTOS] .s中stack/heap的大小如何设置

[复制链接]

38

主题

82

回帖

196

积分

初级会员

积分
196
发表于 2017-5-15 10:48:04 | 显示全部楼层 |阅读模式
启动文件中这两个如何分配?
另外freertos的堆栈和STM32本身的堆栈有神么区别吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106717
QQ
发表于 2017-5-15 10:58:59 | 显示全部楼层
可以看下我们FreeRTOS教程的这两个小节,我在里面有说明:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
QQ截图20170515105436.png
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2017-5-16 17:28:29 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以看下我们FreeRTOS教程的这两个小节,我在里面有说明:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
 (2017-05-15 10:58) 
看了, 也就是说.s的heap size可以设置为0吗? RTOS用的完全是.s文件中stack的RAM?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106717
QQ
发表于 2017-5-16 17:32:23 | 显示全部楼层

回 yip_1991 的帖子

yip_1991:看了, 也就是说.s的heap size可以设置为0吗? RTOS用的完全是.s文件中stack的RAM? (2017-05-16 17:28) 
.S中的heap不可以设置为了0,部分C库函数还要用,一定要分配一定大小。

RTOS用不到.S中的stack空间,这个是系统栈,主要是中断使用。RTOS用的是任务栈。
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2017-5-17 17:41:46 | 显示全部楼层

回 eric2013 的帖子

eric2013:.S中的heap不可以设置为了0,部分C库函数还要用,一定要分配一定大小。

RTOS用不到.S中的stack空间,这个是系统栈,主要是中断使用。RTOS用的是任务栈。 (2017-05-16 17:32) 
RTOS用不到.S中的stack / heap空间,相当于它用的是自己独立分配ram给任务们用吗?
我记得config.h里面有分配stack / heap size.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106717
QQ
发表于 2017-5-17 17:45:30 | 显示全部楼层

回 yip_1991 的帖子

yip_1991:RTOS用不到.S中的stack / heap空间,相当于它用的是自己独立分配ram给任务们用吗?
我记得config.h里面有分配stack / heap size. (2017-05-17 17:41) 
1. 不是,这个是系统栈区,是中断服务程序在用。

2.  FreeRTOSConfig.h文件里面的设置heap是FreeRTOS用的,用于任务栈,任务通信机制等使用的空间,跟启动点里面的heap没有任何关系。
回复

使用道具 举报

38

主题

82

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2017-5-17 19:16:25 | 显示全部楼层
会不会不小心.s里面的stack / heap跟RTOS自己分配的stack / heap重合呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106717
QQ
发表于 2017-5-18 11:55:56 | 显示全部楼层

回 yip_1991 的帖子

yip_1991:会不会不小心.s里面的stack / heap跟RTOS自己分配的stack / heap重合呢?
 (2017-05-17 19:16) 
这个不用担心,对于MDK这种编译来说,编译生成的RAM空间分配,根据你的实际使用大小,比如你使用了20KB。.S启动文件中的是分配在20KB的末尾位置的。

而FreeRTOS中的动态内存是另外其他的位置,互不影响,不会重合的。

FreeRTOS的动态内存就是个数组,然后配合类似malloc和free这种函数进行分配,任务和任务组件使用。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2021-4-25 14:41:48 | 显示全部楼层
eric2013 发表于 2017-5-15 10:58
可以看下我们FreeRTOS教程的这两个小节,我在里面有说明:
http://www.armbbs.cn/forum.php?mod=viewthread ...

您好,最近在学习一些有关FreeRTOS系统的内容,有一个疑惑点,如果系统没有用户定义的任务在运行的时候,会不会出错。如果我创建了两个任务,Task1,Task2,优先级是Task1>Task2,如果我在Task1的任务执行一次之后,将Task2任务优先级提高,最后在Task2中将Task1和Task2都删除,这样的话,系统中没有任务在运行,这样是不是会自动调用系统的idle任务呢?但是测试的时候,好像两个任务并没有成功被删除,所以有点疑惑,会不会是系统并不允许将任务全部删除?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106717
QQ
发表于 2021-4-26 12:24:08 | 显示全部楼层
silvia_first 发表于 2021-4-25 14:41
您好,最近在学习一些有关FreeRTOS系统的内容,有一个疑惑点,如果系统没有用户定义的任务在运行的时候, ...

没问题,可以都删除。默认情况下,实际的删除操作都是在Idle空闲任务里面执行的,早期的代码是这样的,新版不知道换了没。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 15:32 , Processed in 0.190254 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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