yip_1991 发表于 2017-5-15 10:48:04

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

启动文件中这两个如何分配?
另外freertos的堆栈和STM32本身的堆栈有神么区别吗?

eric2013 发表于 2017-5-15 10:58:59

可以看下我们FreeRTOS教程的这两个小节,我在里面有说明:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658

yip_1991 发表于 2017-5-16 17:28:29

回 eric2013 的帖子

eric2013:可以看下我们FreeRTOS教程的这两个小节,我在里面有说明:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658
 (2017-05-15 10:58) images/back.gif

看了, 也就是说.s的heap size可以设置为0吗? RTOS用的完全是.s文件中stack的RAM?

eric2013 发表于 2017-5-16 17:32:23

回 yip_1991 的帖子

yip_1991:看了, 也就是说.s的heap size可以设置为0吗? RTOS用的完全是.s文件中stack的RAM? (2017-05-16 17:28) images/back.gif

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

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

yip_1991 发表于 2017-5-17 17:41:46

回 eric2013 的帖子

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

RTOS用不到.S中的stack空间,这个是系统栈,主要是中断使用。RTOS用的是任务栈。 (2017-05-16 17:32) images/back.gif

RTOS用不到.S中的stack / heap空间,相当于它用的是自己独立分配ram给任务们用吗?
我记得config.h里面有分配stack / heap size.

eric2013 发表于 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) images/back.gif

1. 不是,这个是系统栈区,是中断服务程序在用。

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

yip_1991 发表于 2017-5-17 19:16:25

会不会不小心.s里面的stack / heap跟RTOS自己分配的stack / heap重合呢?

eric2013 发表于 2017-5-18 11:55:56

回 yip_1991 的帖子

yip_1991:会不会不小心.s里面的stack / heap跟RTOS自己分配的stack / heap重合呢?
 (2017-05-17 19:16) images/back.gif

这个不用担心,对于MDK这种编译来说,编译生成的RAM空间分配,根据你的实际使用大小,比如你使用了20KB。.S启动文件中的是分配在20KB的末尾位置的。

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

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

silvia_first 发表于 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任务呢?但是测试的时候,好像两个任务并没有成功被删除,所以有点疑惑,会不会是系统并不允许将任务全部删除?

eric2013 发表于 2021-4-26 12:24:08

silvia_first 发表于 2021-4-25 14:41
您好,最近在学习一些有关FreeRTOS系统的内容,有一个疑惑点,如果系统没有用户定义的任务在运行的时候, ...

没问题,可以都删除。默认情况下,实际的删除操作都是在Idle空闲任务里面执行的,早期的代码是这样的,新版不知道换了没。
页: [1]
查看完整版本: .s中stack/heap的大小如何设置