1
1.delay(系统的延时功能)
delay.c和delay.h

前面四个函数,仅在支持操作系统(OS)时需要用到,而后面三个函数,则不论是否支持OS都需要用到
delay的延时编程思想:CM3内核的处理器,内部包含了一个SysTick时钟,SysTick是一个24位的倒计时定时器,当计数到0时,将从RELOAD寄存器中自动重新装载定时初值i,开始新的一轮计数。只要不把它在SysTick控制及状态寄存器中的使能3位清楚,就可以不停。
delay_ms和delaya_us支持操作系统OS时,我们需要三个宏定义和四个函数,如下


上面的代码仅支持UCOSII和UCOSIII,不过,对于其他的OS 的支持,只需要对以上代码进行简单的修改即可实现
三个宏定义:
(1)#define delay_osrunning OSRunning //OS 是否运行标记,0不运行;1在运行。
(2)#define delay_ostickspersec OS_TICKS_PER_SEC //表示OS 时钟节拍,即OS每秒调节次数
(3)#define delay_osinenesting OSIntNesting //用于表示OS中断嵌套级别,即中断嵌套次数,每进入一个中断,该值加一;每退出一个中断,该值减一。
四个函数:
(1)delay_osschedlock,用于delay_us延时,作用是禁止OS进行调度,以防打断us级延时时间不准。
(2)delay_osschedunlock,用于delay_us延时,作用是在延时结束后恢复OS的调度,继续正常的OS任务调度。
(3)delay_ostimedly,则是调用OS自带的延时函数,实现延时。改函数的参数位时钟节拍数。
(4)SysTick_Handler,则是systick的中断服务函数,改函数为OS提供时钟节拍,同时可以引起任务调度。
系统初始化函数
延时函数的实现
delay_init
delay_us
delay_ms

浙公网安备 33010602011771号