06 2011 档案

摘要:为了让文件支持Unix标准的open, read, write, ioctl操作, RTEMS做了一层libio的封装,封装之后,用户不必了解libio过多,只要会用就行了,我没有仔细地看代码,就是看了看console.c 和 相关的termio函数,然后做了几个实验得出,若要使文件支持标准C的操作,只需要操作rtmes驱动函数中的最后一个参数,即 void *arg,简述如下:open、close函数: 将arg强制转换为 rtems_libio_open_close_args_t *,通过 mode和flag可获得打开时的标志,只读、只写、读写等read、write函数: 将arg强制转换 阅读全文
posted @ 2011-06-11 21:35 windtail 阅读(1074) 评论(0) 推荐(0)
摘要:今天调试出了特别奇怪的问题,经常用的串口发送居然都不好使了,代码大约是这样的:if( flag in memory mapped reg) { write char to transmit reg}从串口发出去的东西总是不对,用jtag调试发现,单步的时候是正确的,但是只要全速运行就出错。思考之后,感觉只可能是flag读回来是不对的,但怎么可能呢??仔细思考后,发现一个问题,ARM如何知道每次都要通过读这个地址来获得flag呢?虽然已经将memory-mapped reg 的地址定义为 volatile,但是这只是告诉gcc不优化进寄存器,但是ARM还可以从Cache中读啊,ARM没有专用的I 阅读全文
posted @ 2011-06-10 23:03 windtail 阅读(1718) 评论(0) 推荐(0)