1,昨天发现仿真运行时程序跑到读取ID码到缓冲区时系统死机,发现保存ID码的地址为奇地址
估计问题原因:a,ARM是32位系统,如果选择ARM模式,小端对齐,指令地址从00开始;如果存储器选择16位,那么读取数据的指令所读取的地址的BIT0=0;如果BIT0=1,产生数据异常,程序跳到异常中断地址0x10处。
问题是:ARM的指令的在存储器中的放置和数据在FLASH以及在SRAM(或者SDRAM)中的放置方式是如上所述吗?为什么数据结构ID_REC_DATA的地址是基数?
结构体的对齐模数比其成员中对齐类型最强的还要强(至少相等),基本型成员对齐模数为其本身,结构成员对齐模数为其基本型成员对齐模数中最强的那个。
补充:经过进一步分析和Inter网友的指点,得知我的程序中传递给编程函数的指针是指向unsigned short型变量的,系统会从unsigned short对齐的地址取数据;而我实际传入的地址为结构的首地址,这个地址被编译器编译为奇数,那么程序中用 *data 进行取数时,地址不匹配,于是报数据终止。至于为什么数据终止,待进一步查证。
这个问题分析见:
2,显示屏经常性黑屏。
先排查硬件是否可靠,然后检查程序,凡是涉及到操作 PWM 的地方都检查,包括 PWM 引脚的是否上拉,是否使用了 PWM 功能,PWM 值的设置(TCNTBn和TCMPBn),是否重载,是否使能定时器的中断。
今天开始排查 LCD,根据上述思路跟踪检查,最后发现控制 PWM 的TCMPn值始终为零,可以判断是FLASH 的那个单元坏了或者其数据引脚虚焊,在程序中加了对 TCMPn 进行边界检查的代码后,系统跑起来了,蛮开心的。不过系统函数报 E-23 故障,我估计是 FLASH 的问题,因为不能写入和读出正确的数据,换了一片 FLASH 就好了。
此问题的8D报告主要内容:
1)屏幕通过PWM控制亮度和对比度,黑屏表明PWM输出低电平(注:常低不代表无PWM输出)
2)两个通道的PWM是通过T2,T3产生的,故在整个程序里检查设计操作这两个定时器的地方,排查发现程序操作他们的地方是初始化寄存器和开关T2、T3中断处以及上电系统初始化结束之后应用程序的变量初始化
3)通过两分法确定黑屏代码大致发生的程序模块,然后再单步跟踪,发现程序在跟踪到对TCMPB2、TCMPB3 初始化时,系统黑屏。
rTCMPB2 = 100 - InfoSet.sys.back_light;
rTCMPB3 = 100 - InfoSet.sys.contrast;
发现InfoSet.sys.back_light、InfoSet.sys.contrast均为零。即从FLASH读出的数据出错。
4)此时决定换一块FLASH试试看。更换后,恢复正常
5)通过分析电路上电掉电时序,电路在电源电压 <=3V 时就进入复位状态
6)伴随黑屏或者类似FLASH问题的其他现象是,上电同步进度100%,这个是读出来的自编花样和固缝数量为0,造成同步瞬间结束;上电蓝屏,这个是上电后读出来的页面数据(state数据)是个非定义值,造成进不了正常界面;上电数据超限,原因同上。以上问题同样在换片子之后恢复正常。
可能的原因分析:
1)频繁上下电产生电压或电流冲击?
2)LCD需要的高压逆变器的电磁干扰已经静电对 FLASH 存储单元的篡改?
3)FLASH 为低质量散片?
在实验过程中,发现断电1S后,出现一个100ms宽度的高电平脉冲,这个是主控电源上的大电容放电,不好。
现在等待新版本的HMI电路出来,换成LED 5V 背光对比度,使用高质量的FLASH,确认是否上述问题。
3,触摸屏不灵敏
1)选择质量好的触摸屏厂家
2)修改内核触摸屏校准算法,采用Q值计算缩放比例
3)修改触摸屏校准数据的处理,采用中值法。从K值和边缘值的角度作非法处理
4)修改上电程序,添加上电校准数据监测,和新板子首先校准
通过以上方法,触摸屏的使用效果大幅提升
阅读(1196) | 评论(0) | 转发(0) |