本帖最后由 杨为民 于 2024-3-31 10:54 编辑
(1)在90年代我负责的一个PC机终端网络金融收支项目中,同事问我当用户密码输入错误三次后,用什么技术才能使得键盘、网络、条码枪等的所有外设都锁死不响应,并且即使有木马程序也不会被启动?我回答:“关闭总中断,程序做死循环”。 (2)在00年代我的一个学生在一台国外进口的数字铣床上实习,上面有个巴掌大的红色按钮,上面只有英文“紧急”一个词。学生问技术员有什么作用,技术员说不知道,从来没有用过。 有一天,大概是工件装错了,运行时工件稳稳地向机械臂支架撞了过去,学生一机灵,拍下紧急按钮,铣床总电源断了,所有运动停止,避免了严重故障。 (3)在10年代,我与机床厂朋友聊到此事,他说数字铣床等数控机床在紧急情况下用关总电源来处理其实不是很好的选择:其一是电一停,刀头卡在工件里,事后人工取出很难,会影响定位精度,甚至要重新校准。其二是下次加电时,各种部件没有从起降区开始工作,启动过程可能造成部件碰撞。 (4)当时正值朋友技改项目,我出主意帮他们将紧急情况下关总电源的方法修改为:第一步,停止底盘运行,执行刀头缩回、机械臂复位操作,第二部等待操作人员手动将底盘运动到合适的位置,取下工件,复位系统,然后再断电。具体技术细节要求保密,不便细说了。 (5)我认为准备运用在机电控制系统的单片机RTOS在必须有功能实现上面的“紧急情况处理”,因此设计了测试2作为产品级的单片机RTOS必须通过的测试方法。 测试2模拟了上面的紧急情况处理过程: 1)区间1,监测紧急按钮和其他传感器,检测紧急情况出现。 2)区间2,发现紧急情况,发出各种报警信号。关闭总中断,进入临界区保护,让所有的外部响应停止。然后分别对各个中断进行处理,打开或者关闭。但是RTOS系统中断必须停止,避免意外切换到其他任务。 3)区间3,进入刀头、机械臂等复位任务(正常情况它也是一个任务),保护重要设备归位。 4)区间4,处理各种善后,包括设置哪些任务就绪,哪些任务挂起。 5)区间5,进入手工操作任务(正常情况它也是一个任务),无限期等待操作者来手工操作各种机械运动来消除紧急情况,情况正常后,必须等待手工退出任务。 6)区间6,退出临界区保护, 7)区间7,善后处理,系统正式停机和断电。 (6)值得说明的是:在以上的临界区保护中,当区间2分别设置好各个中断了以后,用户程序仍然可以直接用EA=1再次打开总中断,因为有许多运动控制必须在有中断的情况下才能执行。将凡是引用了中断任务调度函数的中断关闭后,就再也不会出现临界区保护之外的任务切换。 所以在“关闭总中断的临界区保护中”,用户仍然可以直接用“EA=1”和“EA=0”来控制总中断,不必要僵硬地就认为在临界区不可以打开总中断,只是程序设计的时候要特别地注意。 (7)一个单片机RTOS产品在研制时会出现很多选择,这些选择不同使得RTOS有不同的类型,不同类型的RTOS适合不同的场合和具有不同的功能,这些选择没有对错之分。 一个具体的单片机RTOS可以选择不处理上面的紧急情况,当然这种产品也就无需通过测试2。 一个具体的单片机RTOS虽然选择处理上面的紧急情况,但是处理的方法不是关闭总中断,当然这种产品也就无需通过测试2。 一些特殊应用的单片机RTOS就根本不允许关闭总中断,那么测试3的方法也是一种选择。 总而言之,单片机RTOS的移植者或者研制者必须决定自己的产品需要哪些功能,需要通过哪些测试。
|