本帖最后由 fly1974 于 2019-9-11 16:49 编辑
前几天一个同事离职了,因为公司所谓的电工(电子工程师)就剩我一个,所以他写的代码等资料就毫无疑问的移交给我了,我的这个同事也算是个老工程师了,年龄不小,小孩子都上高中了,今天看到他的主板代码,刚开始读就大吃了一惊: 外部中断里面居然加了死延时(使用while实现),延时时间还不短,居然有10毫秒,怪不得stm32F103他都不够用,看来这个设备的代码结构要大改了(尽管已经作了大改的思想准备,但是看到如此低水平的代码,还是有点失望,这个同事做事情还算认真,可没想到专业的东西搞这么差,PCB也是的,画好的PCB找不到原理图,要改PCB还得先把原理图整理出来,他画的4层板就不管耐压不耐压,中间两层分别连24V的正极和负极,分割区域内有一块是交流220V的,居然没有将中间层挖空!)!
写这边帖子的目地,不是为了嘲笑我同事技术不行,只是希望大家少犯这种低级错误;另外我其实不满的是我同事从我这借了公司钥匙,最后他离职时我问他要他不肯还给我,还要咨询主管意见,做事情畏畏缩缩地样子;还有其实就事论事我是支持我同事离职的,要换作我是他,我也许走得更快,因为我同事离职前被自己调试的设备砸成了工伤,我认为同事被砸伤的原因很大程度在于设备盖子没有下落缓冲装置,是设计不完善,不过负责机械部分研发的同事貌似没有意识到这一点!
void EXTI9_5_IRQHandler(void)
{
delay_ms(10);
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
另外我把后面帖子的部分内容贴过来,简单说一下:
下面这段代码就像是城市公交车,每10分钟一班,结果某人在等公交车时却等了3-5个小时,如果是因为刮风下雨等自然灾害的偶发因素引起的,一般人就忍了,关键是10次里面可能有4-5次都出现了很长时间等待,又没有啥特别的原因,我估计一般人都忍不了,等公交的可能会把调度给骂晕了!
void TIM3_IRQHandler(void) //1ms中断
{
//u16 flag=0;
if(TIM3->SR&0X0001)//Òç³öÖжÏ
{
sect_strim(); //2017.04.06 执行时间可能远大于1mS
if(dq_flag==1) //2019.07.16 add
{
qpshu_dis(); // 执行时间可能远大于1mS
} ....
}
TIM3->SR&=~(1<<0);//Çå³ýÖжϱê־λ
}
|
评论
|