7.动态任务创建和删除详细过程

1. 栈的生长方向

1)向上生长

地址从低地址向高地址增长,下一个存储地址比前一个更大

2)向下生长

地址从高地址向低地址增长,下一个存储地址比前一个地址要小

注意:最后入栈的位置永远在栈顶。

注意点:

1)任务控制块所占用的内存空间是固定的;

2)任务的栈空间所需的内存空间是我们指定的,假设我们指定为128个word,即128*4个字节。存在这样一种可能,当我们需要的内存空间大于512个字节时,分两种情况进行讨论:

a. 假设栈向下增长,如果你先分配的是任务控制块(先分配的内存空间肯定处于低地址上,这是常识),

b. 假设栈向上增长,如果你先分配的任务所需要的栈空间(先分配的内存空间肯定处于低地址上,这是常识),

通过上面的分析我们可以知道,栈的生长方向决定了任务控制块的内存空间和任务所需要的内存空间的分配顺序。

1)当栈向下增长时,我们要先分配任务所需要的内存空间,然后分配任务控制块的内存空间;

2)当栈向上增长时,我们要先分配任务控制块所需要的内存空间,再分配任务所需要的内存空间。

在ARM系列的内核中,使用的是栈向下增长的方式。

其实,以上针对于单个任务,这么分配是没有问题的,如果针对多个任务,当栈空间分配不足时,还是会破坏另一个任务任务控制块所占用的内存空间。

个人理解,最保险的办法就是分配一块合适的内存空间

2. 代码分析

有了上述的理论分析,再去分析代码就会容易得很。

 

posted @ 2023-06-25 20:20  一代枭雄  阅读(26)  评论(0)    收藏  举报