1

关于投票
程序安全设计中的一个微小细节
lism 发表于 2006-12-30 20:07 AVR 单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 看了半天TWI资料写出操作EEPROM程序并不见得很好.请大虾指点

利用AVR的TWI操作I2C E2PROM并不见得方便
。反而其仲裁功能要是遇上器件损坏时候,会傻等!请大虾们指点!
hotpower 发表于 2006-12-31 06:43 AVR 单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

2楼: 愿听其解,谢谢!!!

lism 发表于 2006-12-31 13:05 AVR 单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

3楼: 呵呵。高手来了。赶紧发问。

TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);//发送STAR
while (!(TWCR&(1<<TWINT)));//就这里,如果总线为短路。得不到控制权,那么单片机就定在哪里了。

hotpower 发表于 2007-1-2 02:34 AVR 单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

4楼: 倒塌了~~~我以为楼主的村里有什么高招呢???

这个问题本来就计划在水潭里的尿童学堂里论述,想先听听楼主的高招,没想到楼主止步了,真倒塌了~~~

在程序的安全设计上,对于这些需要检测硬件的回控信号后再进一步运行的程序,有很多需要考虑的细节.
1.无硬件看门狗或有硬件看门狗时.
2.硬件次要或主要时.
3.中断或查询时.

先以楼主的程序为例:
TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);//发送STAR
while (!(TWCR&(1<<TWINT)));//就这里,如果总线为短路。得不到控制权,那么单片机就定在哪里了。


在无硬件看门狗时:
当发送START信号后,若出现TWINT一直低电平时,即使总中断开启并其他中断正常运行时,都将永远踏步死机.
如果系统设计为I2C数据很重要,无它系统没意义必须重新启动时,此程序片段就如PC蓝屏需要人工重新启动,倒也可行.
若数据不重要,即TWI接口坏可以放弃时,此程序就不对了.
应该用一个软件计数器或定时器在一定间隔内,若TWINT恒为0,就设置错误标志后退出while死循环.
即:

TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);//发送STAR
while (!(TWCR&(1<<TWINT)));//就这里,如果总线为短路。得不到控制权,那么单片机就定在哪里了。

unsigned char TWStart(void) {
unsigned char error = 1;//失败
unsigned int i;
  TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);//发送STAR
  for (i = 0; i < 0x....; i ++) {//时间间隔自定
   if (TWCR&(1<<TWINT)) {//成功
     error = 0;
     break;
   }
  }
  return error;//成功返回0
}
当系统检测不通过就无法继续运行需要复位时,基本如下所述的方法.
具体很难说清...


在有硬件看门狗时,喂狗信号的位置也比较有讲究,特别是在长等待时.
一般原则是喂狗信号不能套入while内,应该修改为:
  wdt_reset();// Watchdog复位
  while(...){
  };//只要保证测试时间不超过Watchdog定时器复位时间
如果测试时间不够,可修改为:
  for(i = 0;i < N;i++) {
    wdt_reset();// Watchdog复位
    while(...){
    };//只要保证测试时间不超过Watchdog定时器复位时间/N
  }

而不应该:
  while(...){
    wdt_reset();// Watchdog复位
  }

总之,我们养狗绝非害人甚至害自己!!!
因为即使器件硬件错误,我们只认为是I2C通讯失败但系统其他更重要的设备
还要正常地运行,不能因为局部错误而复位整个系统.


系统分类: 单片机
用户分类: 程序安全
标签: 无标签
来源: 原创
发表评论 阅读全文(761) | 回复(0)

2

关于投票
搞工控抗干扰的一个理论基础就是>
搞工控抗干扰的一个理论基础就是<<论持久战>>
hotpower 发表于 2006-2-28 00:53 ZLG-ARM ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖举报该贴

当开关继电器后,若不延时而让程序走的话,随着时间的推移(当然是mS级了).

如果程序走到关键部位,如写入eeprom,则此时继电器才真正的动作,由于火花或

电源抖动都可能造成系统复位或eeprom写入失败.

最好的办法就是先躲避"敌人的攻击",暂时进入低功耗,等敌人背过身后,再给他一枪!!!

躲避和暂时退却并非是"丢人之事",而是为以后的攻击做准备!!!

所以延时是必须的,而且是最好关中断和休眠...
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=1996033
系统分类: ARM
用户分类: 程序安全
标签: 无标签
来源: 原创
发表评论 阅读全文(800) | 回复(0)

2

关于投票
圈圈同学:万里长征走出了第一步....
computer00 发表于 2006-2-27 12:58 ZLG-ARM ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

的确是很忽悠…………

回复:"死锁"不能只看表面现象(含非典"改造论")

computer00发表评论于2006-2-26 20:02:00


今天看了看LPC2138的中断方式,大概明白你的意思了。在2138中,中断向量地址是保存在寄存器中的…………

而在中断向量地址寄存器里面,你不保存实际的地址,而是保存一个地址编号,然后通过这个编号,到ROM里面去

检索一个地址(检索这个地址时可以判断检索号是否有效),然后再根据这个地址去跳转…………这样

即使发生错误,也不会跳到“平民区”…………

hotpower 发表于 2006-2-27 22:29 ZLG-ARM ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

圈圈同学:万里长征走出了第一步....

地址改编号像是开"遵义会议",在保证了跳入的地址"正确"后,才能够实施对"正确"结果的捕捉行为.
否则,跳飞的程序乱改数据就像一匹不能驯服的野马,没人知道它所产生的后果.

但是即使保证了跳入的地址"正确"后也不能解决死锁的问题.(这次讨论暂不涉及看门狗的问题)

在软件包more.asp?name=hotpower&id=9554中实际已给出了一个简单的防御程序.

在LPCARM自身的防御系统中,实际已包含了许多的软件保护措施.

如保护使能寄存器VIC->Protection=1时,在用户模式是不能对VIC结构的任何成员进行改写的.
这也包括VIC->VectAddrs及VIC->VectAddr等危险人物.

也就是说在理论上,当系统工作在用户模式下,VIC是"安全"的.

但是,当任何方式的中断到来后,情况就不一样了.

首先,不管VIC->Protection为何值,VIC结构是可以改写的(VIC->VectAddr用于清除中断内部标志).

此时,全部的危险人物都会出来捣蛋.

头号的危险人物(暂称黑桃A)当属中断使能寄存器VIC->IntEnable.

如果某向量中断已开放,干扰也可能将其关闭,反之,会将其开放.

用户一般不会对未使能的向量中断编写ISR,要写肯定被人说是吃饱了没事干了!!!

但是,你会在菜农改编的STARTUP.S中看到未用的都被直接链接到复位向量强行复位.

当然以上都是在向量控制寄存器VIC->VectCntls该向量中断也同时被势能的情况下发生的,这种概率几乎不能发生.

最可能发生的将是有用户默认中断程序时,未使能的向量中断都将被导入DEF_Handler()内运行.(这时IRQStatus的对应位被置1)

所以,在DEF_Handler()拦截将是最重要的措施...

晕菜~~~回复写多了肯定晕到,就先到这里吧...

看完后再继续探讨吧...
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=1994063
系统分类: ARM
用户分类: 程序安全
标签: 无标签
来源: 原创
发表评论 阅读全文(749) | 回复(0)

1

关于投票
"上错花轿嫁错郎"---给圈圈同学的回复

more.asp?name=hotpower&id=9477#3826

回复:"死锁"不能只看表面现象(含非典"改造论")
computer00发表评论于2006-2-25 22:38:00

粗略看了看,没能完全搞清楚。既然中断入口放在ROM中,那直接将中断入口地址映射到ROM中不就行了?

我眩晕~~~

VICVectAddr0~VICVectAddr15是在RAM中荡漾的.

在中断事件发生的瞬间,VICVectAddr才从水里把那

16个水菜捞起一棵来,这棵水菜就是中断的入水口.

在先行的LPCARM中断处理机制中,水菜不是水号!!!

故落入污水的水菜肯定就会变质和变味(地址可被改为任何地址),当然就不能食用了(程序飞入了任何未知的地方).

而将其改为菜号后,捕捉处是先要取出ROM地址后跳入入口地址.

号再错,但取出的地址总是对的.这不过是"上错花轿嫁错郎"的人间"美事"!!!!

如果"夫妻感情"很好,算命好,否则,...肯定不会闹出人命官司!!!

如果"夫妻"精明,在入洞房(ISR)时,先"验明正身".人间悲剧就不可能发生!!!(除非他们自愿"一夜情")...

 

就先说到这里吧...凡"成人"肯定已经明白了软件防御系统的重要性了吧...当然在故事中"验明正身".最重要!!!

但"功劳"还应该归"菜号"所有...

系统分类: ARM
用户分类: 程序安全
标签: 无标签
来源: 原创
发表评论 阅读全文(829) | 回复(0)
总共 , 当前 /