重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
打印 上一主题 下一主题

开个贴,不定时更新对单片机编程的理解

[复制链接]

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
11#
 楼主| 发表于 2016-4-8 18:24:18 | 只看该作者
最近打算研究pixhawk飞控,但是这个飞控对windows环境下的编译支持不怎么好,搭建个开发环境花了好大功夫,这才感觉到keil  MDK有多么好用
回复 支持 反对

使用道具 举报

16

主题

75

帖子

863

积分

版主

Rank: 7Rank: 7Rank: 7

积分
863
QQ
12#
发表于 2016-5-7 15:53:44 | 只看该作者
张金权-11级电子 发表于 2016-3-28 12:08
期待其他理解和阐释,,,

吹逼...
假如给我们一个很小的任务,写一颗LED灯的驱动程序,你会怎么做呢?

按照常规思想就开始Delay了,嗯!先闪:

[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
LED_Display(N)
{
    LED1=~LED1;
    Delay(N秒);
}


这么闪还没意思,要想怎么闪就怎么闪,频率自己定,总时间自己定,还要有闪的时间和灭的时间不一样,于是有了:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
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);
    }
}


回复 支持 反对

使用道具 举报

16

主题

75

帖子

863

积分

版主

Rank: 7Rank: 7Rank: 7

积分
863
QQ
13#
发表于 2016-5-7 16:15:16 | 只看该作者
程浥 发表于 2016-5-7 15:53
吹逼...
假如给我们一个很小的任务,写一颗LED灯的驱动程序,你会怎么做呢?

但是Delay相当占系统时间,白白浪费资源你得被骂死,于是我们要采用定时器和中断:

暂时就定个10ms中断好了:

中断不能带参数,看来得用全局变量了。

ontime ,offtime,alltime.来来来,我们给它初始化一下.
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void LEDInit(u32 ontime ,u32 offtime,u32 alltime)
{
	static u32 m_ontime,m_offtime,m_alltime;
	//统统滴 读进来
}


下面就是写中断处理了:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
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;
	//统统滴 读进来
}

回复 支持 反对

使用道具 举报

16

主题

75

帖子

863

积分

版主

Rank: 7Rank: 7Rank: 7

积分
863
QQ
14#
发表于 2016-5-7 16:51:45 | 只看该作者
程浥 发表于 2016-5-7 16:15
但是Delay相当占系统时间,白白浪费资源你得被骂死,于是我们要采用定时器和中断:

暂时就定个10ms中 ...

东西是这样摸索过来的,要是我们一开始就想好了就好了。

我也想啊。

那么问题就来了。

我们一开始的任务是写一个led驱动的代码。
就LED灯这个对象,我们要分析下它的属性。

面向对象
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
15#
 楼主| 发表于 2016-5-10 09:09:40 | 只看该作者
程浥 发表于 2016-5-7 16:51
东西是这样摸索过来的,要是我们一开始就想好了就好了。

我也想啊。

继续啊                                                  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-12-22 11:22 , Processed in 0.168357 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表