C_and_CPP 板


LINE

抱歉,小弟的标题下的不好(真的不晓得该怎麽下)。最近小弟在拜读David E.Simon的An Embedded Software Primer一书,目前读到第四章"中断"。 本章前面举几个例题,说明当中断发生在CPU正在把hardware register的value搬近data memory的途中,会导致程式有bug。其中有一个方法是当在处理资料的之前,先关掉中断, 等处理完资料後,在开启中断。 然後作者说这种方式的优点可以解决shared-data problem,但缺点是会增加interrupt latency。接着作者在继续介绍如何不用disable -> 处理资料 -> enable的方式达到解决 shared-data problem的问题。 图1:https://imgur.com/a/PMYE1 这个例题利用了一个变数fTaskCodeUsingTempsB解决这个问题。 当中断发生时,会先去判断fTaskCodeUsingTempsB的值,如果TURE,则改变A矩阵的值(此 时主函式main在处理的是B矩阵的值);如果FALSE,则改变B矩阵的值(此时主函式处理A矩 阵)。藉此可以解决shared-data problem(因为没有一种情况是当主程式在处理A矩阵的值 ,中断的副程式又改变A矩阵的值)。但这个程式有个小小的缺点是:如果中断发生在While 回圈的起点(此时fTaskCodeUsingTempsB为1)且硬体丢进A[0]跟A[1]的值不一样,在中断完 成并跳回主程式的时候,alarm并不会发作(因为此时在判断矩阵B),必须要等到主程式跑 到fTaskCodeUsingTempB = !fTaskCodeUsingTempB;才能在下一个while判断到矩阵A。 作者则提供了修正这个bug後的例题。 图2:https://imgur.com/a/GjJzz 图3:https://imgur.com/a/oFsqm 我的问题在於,我看不懂第二个例题在做什麽。 中断副函式把一组温度写进iTemperatureQueue的矩阵。Because the iHead pointer and the iTail pointer ensure that the interrupt routine will be writing to different locations in the queue(array) than the ones(locations) from which the task code(the code in the main) is reading, the shared-data problem is eliminated. 这是作者的意思(英文有解读错误请指正) 我晓得在中断副函式中,一组温度的值会先放在iTemperatureQueue[0]跟[1],接着放进 [2]跟[3](iHead = iHead + 2),且当iHead超过上限100时,下一组温度会覆盖[0]跟[1]的 值,以此类推。 在主函式中,一开始iTail跟iHead都为0,表示第一轮回圈并不会进入if,接着中断发生, if条件成立,array[0]跟array[1]被放进去值,iHead变2,跳出中断。 第二轮回圈,if条件成立(0 != 2),a[0]跟a[1]的值放进iTemperature1跟iTemperature2 以此类推...但我不懂为什麽这种方式就可以解决例题1的问题。 第二个是,我看不懂在中断副函式里面的if成立的条件,我觉得很复杂。 我想把!拿掉,拿掉後应该是会变成这样子: if( (iHead+2 != iTail) && (iHead != QUEUE_SIZE-2 || iTail != 0) ) 但我还没想出来为什麽这行判断式是阵列还没满的条件。 谢谢大家耐心看完这冗长的文章。小弟感激不尽~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.26.157
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1504607057.A.42C.html ※ 编辑: zzss2003 (60.248.26.157), 09/05/2017 18:25:51
1F:→ Lipraxde: 可以先问一下你有没有学过queue? 09/05 18:45
2F:→ zzss2003: 有 09/05 21:04
今早起床头脑比较清醒,还是看不懂程式码。 这个程式有一个前提,就是要先发生中断(iHead指到的阵列有值),资料被喂到主程式的阵 列(由iTail控管)才有意义。 可以想像成有一个一百公尺长的操场,每一公尺为间隔,总共有一百格。有一个主人跟一 只宠物,规则是主人会在每一个间隔上放入食物,宠物只要吃到食物就算得分。 有可能主人放食物的速度(中断的速度)比宠物跑得快(主函式进入if的速度);也有可能宠 物跑的速度比主人放食物的速度还快(只要iTail != iHead便进入if),这时候宠物就必须 绕完一圈後才能吃到牠在上一圈还没吃到的食物。 当宠物跟主人不在同一格上(iTail != iHead),则条件成立。这时可能是主人放的速度比 宠物跑得还快(则iTemperature1与2有意义);也有可能是宠物跑得比主人放的还快(反之无 意义)。 但宠物有可能跑得比主人放的速度还快吗?换句话说,有可能iTail会大於iHead吗? 当中断发生且符合if条件时,主人才有资格在前面两格放食物(iHead += 2)。 1. 主人往前走两格,宠物会刚好在两格後(代表宠物跑得比主人快) 这个时候表示if条件不成立,代表queue is full。 2. 主人食物已经放到98公尺了且宠物在起点上(代表已经跑到终点了,queue is full) 所以,条件是"宠物不能在主人的後两格"且"食物还没放满整个跑道 || 宠物不在起点上" ,才能进入回圈。进入回圈後,主人才会在下两格放入食物,宠物吃到才会有意义。 所以结果是,宠物是可以跑得比主人快的,只是这时候宠物就没食物吃了(阵列拿到的值无 意义) 问题1:看不懂else中的//throw away next value,这个会是需要考虑的点吗? 问题2:如果把中断中的if条件里的惊叹号移除,if条件里会变成什麽样子? 问题3:中断中的if,我还是看不懂它的满足条件,我觉得我理解的有瑕疵 问题4:我还是不懂这个程式码为什麽可以解决上一个例题中的问题啊! ※ 编辑: zzss2003 (60.248.26.157), 09/06/2017 11:04:03 ※ 编辑: zzss2003 (60.248.26.157), 09/06/2017 11:04:55
3F:→ Lipraxde: 1中断里会进到else,代表中断的太频繁,queue放不下了, 09/06 12:19
4F:→ Lipraxde: 只好把这次拿到值舍去 09/06 12:19
5F:→ Lipraxde: 2你自己不是有写?就笛摩根出来的东西 09/06 12:21
6F:→ Lipraxde: 3circle queued看一看 09/06 12:22
7F:→ enonrick: 123(代表你不懂queue)4(该书该章已经解释很清楚,你还 09/06 12:51
8F:→ enonrick: 不懂就是不理解书在表达什麽,重看吧) 09/06 12:52
9F:→ zzss2003: 看了Circle queue後会了QQ 09/06 15:19







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灯, 水草

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

TOP