UcosII时钟系统

1. 系统时钟中断服务函数为 OS_CPU_SysTickHandler函数,多久一次触发中断而调用这个函数却决于系统时钟配置。

2. OS_CPU_SysTickHandler函数中会自增变量,实现RTC实时时钟和时间管理,比如1ms进行一次系统时钟中断,那么1000次后,RTC就增加1秒。

3. OS_CPU_SysTickHandler()->OSTimeTick()函数中会给计数器OSTime加1操作。

4. OS_CPU_SysTickHandler()->OSTimeTick()函数遍历任务TCB链表中的所有TCB,在任务的OSTCBDly不为0时,对OSTCBDly减1操作, 当OSTCBDly为0并且此TCB没有挂起,则使此任务进入就绪状态。

5. 由于嵌入式系统任务是一个无限循环,并且UCOSII还是一个抢占试内核,所以为了使高优先级的任务不至于独占CPU,可以给其他任务优先级别较低的任务获得CPU使用权的机会,UCOSII规定:除了空闲任务在外的所有任务必须在任务中合适位置调用系统提供的函数OSTimeDly(ms),使当前任务的运行延时一段时间并进行一次任务调度,以让出CPU的使用权。如果时钟中断1ms进入一次,那么OSTimeDly(1)相当于延时1毫秒,实现毫秒延时。

6. Modbus协议通信时的应用,如果用485进行modbus通信,当接收中断处理函数里面并不知道是否为modbus帧的最后一个数据,因为modbus没有结束标志,但是modbus有帧之间最小时间差为3.5个字符,可以利用这个特性判断帧是否接收完成。接收到数据后进入接收中断处理函数,里面使一个变量为1,在 OS_CPU_SysTickHandler函数里面自加这个变量,如果这个变量自加超过3.5
 个字符的时间,那么我们就认为数据帧接收完毕,可以开始解析。   

猜你喜欢

转载自blog.csdn.net/fengel_cs/article/details/105735009