期待其他理解和阐释,,,
吹逼...
假如给我们一个很小的任务,写一颗LED灯的驱动程序,你会怎么做呢?
按照常规思想就开始Delay了,嗯!先闪:
LED_Display(N)
{
LED1=~LED1;
Delay(N秒);
}
这么闪还没意思,要想怎么闪就怎么闪,频率自己定,总时间自己定,还要有闪的时间和灭的时间不一样,于是有了:
LED_Display(ontime,offtime,alltime)
{
int n;
n=alltime/(ontime+offtime);
for(i=0;i<n;i++)
{
LED_ON;
Delay(ontime);
LED_OFF;
Delay(offtime);
}
}
程浥 发表于 2016-5-7 15:53
吹逼...
假如给我们一个很小的任务,写一颗LED灯的驱动程序,你会怎么做呢?
但是Delay相当占系统时间,白白浪费资源你得被骂死,于是我们要采用定时器和中断:
暂时就定个10ms中断好了:
中断不能带参数,看来得用全局变量了。
ontime ,offtime,alltime.来来来,我们给它初始化一下.
void LEDInit(u32 ontime ,u32 offtime,u32 alltime)
{
static u32 m_ontime,m_offtime,m_alltime;
//统统滴 读进来
}
下面就是写中断处理了:
void __Timer0Int(void)
{
//10ms重载
LEDProcess();
}
void LEDProcess(void)
{
static u32 allcount,ncount;
m_count+=10;
if(allcount>alltime)
{
//任务结束
//看起来这里还要设个标志
}
else
{
//燥起来
ncount+=10;
if(ncount>m_ontime)
{
LED_ON;
ncount=0;
//看起来还要设个交替的标志
}
else
{
LED_OFF;
ncount=0;
}
}
}
void LEDInit(u32 ontime ,u32 offtime,u32 alltime)
{
static u32 m_ontime,m_offtime,m_alltime;
//统统滴 读进来
}
程浥 发表于 2016-5-7 16:15
但是Delay相当占系统时间,白白浪费资源你得被骂死,于是我们要采用定时器和中断:
暂时就定个10ms中 ...
东西是这样摸索过来的,要是我们一开始就想好了就好了。
我也想啊。
那么问题就来了。
我们一开始的任务是写一个led驱动的代码。
就LED灯这个对象,我们要分析下它的属性。
面向对象 程浥 发表于 2016-5-7 16:51
东西是这样摸索过来的,要是我们一开始就想好了就好了。
我也想啊。
继续啊
页:
1
[2]