没玩过OS,只能裸奔。。
一直没什么空,抓紧周末的时间把框架建起来了。
整个系统基于一个5ms的系统“嘀嗒”(有些人偏爱2ms,看情况决定吧),在此基础上来产生10ms和20ms时间片,实时性要求特别严格的任务可添加到里面,但一般不建议如此。
主循环主要运行10ms和20ms的两个服务程序,应付实时处理足够,具备简单的任务缓冲能力。
一些“慢”的处理(如1s运行一次),则进一步在10ms或20ms里面来产生更大的时间片,以此类推。
现框架内暂时只有一个1s的流水灯程序,需要什么可以往里面任意增加。
本框架还是比较简单的,少量注释,希望对大家有益。
另,定时时间不是太准,比计算出来的稍慢,不知是晶振原因还是什么,家里没有仪器,无从得知。
systick.c:
#include "includes.h"
uint8_t Time1sCounter = 0;
uint8_t Time10msCounter = 0;
uint8_t Time20msCounter = 1;
uint8_t Time100msCounter = 0;
/*************************************************************************************
** Function name: SysTick_Configuration
** Descriptions: 配置系统滴答定时器SysTick
*************************************************************************************/
void SysTick_Configuration(void)
{
DrvSYS_SelectSysTickSource(0); // 为SYSTICK选用外部12M晶振
SysTick->CTRL = 0x00000003; //[SYST_CSR]向下计数到0将引起SysTick 异常而挂起(进入中断) 计数器运行
SysTick->VAL = 0x00000000; //[SYST_CVR]该向SYST_CVR寄存器写入0样确保定时器以SYST_RVR中的值计数,而非任意值
SysTick->LOAD = 55100; //about 5ms(Normally,this value is 60000,but in fact 55100 is better)
// printf("SysTick 初始完成!!\n");
}
/*************************************************************************************
** Function name: SysTick_Handler
** Descriptions: 系统滴答定时器SysTick中断函数
** Remark: 5ms计数一次
*************************************************************************************/
void SysTick_Handler(void)
{
Time10msCounter++;
Time20msCounter++;
if(Time10msCounter == 2)
{
Time10msCounter = 0;
Time10ms_f = TRUE;
}
if(Time20msCounter == 4)
{
Time20msCounter = 0;
Time20ms_f = TRUE;
}
}//SysTick_Handler
void v10msServe(void)
{
if(Time10ms_f)
{
Time10ms_f = FALSE;
//Add 10ms function here
}
}//v10msServe
void v20msServe(void)
{ if(Time20ms_f)
{
Time20ms_f = FALSE;
v1sDriver();
v1sServe();
//Add 20ms function here
}
}//v20msServe
void v1sServe(void)
{
if(Time1s_f) //1s
{
Time1s_f = FALSE;
vLED_Scroll();
//Add 1s function here
}
}//v1sServe
void v1sDriver(void)
{
Time1sCounter++;
if(Time1sCounter == 50)
{
Time1sCounter = 0;
Time1s_f = TRUE;
}
}//v1sDriver
裸奔 By Metalor.rar
(1.53 MB)
|