完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
学完,发现自己最基本的概念都不清楚啊。
任务控制块和任务堆栈在ram上是两个独立的区域对吗?所有的系统API函数的操作都是针对TCB的,或者通过TCB对堆栈进行控制? 系统中那部分内容,是把任务建的局部变量放入其对应的堆栈中的?在前后台系统中,所有的局部变量可以随意放在ram上,但是在ucosIII中这些变量只能放在自己的堆栈上。供自己使用。 概念不清晰啊,说的有点乱。那位大牛帮忙整理一下这两个的关系。网上查了没看懂,郁闷。。。。 |
|
相关推荐
15个回答
|
|
|
|
任务控制块,指向任务堆栈的基地址。但是有一个疑问,在发生任务切换和中断时,CPU寄存器的值会保存到任务堆栈中(这部分有明确的代码)。但是任务在切换前创建的一下变量是怎么保存到任务堆栈的。理论上说这个变量可能出现在任何一块没有用过的RAM上啊。
|
|
|
|
这个一定要搞清楚 否则 系统就没学懂
|
|
|
|
顶起来这个帖子
|
|
|
|
可以这样理解吧。。。裸跑相当于任务控制块控制一个任务的运行,这一个任务可以使用整片RAM。操作系统中,任务控制块控制多个任务,每个任务被创建的时候会指定一片区域的RAM供这个任务单独使用,每个任务中的局部变量在自己的一片区域RAM内被分配。
|
|
|
|
这个跟我理解的一样,只是,这个局部变量被分配到制定的堆栈空间的系统代码,没看到啊!
|
|
|
|
对stm32,堆栈栈顶地址放在任务控制块的第一个成员里,此地址之前被芯片自己占有(比如psp,各种R?寄存器等),栈顶下面就是任务可用于存放应用数据的内存。我目前是这么理解。
|
|
|
|
我猜任务里用到的局部变量是按照定义的顺序按先后存放的。这个可以想办法验证下… 是吧?
|
|
|
|
引用人家的---局部变量进栈是编译器完成的. 局部变量不使用程序员的名字.无论你用A,B,C,还是XX,YY,ZZ. 编译器都不使用这些名字.他们使用的是Rx.
|
|
|
|
怎么可能是编译器呢?编译器的结果是储存在flash上的。现在是把flash上的程序加载到RAM上来运行。这个加载的过程怎么保证,各个任务的局部变量进入自己的RAM。
|
|
|
|
任务内部的代码是如何存与取 可能涉及内核,哪位大神抛砖引玉下?
|
|
|
|
任务堆栈是用来在任务切换时保存和恢复任务现场(即r0,r1,...sp,pc等寄存器的值)的。
|
|
|
|
那为什么设置这么大呢?CPU寄存器才几个啊?主要是这两个的关系是什么?
|
|
|
|
一些临时变量也要保存在任务堆栈里吧,应该有更深层的原因,我也不是很清楚,请楼主去探究。
至于任务控制块和任务堆栈的关系,任务控制块是为了方便管理任务而设的结构体,任务堆栈用来在任务切换时保存和恢复任务现场。在这里,任务控制块的第一项就是任务堆栈的地址指针,方便汇编代码的操作,请看这里: ------------------------------ PendSV_Handler CPSID I ; Prevent interruption during context switch MRS R0, PSP ; PSP is process stack pointer CBZ R0, PendSVHandler_nosave ; Skip register save the first time SUBS R0, R0, #0x20 ; Save remaining regs r4-11 on process stack STM R0, {R4-R11} LDR R1, =OSTCBCurPtr ; OSTCBCurPtr->OSTCBStkPtr = SP; LDR R1, [R1] STR R0, [R1] ; R0 is SP of process being switched out ------------------------------- OSTCBCurPtr就是任务堆栈的地址 我也只会这么多了... |
|
|
|
虽然没有看懂这个汇编,但是你说的应该是对的。再看看有没有其他的观点。
|
|
|
|
只有小组成员才能发言,加入小组>>
785 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2859 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1068浏览 3评论
190浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 22:30 , Processed in 1.337845 second(s), Total 107, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号