STM32+FreeRtos+Lwip移植笔记Ⅲ
罪过罪过,太久没发博客,最近杂事太多,脑子也乱哄哄的,加上过年放松了好长时间,就不更了。
每天就算10分钟, 也要坚持做一下近期的目标,养成习惯是成为专家的方法。
上次说用收完一帧数据作为条件来触发信号量(事件)从而同步下一步的执行。我在程序里是如何判断收完了一阵数据?我自己建了几个全局变量——例如num_ToReadPc(即将从Pc读取的数据的长度),其实很类似Windows的numToRead这个Serial类的属性。只要收到的counts达到这个指标就触发事件,进行校验等等下一步操作。
使用OS的好处之一:我认为,在需要等待串口信息回复时,如果等待超时,将退出不再等待继续执行;若得到触发,则直接通过并继续执行。光这一点,不用OS就有点麻烦——你需要自己建立一套超时重发的机制,in addition,c只能在函数的最开始定义变量,(还是说MDK编译器特有的?) 这样使得代码十分零乱,需要大量注释,逻辑也十分混乱......
USART能用DMA更好,每次一个字节来,都要进中断,这上下文切换将会浪费时间,不如一次性收完在处理一下。