关于dts:
1.片外挂载,设备树怎么写。外置ddr3等 父子节点的 #address-cells =<2> #size-cells决定rangs<1 0 0x1000000 0x10000>,代表设备片选1 ,偏移量0,起始地址0x1000000 ,地址大小 0x10000,对应映射地址范围0x1000000 ~0x100ffff
2.中断号比 DATASHEET的号码小32 即 dts中断号+32 =DATASHEET中断号
3.控制信号地址比DATASHEET中的 control module 地址小0x800 ,即dts地址+0x800 =DATASHEET地址。即说偏移量不大于800的,双方一致,不用减800。
4.gpio在dts中 配置芯片default(active)时上拉,sleep时下拉。
5.am4372.dtsi的uart0 -->ti,hwmods="uart1" ,字符串描述编号全部加1 ,gpio亦是如此
6.中断向量在am4372.dtsi中全部设置完了,开发板引用即可,只需要在开发板dtsi设置引脚属性。
7.因为Linux键盘定义包含台式机键盘,笔记本键盘等,不管是矩阵键盘还是按钮,都要注意按键配置
关于指令:
1.df 存贮器清单
2.lsinput 键盘清单 ,hexdump /dev/...键盘事件在控制台显示。
3.使用cat /proc/tty/driver/serial查看板载串口
关于sqlite3:
1.各个表格,开头第一列 xxname text primary key not null 其中xxname不能重名
2.C#中,Table[0]rows.count从0开始,两行则rows.count=1
关于串口:
串口这部分是修改离职同事的未完成程序中发现并解决的问题汇总
1.read直接返回,没有进入阻塞模式 。原因:newtio.c_cc[VTIME]和newtio.c_cc[VMIN]没有设置, 或者是都设置为0。解决办法:修改为newtio.c_cc[VTIME]=10,newtio.c_cc[VMIN]=0; 1秒内没接收到则超时。
2.阻塞模式下一直读取为0,返回数字随着延时而增加.原因:返回数字没有赋初始值,因为多串口select下,返回数字的赋值函数没有被执行。解决办法:这说明gcc不会给不赋值的变量默认赋值为固定0值,而是随着函数执行时间而增加。这个特性可以用来做计时器。返回赋初始值即可。
2.1.赋初始值之后解决了返回的问题,但是当 select延时参数为NULL时,select函数一直被阻塞。
3.没有接收的情况下,select函数返回maxfd被选中,即自动选择句柄最大的。解决方案:分析发现最大句柄接485芯片,由于485芯片接线方式的问题,导致开始发送一个字节(忙),自动会接收到这个字节。然后程序里检测到接收字节后,不能识别指令,又发送该字节代表忙,形成死循环,所以导致不停检测到数据.数据发送完毕之后,延时1ms再cflush(fd,TCIOFLUSH)可以清除,时间必须够,999us都不行。
4.发送一切正常,而接收的第八位被强制为0.原因:去掉newtio.c_iflag|=ISTRIP ,该语句不是自动去掉校验位,而去掉了第8位.