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 

 

posted @ 2019-11-06 23:55  --gl  阅读(180)  评论(0)    收藏  举报