打印

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

[复制链接]
楼主: 救火车
手机看帖
扫描二维码
随时随地手机跟帖
101
---“你的名字带有恶意和自以为是”
不理解,还请示下?sheriff这个单词哪里触痛了冷沫的敏感脆弱的神经?
你的签名?我刚看到的时候还挺敬佩的,当时以为这是你说给自己,用以自省用的~~:lol

使用特权

评论回复
102
冷漠| | 2010-7-19 14:16 | 只看该作者

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

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

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

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

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

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

呵呵,哪都少不了他。全世界的人都是错的,只有所长唯一正确。——  一种心理病态。

使用特权

评论回复
103
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字节”是个错误的结论。

使用特权

评论回复
104
sheriff| | 2010-7-19 18:47 | 只看该作者
另外,你摆出OS那套消息邮箱的东西,不能证明“前台中断ISR所使用的堆栈深度不大于13字节”不是错的。
在中断里可以避免深层调用,但没人规定在中断里不能够进行深层调用。:victory:

使用特权

评论回复
105
highgear| | 2010-7-19 21:01 | 只看该作者
顶sheriff. 鄙视冷漠使用东厂手段。

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

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

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

再说一遍:请提供出处和佐证!(冷漠同学唯一提供的“徐爱钧编著 P640“不但没有证明冷漠的论断,反而证明了冷漠杜撰了“术语“)

使用特权

评论回复
106
冷漠| | 2010-7-19 21:37 | 只看该作者

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

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

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

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

使用特权

评论回复
107
highgear| | 2010-7-19 22:12 | 只看该作者
"万一冷漠举出书中的例子", 冷漠你真啰嗦, 你为什么不直接把书中“规定在中断里不能够进行深层调用“列出来。中断里函数调用的深度仅受硬件stack空间的限制, 这种基本的常识, 还需要人教你冷漠么?

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

你的帖子思维逻辑混乱,概念含糊不清, 除了会控诉所长/highgear, 还会做什么?

使用特权

评论回复
108
冷漠| | 2010-7-19 22:13 | 只看该作者
本帖最后由 冷漠 于 2010-7-19 22:14 编辑
清楚滴证明了冷漠的“前台中断ISR所使用的堆栈深度不大于13字节”是个错误的结论。


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

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

刚写的中断操作规则,什么消息不消息,裸奔不也是这样做的?论坛上这样的帖子多了:中断中设置一个标志位,后台检测这个标志位以启动相关程序。消息/标志还不是一回事?OS怎么啦,当年所长喊“OS能做到的,俺裸奔绝对做得到!”喊那么响亮,如今OS又不算了?跟这种人玩,冷漠永远赢不了。

使用特权

评论回复
109
highgear| | 2010-7-19 22:25 | 只看该作者
“前台中断ISR所使用的堆栈深度不大于13字节。这已经可以算是中断堆栈深度精确计算了吧“
中断isr 使用的堆栈深度可以远远的超过13字节, 因为中断内的用户代码可以深层调用,这是基本的常识。

排除用户程序所用空间, 最大可能栈深为15或17bytes.

使用特权

评论回复
110
sheriff| | 2010-7-19 22:28 | 只看该作者
顶楼上,期待冷大虾举出是哪个高人“规定在中断里不能够进行深层调用”的。
107楼的贴图貌似证明不了什么,而且冷漠自己说“你可以再自创10 层空函数深层调用,也PUSH /POP 用不了13字节”,你可以自己试试,增加sum2的调用层数,用不了10层那么多,真的。。:lol
另外,最好先问问楼主救火车,他的程序是不是裸奔,否则冷大虾的基于OS的堆栈设置方法(虽然目前还未论证完毕)貌似不适合他。

使用特权

评论回复
111
highgear| | 2010-7-19 22:29 | 只看该作者
对109搂, 一个字:操

使用特权

评论回复
112
sheriff| | 2010-7-19 22:31 | 只看该作者
109楼再也不是“夹杂私货”了,因为完全是私货。

使用特权

评论回复
113
冷漠| | 2010-7-19 22:33 | 只看该作者

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

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

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

万一冷漠完成了3个问题,把所长的“自尊”往哪放?再次退出论坛?所以所长也只好**穿着马甲不敢以真面目示人。

使用特权

评论回复
114
highgear| | 2010-7-19 22:44 | 只看该作者
哈哈,我给冷大虾说过多少遍了,技术这东西,不懂就是不懂,不要装懂。真的假不来,假的真不来。前面的冷大虾提出的pk,我把c51, vc++, vb, c# 的程序都公布出来,冷大虾最后怎么一声不吭, tj了? 亏你冷大虾还好意思提PK.

使用特权

评论回复
115
xlsbz| | 2010-7-20 10:44 | 只看该作者
楼主呢?

使用特权

评论回复
116
51avr| | 2010-7-20 19:48 | 只看该作者
冷漠有点走火入魔了!

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

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

。。。。。。

使用特权

评论回复
评分
参与人数 2威望 +7 收起 理由
hqgboy + 1
程序匠人 + 6
117
xlsbz| | 2010-7-20 19:57 | 只看该作者
冷漠 不错

这里只讨论技术 楼上想讨论非技术 可以到“非技术讨论区”去!

使用特权

评论回复
118
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.

使用特权

评论回复
119
ayb_ice| | 2010-7-21 08:22 | 只看该作者
LS
冷漠是不会善罢干休的,他是不会认输的

使用特权

评论回复
120
qixiangyujj| | 2010-7-21 09:41 | 只看该作者
mcu不一定要定义为xdata的,,具体看情况

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则