
1、标准库函数pow()的参数强制转换
C语言标准库函数pow()的两个参数都是double型,如果传的是int型,windows编译器不会自动强制转换,于是结果不可控;gcc会强制将参数由int型转换为double型,结果是确定的。
2、volatile声明变量避免编译器优化
对于那些直接读取硬件数据的变量,要用volatile声明,确保本条指令不会因编译器的优化而省略。在程序中,当读取一个变量时,为提高存取速度,编译器优化时会先把变量读取到一个寄存器中;以后再取变量值时,就直接从寄存器中取值。而用volatile声明变量后,要求每次都重新读取这个变量的值,而不是使用保存在寄存器里的备份。
使用volatile变量的几个例子:
1)并行设备的硬件寄存器(如:状态寄存器)。
2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)。
3)多线程应用中被几个任务共享的变量。
3、高水位中断
由于CPU处理速度比外设要快很多,应避免频繁产生中断浪费CPU处理资源,例如串口芯片应配备fifo,尽量多积攒一些消息再出发一次中断处理以提高效率,不宜每收到一个字节就发出一次中断。
4、具有EDAC功能的处理器
空间设备中,单粒子翻转引发SRAM型FPGA的错误很常见。单粒子翻转是指高能粒子射入集成电路的PN结,会发生PN结电离、电荷积累、能量转移等。存储器件某一位数据会从一个稳态转变为另外一个稳态,是引发航天器故障的主要因数。
为了最大限度地减少单粒子效应对FPGA的影响,通常采用三模冗余的加固结构,尽管三模冗余结构可以将错误暂时隔离,但是在长期工作的情况下冗余单元也可能继续发生错误。近年来国内外经常采用EDAC电路来减少或避免错误的发生。
EDAC模块基于海明码,在CPU与RAM之间,保护RAM中的数据,CPU对RAM *** 作时,EDAC模块已经对RAM中的数据进行了预处理,同时EDAC模块中也加入了使能信号。
应用软件中,要确保EDAC功能确实得到了使能。
5、电平式中断信号
尽量采用脉冲式中断信号,避免采用电平式中断信号,电平式中断信号有可能因错误的中断清除时序导致电平无法被拉回,进而导致无法再次产生中断。电平触发方式适合于外部中断为低电平输入和中断服务程序能清除外部中断源的情况,通常做法在中断退出前关闭中断,等后面恰当时机再打开。
6、vxworks内置的各种状态检测工具
Vxworks自带的各种命令,列出来如下:
i 显示系统信息
taskShow 显示任务TCB信息
taskCreateHookShow 显示任务创建调用例程列表
w 显示所有或者一个挂起任务的信息
CheckStack 显示一个任务的使用堆栈的情况,没有定义任务时显示所有
tt 显示一个任务的调用状况,解析堆栈
d 显示目标机内存, 可以替代内存观察
m 修改内存
lkup 显示指定符号信息
devs 列出目标机系统上的所有设备
iosFdShow 显示系统中的文件标识符
msgQShow 显示队列的使用状况
SemShow 显示信号量的信息
wdShow 显示看门狗的信息
mqPxShow 显示POSIX消息队列的信息
memPartShow 显示分区块及统计信息
memShow 显示系统分区上空闲和已分配空间的总数等等
arpShow 显示arp列表
ifShow 显示网口信息
tcpstatShow 显示tcp信息
udpstatShow 显示udp信息
inetstatShow 显示连接信息
WDT是英语Watchdog Timer的缩写字母。
Watchdog Timer 中文名看门狗。是一个定时器电路,一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.
软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。
51 系列有专门的看门狗定时器,对系统频率进行分频计数,定时器溢出时,将引起复位.看门狗可设定溢出率,也可单独用来作为定时器使用.
看门狗使用注意:大多数51 系列单片机都有看门狗,当看门狗没有被定时清零时,将引起复位。这可防止程序跑飞。设计者必须清楚看门狗的溢出时间以决定在合适的时候,清看门狗。清看门狗也不能太过频繁否则会造成资源浪费。程序正常运行时,软件每隔一定的时间(小于定时器的溢出周期)给定时器置数,即可预防溢出中断而引起的误复位。
看门狗运用:看门狗是恢复系统的正常运行及有效的监视管理器(具有锁定光驱,锁定任何指定程序的作用,可用在家庭中防止小孩无节制地玩游戏、上网、看录像)等具有很好的应用价值.
系统软件看门狗的设计思路:
⒈看门狗定时器T0的设置。在初始化程序块中设置T0的工作方式,并开启中断和计数功能。系统Fosc=12 MHz,T0为16位计数器,最大计数值为(2的16次方)-1=65 535,T0输入计数频率是.Fosc/12,溢出周期为(65 535+1)/1=65 536(μs)。
⒉计算主控程序循环一次的耗时。考虑系统各功能模块及其循环次数,本系统主控制程序的运行时间约为16.6 ms。系统设置看门狗定时器T0定时30 ms(T0的初值为65 536-30 000=35 536)。主控程序的每次循环都将刷新T0的初值。如程序进入死循环而T0的初值在30 ms内未被刷新,这时看门狗定时器T0将溢出并申请中断。
⒊设计T0溢出所对应的中断服务程序。此子程序只须一条指令,即在T0对应的中断向量地址(000BH)写入无条件转移命令,把计算机拖回整个程序的第一行,对单片机重新进行初始化并获得正确的执行顺序。
WDT例句及翻译
⒈When&how to use watchdog(WDT)&constant ramp time for RAMP command?
看门狗(WDT)、RAMP指令对固定斜率时间,何时以及如何使用?
⒉In order to improve the reliability and ability of fault-tolerance of CX- 1micro-satellite,hardware fault-tolerance technology such as WDT,EDAC,multi-computer system etc
根据小卫星硬件冗余结构的特点,采用了以多版本编程、恢复块技术、前向恢复和后向恢复技术等软件容错技术来提高现代小卫星系统的容错能力。
⒊At the same time the clock chip PCF8563 and serial EEPROM chip CSI24C01 with Reset and WDT circuit of I2C bus are used hi the system. They have not only provided the non- volatility data storage area,the supervision ability of power supply and MCU and the RTC,and its I2C bus structure has been simplified the circuit design.
同时在系统中还使用了护C总线结构的时钟芯片PcF8563和内置Reset、wDT电路的串行EEPROM芯片CSI24COI,它们不仅提供了电源和微控制器的监控功能、不挥发性的数据存储区、实时时钟,而且其护C总线结构简化了电路设计。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)