C_and_CPP 板


LINE

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,请问这句是甚麽意思? 想请教前辈,我的观念上哪里有错误吗? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.26.157
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1505986968.A.A67.html ※ 编辑: zzss2003 (60.248.26.157), 09/21/2017 17:45:11
1F:→ PkmX: 你对thread有概念吗? 09/21 19:09
老实说,不清楚。Google浏览器如果是Thread,那各个分页就是Process
2F:→ Lipraxde: 通常会有一组暂存器存放stack pointer,要让每个task有 09/21 19:14
3F:→ Lipraxde: 自己的stack,就会在切换task的时候把stack pointer指到 09/21 19:14
4F:→ Lipraxde: task自己的stack上。 09/21 19:14
5F:→ Lipraxde: 上网查查FreeRTOS,有个成大资工的网页介绍的很好 09/21 19:14
3Q
6F:→ chuegou: 看了这篇我确定你该先翻一下os 09/21 19:19
7F:→ er230059: Task != function 09/21 19:37
Task = subroutine
8F:推 boss0405: 书是对的,你是错的 09/21 23:41
书哪边对,我哪边错 ※ 编辑: zzss2003 (60.248.26.157), 09/22/2017 10:12:27 ※ 编辑: zzss2003 (60.248.26.157), 09/22/2017 10:13:38
9F:推 Sidney0503: 你需要去了解C语言执行指令时 memory发生了甚麽事情 09/22 12:21
10F:→ Sidney0503: stack和heap区在每次执行不同的事情 行为是如何 09/22 12:22
11F:→ Sidney0503: 你已经不是multi-thread或subroutine的问题 而是根本 09/22 12:22
12F:→ Sidney0503: 这个问题不管在哪个系统都一样 09/22 12:23
13F:→ Sidney0503: 简单说global static变数一开始就会存在memory 09/22 12:24
14F:→ Sidney0503: function内变数在每次进入都会push到stack 09/22 12:24
15F:→ Sidney0503: 所以有一段时期写程式变数一定要先宣告 放在一起 09/22 12:25
16F:→ Sidney0503: 做malloc则是去heap区配置memory 09/22 12:25
17F:→ Sidney0503: 离开任何区间ex: for while function stack就会清掉 09/22 12:26
18F:→ Sidney0503: 而heap上的东西一定要free才会清掉 09/22 12:26
19F:→ Sidney0503: global static则是英勇长存 09/22 12:26
20F:→ Sidney0503: 只要fork出去就会有一个概念上的stack给你用 09/22 12:28
21F:→ Sidney0503: 所以fork进入了区间 会把区域变数推到这个stack 09/22 12:28
谢谢Sideny大大的讲解,事实上,我是很清楚地知道一个program的memory配置。当一个程 式被compiled跟linked後(也就是我们俗称的.exe档),stack的大小就已经是固定的了(当 然,heap是动态配置)。当我们要去执行这个.exe档时,OS就会去读取这个program所需要 的memory(text、global/static、stack)并分配给这个program。 以上都是发生在我们PC上的事情。我想问的是,在embedded system的环境下情况是不是不 一样?。 ※ 编辑: zzss2003 (60.248.26.157), 09/22/2017 15:33:02
22F:推 chuegou: 算一样吧 mmu在x86和arm的实现没有大差异 09/22 15:53
我刚刚仔细看了Mircochip的compiler如何处理stack,发现跟PC处理的方式大不相同...@@ MCU的hardware stack只能被用来存放return address,其他的data变数分别被放置在两种 不同的stack(compiled stack跟software stack)compiled stack是静态的(compile time 就会知道大小)、software stack是动态的(compiler会把剩下的memory全部给它) ※ 编辑: zzss2003 (60.248.26.157), 09/22/2017 16:06:51
23F:推 chuegou: 是那一颗阿?听叙述感觉没有mmu也没有os阿 09/22 17:07
目前在看Microchip的8-bit devices XC8 compiler
24F:→ Lipraxde: MCU跟CPU不一样啦,他要跑的是RTOS不是一般的OS 09/22 17:10
您在上面讲用stkptr的方式,我理解了,受益良多:)
25F:推 james732: embedded system可以做到跟PC一样,但通常没必要 09/22 17:14
26F:→ james732: embedded system的OS的记忆体管理会比Windows/Linux简化 09/22 17:14
※ 编辑: zzss2003 (60.248.26.157), 09/22/2017 17:24:11







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP