我觉得裸奔也要带着操作系统思想裸奔

[复制链接]
8472|32
 楼主| zyboy 发表于 2009-5-19 19:20 | 显示全部楼层 |阅读模式
我程序一直都是**的,在**中发现了几个问题:
(1)WARNING L15: MULTIPLE CALL TO SEGMENT --函数重入
其实这个问题实际上就是函数重入问题,在操作系统的多线程很常见。例如在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样的函数。这样当主循环运行到该函数中时,一旦产生中断,则在中断里又再次调用该函数!而使得该子函数发生了重入,这时,尽管概率很低,但是很可能出错!

(2):当主函数与中断函数共享变量问题 (类似两个线程共享资源的问题)
当主函数与中断函数共用变量时,可能发生: 
例如:当变量的其中一个字节读入到寄存器中时,发生中断,中断中改写了变量值。当中断返回时,变量的其他字节继续被读入到寄存器中,造成新旧字节组合错误。

这些问题感觉都很隐蔽,如果出现了,可能只能通过反汇编才能看到。个人感觉要有操作系统的思想,理解和避免这些问题就容易些了。

McuIsp 发表于 2009-5-19 20:02 | 显示全部楼层
dld2 发表于 2009-5-20 08:45 | 显示全部楼层

基本上抢占多任务和开了N个中断差不多

HWM 发表于 2009-5-20 08:57 | 显示全部楼层

critical-section problem

electron0101 发表于 2009-5-20 20:48 | 显示全部楼层

同意 看看大侠 有解决方案!

后学 发表于 2009-5-22 23:35 | 显示全部楼层
 楼主| zyboy 发表于 2009-5-22 23:37 | 显示全部楼层

谢谢穿裤子了!哈哈

补充一下我的解决方法:

(1):有两种方法解决 reentrant使函数重入,缺点堆栈,我喜欢另一种定义两个不同名字功能相同的函数。

(2):我直接用最原始的关中断,开中断(如果要保护的代码较少)
beinghu 发表于 2009-5-22 23:59 | 显示全部楼层

是要带os思想的

不管怎么裸笨,os的思想都是有借鉴和知道意义的
笃行者 发表于 2009-5-23 08:55 | 显示全部楼层

赞同

OS的消息队列,时间片等可以用到前后台系统中
救火车 发表于 2009-5-23 09:32 | 显示全部楼层

强烈赞同。

ayb_ice 发表于 2009-5-23 12:23 | 显示全部楼层

LZ的这些都是写程序要考虑的基本问题

操作系统下会有更多这样的问题
McuPlayer 发表于 2009-5-24 16:28 | 显示全部楼层

好好的一个技术贴,被一个广告糟蹋了

yewuyi 发表于 2009-5-24 16:31 | 显示全部楼层

这个世界怎么有这样的SB ?

快赶上芙蓉了。。。
夏风 发表于 2009-5-24 19:14 | 显示全部楼层

问题是,那几个常年污染视线的,站方从没管过.

强烈建议删ID...
笃行者 发表于 2009-5-24 19:28 | 显示全部楼层

前后台系统可以用消息队列

前后台系统可以用消息队列,去管理各功能模块的调度
bg6nw 发表于 2009-5-24 21:41 | 显示全部楼层

应该反过来说

操作系统比裸奔更关注这些
鲁西老汉 发表于 2009-5-25 10:00 | 显示全部楼层

我的第一贴

来21IC第一贴,献给侃单片机第一加酷贴
highgear 发表于 2009-5-25 22:45 | 显示全部楼层

顶zyboy

其实,冲突的问题不仅仅是裸奔里有,实际上 os 里更严重,这就是为什么要引入互锁,互斥,信号,写通,写回等等乱七八糟的概念。只是裸奔下完全由自己控制,很多时候有意无意的能够避开冲突的问题。

我顶你,不是因为冲突问题,而是“带着操作系统思想裸奔“去设计程序的结构,比如消息,事件驱动,状态机,时间片等等核心思想。
jiyiche 发表于 2009-5-26 00:48 | 显示全部楼层

学习了

学习了呵呵
初入江湖 发表于 2009-5-26 11:26 | 显示全部楼层

学习了

 学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

356

帖子

0

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