[问题] 每个task有自己的stack?

楼主: zzss2003 (brotherD)   2017-09-21 17:42:45
https://imgur.com/a/q0v5u
https://imgur.com/a/aXwIA
疑问:对我来说,在嵌入式系统里的stack就是file register,里面可以放return address
、进入functio前使用到的变量、在function里面所宣告的变量
我的直觉告诉我应该是所有的function共用一个stack,因为在嵌入式系统里面stack的总
个数是固定的,不会因为function的多寡而变化。
另外,RTOS有自己private的data structure,请问这句是什么意思?
想请教前辈,我的观念上哪里有错误吗?
作者: james732 (好人超)   2017-09-22 17:14:00
embedded system可以做到跟PC一样,但通常没必要embedded system的OS的内存管理会比Windows/Linux简化
作者: Lipraxde (Lipraxde)   2017-09-22 17:10:00
MCU跟CPU不一样啦,他要跑的是RTOS不是一般的OS
作者: chuegou (chuegou)   2017-09-22 15:53:00
算一样吧 mmu在x86和arm的实现没有大差异是那一颗阿?听叙述感觉没有mmu也没有os阿
作者: Sidney0503 (Sidney0503)   2017-09-22 12:21:00
你需要去了解C语言执行指令时 memory发生了什么事情stack和heap区在每次执行不同的事情 行为是如何你已经不是multi-thread或subroutine的问题 而是根本这个问题不管在哪个系统都一样简单说global static变量一开始就会存在memoryfunction内变量在每次进入都会push到stack所以有一段时期写程式变量一定要先宣告 放在一起做malloc则是去heap区配置memory离开任何区间ex: for while function stack就会清掉而heap上的东西一定要free才会清掉global static则是英勇长存只要fork出去就会有一个概念上的stack给你用所以fork进入了区间 会把区域变量推到这个stack
作者: PkmX (阿猫)   2017-09-21 19:09:00
你对thread有概念吗?
作者: Lipraxde (Lipraxde)   2017-09-21 19:14:00
通常会有一组暂存器存放stack pointer,要让每个task有自己的stack,就会在切换task的时候把stack pointer指到task自己的stack上。上网查查FreeRTOS,有个成大资工的网页介绍的很好
作者: chuegou (chuegou)   2017-09-21 19:19:00
看了这篇我确定你该先翻一下os
作者: er230059 (CQH)   2017-09-21 19:37:00
Task != function
作者: boss0405 (boss)   2017-09-21 23:41:00
书是对的,你是错的

Links booklink

Contact Us: admin [ a t ] ucptt.com