救火车的火灾预警----小心keil的堆栈隐患。

[复制链接]
25636|141
sheriff 发表于 2010-7-19 11:57 | 显示全部楼层
---“你的名字带有恶意和自以为是”
不理解,还请示下?sheriff这个单词哪里触痛了冷沫的敏感脆弱的神经?
你的签名?我刚看到的时候还挺敬佩的,当时以为这是你说给自己,用以自省用的~~:lol
冷漠 发表于 2010-7-19 14:16 | 显示全部楼层

恶意和善意的差别。我以所长顶我为耻辱,沾一身腥。

本帖最后由 冷漠 于 2010-7-19 15:47 编辑

没事,警长问问所长,85楼顶你的好题目得意在什么地方。现在冷漠贴图计算了一遍,所长和警长怎么一点反应都没有? 那84楼这道题目到底什么意思?冷漠化费这么大劲帮警长找问题,一点歉意都没有?反而先揪冷漠的错;冷漠再错,别人是在帮你,……那冷漠只能理解警长这道题目是别有用心,其要达到的目的路人皆知。失算了,呵……

看看冷漠怎样做才算是没有恶意,如若有谁能够如此善意地教冷漠如下一点点,——例如下面几句话,冷漠学了2年才找到——别说恶意,贬损冷漠,即使把冷漠贬得一钱不值冷漠也愿意敬拜他为先师。先知道感恩才好。
   
   
当中断发生时,核心的最底层将构造一条消息,并将消息发送到与中断设备相关的系统任务。低层软件随后构造一条发给后台任务的消息并将其标志为就绪。当后台任务被再次调度运行时,它将获取该消息并进行处理。中断处理例程当然也可以直接进行一些简单的硬实时任务操作,例如时钟中断处理程序以更新时间。
                 ——  摘自坦尼鲍姆《操作系统:设计与实现》

         
冷漠现在教给84楼警长如何把前台复杂多层嵌套函数化为后台用户级任务,把警长自创的ISR莫须有多级嵌套函数化为真实情景的解决方法,——C 程序教你这样写,不是那样“如何解释?”

我知道所长下面又要跳出来装聪明了:“冷漠的理解完全错误,坦尼鲍姆这段话有严重的语病……冷漠完全是在误导,……错在哪俺以后再讲。……”

呵呵,哪都少不了他。全世界的人都是错的,只有所长唯一正确。——  一种心理病态。
sheriff 发表于 2010-7-19 18:41 | 显示全部楼层

84楼程序的堆栈深度是15的证明

本帖最后由 sheriff 于 2010-7-19 18:57 编辑



之所以和冷漠98楼贴的图结果不同,是因为我的存储模式选的是large,需要保存DPH和DPL.
进入中断共push了9次,再加上调用sum2, 消耗6字节堆栈,共15 > 13.
清楚滴证明了冷漠的“前台中断ISR所使用的堆栈深度不大于13字节”是个错误的结论。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
sheriff 发表于 2010-7-19 18:47 | 显示全部楼层
另外,你摆出OS那套消息邮箱的东西,不能证明“前台中断ISR所使用的堆栈深度不大于13字节”不是错的。
在中断里可以避免深层调用,但没人规定在中断里不能够进行深层调用。:victory:
highgear 发表于 2010-7-19 21:01 | 显示全部楼层
顶sheriff. 鄙视冷漠使用东厂手段。

关于os: 这里没有讨论os, 冷漠不要用这种方式混淆视线。 冷漠你若不服, 我在你的帖子里已经提出了探讨 os 的邀请。

关于冷漠提出的一些“术语“和各种混乱的“栈“以及随后一堆概念模糊,逻辑混乱的解释, 已经说明了问题。 冷漠杜撰的什么“模块私有堆栈“已经被详细的说明了。

要求冷漠同学提供冷漠所述的“术语“和各种stack 的出处和佐证,请冷漠停止无聊的扰乱视听的行动。

再说一遍:请提供出处和佐证!(冷漠同学唯一提供的“徐爱钧编著 P640“不但没有证明冷漠的论断,反而证明了冷漠杜撰了“术语“)
冷漠 发表于 2010-7-19 21:37 | 显示全部楼层

冷漠早就认输啦。大模式?服气。

本帖最后由 冷漠 于 2010-7-19 21:57 编辑
在中断里可以避免深层调用,但没人规定在中断里不能够进行深层调用。

回105楼警长,你怎么知道没人规定在中断里不能够进行深层调用?万一冷漠举出书中的例子,请问警长把自己往哪放?“什么事给自己留后路。” Cx51是支持51操作系统的,任何操作系统都是有自己的策略和用户机制的,你以为玩裸奔就可以随便在中断ISR自创100层调用?编译器策略没让你这么干!你一定要在这和冷漠搅,在ISR中玩无限深层函数调用,那冷漠也教你最简单的,什么人都会的一手,见下面贴图;更少啦,才4字节呀?费这么大劲出这么精彩一道题,结果才用了4字节!离13字节还远呢;这样,你可以再自创10 层空函数深层调用,也PUSH /POP 用不了13字节。

所长这么厉害的人也不及时给警长点拨一下,让冷漠第二次钻了空子。又失算一回。
否则,冷漠对这种无限裸奔的人还真没话说。冷漠小模式优化解决方案,您来了个大模式,非要赢一把?呵,服气,敬佩,没关系,冷漠早就认输啦。冷漠连裸奔都不会,还玩什么呀?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
highgear 发表于 2010-7-19 22:12 | 显示全部楼层
"万一冷漠举出书中的例子", 冷漠你真啰嗦, 你为什么不直接把书中“规定在中断里不能够进行深层调用“列出来。中断里函数调用的深度仅受硬件stack空间的限制, 这种基本的常识, 还需要人教你冷漠么?

冷漠你列出中断saved registers来说明什么? 说明有中断栈和什么乱七八糟的“栈“? 保存寄存器在63搂里已经讲的很清楚了。

你的帖子思维逻辑混乱,概念含糊不清, 除了会控诉所长/highgear, 还会做什么?
冷漠 发表于 2010-7-19 22:13 | 显示全部楼层
本帖最后由 冷漠 于 2010-7-19 22:14 编辑
清楚滴证明了冷漠的“前台中断ISR所使用的堆栈深度不大于13字节”是个错误的结论。


如果万一冷漠拿出可信服的Keil资料,说上面话的人怎么办?任何事,给自己留后路。玩不起就别玩。

别到时候说,这个不算,那个不算。C51编译器规则,策略不算,您裸奔算?敬佩!

刚写的中断操作规则,什么消息不消息,裸奔不也是这样做的?论坛上这样的帖子多了:中断中设置一个标志位,后台检测这个标志位以启动相关程序。消息/标志还不是一回事?OS怎么啦,当年所长喊“OS能做到的,俺裸奔绝对做得到!”喊那么响亮,如今OS又不算了?跟这种人玩,冷漠永远赢不了。
highgear 发表于 2010-7-19 22:25 | 显示全部楼层
“前台中断ISR所使用的堆栈深度不大于13字节。这已经可以算是中断堆栈深度精确计算了吧“
中断isr 使用的堆栈深度可以远远的超过13字节, 因为中断内的用户代码可以深层调用,这是基本的常识。

排除用户程序所用空间, 最大可能栈深为15或17bytes.
sheriff 发表于 2010-7-19 22:28 | 显示全部楼层
顶楼上,期待冷大虾举出是哪个高人“规定在中断里不能够进行深层调用”的。
107楼的贴图貌似证明不了什么,而且冷漠自己说“你可以再自创10 层空函数深层调用,也PUSH /POP 用不了13字节”,你可以自己试试,增加sum2的调用层数,用不了10层那么多,真的。。:lol
另外,最好先问问楼主救火车,他的程序是不是裸奔,否则冷大虾的基于OS的堆栈设置方法(虽然目前还未论证完毕)貌似不适合他。
highgear 发表于 2010-7-19 22:29 | 显示全部楼层
对109搂, 一个字:操
sheriff 发表于 2010-7-19 22:31 | 显示全部楼层
109楼再也不是“夹杂私货”了,因为完全是私货。
冷漠 发表于 2010-7-19 22:33 | 显示全部楼层

冷漠就笑话所长2人解不出答案来眼睛发绿的样子。

本帖最后由 冷漠 于 2010-7-19 22:51 编辑

所长这种人,如今谁还对你有兴趣?过去一天到晚和这个比和那个比,结果把自己比出了论坛!如今穿着徒弟highgear的马甲招摇,又来找人PK ?还是先把马甲脱了再说吧,否则想当年PK输了赖起账来,佛教,基督,伊斯兰 三个教主一块拜,再犯起病来,谁还敢和你玩。(要不要冷漠把当年的帖子拿出来?这种输了就撒泼,冷漠早就服了。)

万一冷漠完成了3个问题,把所长的“自尊”往哪放?再次退出论坛?所以所长也只好**穿着马甲不敢以真面目示人。
highgear 发表于 2010-7-19 22:44 | 显示全部楼层
哈哈,我给冷大虾说过多少遍了,技术这东西,不懂就是不懂,不要装懂。真的假不来,假的真不来。前面的冷大虾提出的pk,我把c51, vc++, vb, c# 的程序都公布出来,冷大虾最后怎么一声不吭, tj了? 亏你冷大虾还好意思提PK.
xlsbz 发表于 2010-7-20 10:44 | 显示全部楼层
楼主呢?
51avr 发表于 2010-7-20 19:48 | 显示全部楼层
冷漠有点走火入魔了!

首先,我觉得冷漠是个能刻苦用功读书的人,能冥思,并有一些领悟,生活工作可能还是个乖乖男。

但是,一个人的成长不仅是技术的提升。我谈几点个人看法,如果有一个词语能与大家产生共鸣,则不枉我在陪家人晚餐的时间里打下这些文字。
1。 对待周围的人友善一点好。冷漠这个词不会给别人带来好感,不会给自己带来帮助。标榜个性的方法有很多,但是不要毁了自己给别人留下的第一印象。
2。技术很重要,是我们一日三餐的保障。但我们接触到的技术不过是千千万万人曾经做过的东西,我们的价值在于把它转化为产品,转化为商品,转化为利润,转化为财富。技术可以交流,但是不要拿来作为打击别人的武器。
3。一个人的成长包括技术的提升,性格的改善,态度的端正,心智的成熟。成熟的男人不仅仅是个好工程师。
4。成功需要:3分能力 + 6分机遇 + 1分贵人相助。朋友帮助能让你日行千里,事半功倍。
5。谦虚谨慎,不骄不躁,做个能控制自己行为的人。

。。。。。。

评分

参与人数 2威望 +7 收起 理由
hqgboy + 1
程序匠人 + 6

查看全部评分

xlsbz 发表于 2010-7-20 19:57 | 显示全部楼层
冷漠 不错

这里只讨论技术 楼上想讨论非技术 可以到“非技术讨论区”去!
highgear 发表于 2010-7-20 22:30 | 显示全部楼层
顶 117 搂
*) 技术应严谨认真
*) 对技术问题的质疑是应该的, 当以技术回应, 而不是诉诸个人攻击。

做个技术总结(以下所述的栈均指涉及sp指针位于片内数据区idata的硬件栈):
*) 如果c51程序中没有使用汇编模块, 或者汇编模块中没有手工更改sp, 那么编译连接时不会产生额外栈段( stack segment), 即没有所谓的“模块私有栈".
*) 只有一个栈, 所有的函数调用, 中断发生以及寄存器的保护(push)都在一个以sp为指针的栈内, 别无分栈, 即使有stack segment, 也只是改变了栈底而已。
*) keil 不鼓励使用 reentrant. 无reentrant关键字的程序除了使用register外,还会使用固定地址变量来传递参数。reentrant 函数除了使用register外, 还会使用一个效率低下的“simulated stack" 来传递参数, 以达到重入。
*)  理论上, 人脑可以精确计算c51所用的最大栈深。实践上, 必须了解c51编译器的准确行为或探查所生成的汇编程序, 因而过于繁琐易错, 可操作性不高。
*) 关于自动计算最大栈深,keil 已明确表示太困难:
There is no automatic way the tools can tell you the maximum stack depth or stack utilization. Because of asynchronous events and interrupts, the automation is too difficult.
ayb_ice 发表于 2010-7-21 08:22 | 显示全部楼层
LS
冷漠是不会善罢干休的,他是不会认输的
qixiangyujj 发表于 2010-7-21 09:41 | 显示全部楼层
mcu不一定要定义为xdata的,,具体看情况
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部