大家好,本人刚刚接触ARM7不久,原来也没有做过单片机,现在做嵌入式脑子里有点浆糊,希望大家指点下。
我的板子使用NXP2478芯片,8M的内存。
UART连接的有GPS(数据采集频率为1秒),GSM(发送数据与接收数据频率都为1分钟),KWP2000(汽车总线的一种,3秒更新一次数据),此外还有CAN,usb,蓝牙等外设。这些模块一般都是使用中断来采集原始数据,然后再放到定义好的struct中供上层使用。
在一段时间内(如某1分钟内),CPU的使用可能会很大,例如GSM和远端服务器连接后,服务器可能会将大约10M的数据传递到板子,也可能是板子将10M的数据传递给服务器,其中数据为某种格式的文件,如.txt。
现在最麻烦的是CAN模块,CAN是CAN2.0B,汽车上的CAN数据是每10ms(毫秒)发送一次的,每次发送的数据大小是32个bytes,在这么快的速度下来更新时,我的师傅说使用轮询就好了,但是他原来也没有做过类似的设备,因此我不敢确定这个模块究竟用中断来写还是轮询来写比较好一点,现在希望各位大牛来指教一下,谢谢了。
如果能用中断就尽量用中断。
如果使用uc/os的话,如果task数量并不是很多,并且在task调度上的复杂度是可控,并能保证强实时的话,起一个task轮询也可以,但就是比较费电了。
轮询方式不好吧
buffer(32byte的倍数),buffer满,回调使能某一锁(可以用信号量),
在传送数据的线程中while(1){。。。},append该锁,如果锁无效,无限等待;锁有效,可以执行,即传送32bytes数据。