电子发烧友网 > 控制/MCU > 正文

AVR单片机c程序设计编程时常见的问题总结分析

2018年11月01日 16:03 ? 次阅读

这两天在用AVR单片机做项目,这次是边做边深入学,尽量将以前忽略的知识用上,比如指针、文件包含、条件编译、变量作用域等一一调研清楚。收获不少,再次体会到学习的过程中没有无用的地方。用的越深入,才发现学时以为没用的东西都是最有用的,因为都被忽略了。幸亏学习时候的最重要的《c程序设计》如果不能解决,就找编译器的问题。这是这段时间总结的经验。

AVR单片机c程序设计编程时常见的问题总结分析

一、函数指针

1.int (*func)(void)--基本函数指针变量定义方式,变量func是一个指向返回值为int,没有参数的函数指针,这与其他变量定义有点区别,一般是把变量名放最后,如int a,而函数指针比较不直观,

2.typedef int(*ftype)(void); ftype func;--类型重定义方式,先定义一种新的类型ftype,它是一种指针类型,这种类型专门指向返回值为int,没有参数的函数,再通过该类型定义一个具体的变量func

3.func=functionName--函数指针赋值,funcTIonName为已经定义的函数的函数名

4.(*func)()--通过函数指针调用函数,也可以直接调用func(),

5.函数指针的一般作用:刚学函数指针的时候感觉没啥用,在接触操作系统以及一些消息、事件驱动的机制以后意识到它的意义。简单的讲如果希望在发生某种事件、中断等情况下不希望主程序再去查看、扫描做判断,而是自动执行某个功能函数时候,可以使用回调函数实现。如每次按下键盘都让某个灯亮,可以将亮灯的函数指针传递给按键中断函数,由中断内部自动调用。这是比较简单的应用,肯定可以直接用一个函数代替,但是一旦希望在执行过程中修改该消息、中断响应的操作的话,用函数指针就方便多了。在正常的程序执行过程中,调用方一般都是遇到函数就立即执行。而回调函数则是调用方通过函数指针的形式把函数储存起来。这样在合适的实际调用方就可以通过这个函数指针执行某个功能。回调函数可以说是一种订阅、分发的机制。被调用方可以通过订阅的形式将自己的处理函数以函数指针的形式交给调用方。当调用方需要执行这个回调函数的时候,就会通过分发的形式回调被调用方。回调函数的机制可以说无处不在,比如Channie Liu 所说的MFC消息机制,再比如HOOK,等等都是通过回调函数机制来执行的。但是回调函数并不是系统独有的机制。你完全可以在自己的程序中通过函数指针来实现一套回调函数。还有回调函数并不是面向对象编程,在某些情况下可以使用观察者模式来代替它。在.net中已经使用是事件的方式代替了回调函数来实现消息相应。

6.avr编程中要注意不是所有的编译器都能很好的支持函数指针,使用以及查资料发现ICCAVR7.1某个版本在编译后的代码进行仿真发现程序总是跑飞,查看汇编发现生成一个EIJMP指令(扩展间接跳转指令),后来尝试换用最新版7.21A版本,发现这个编译后就没这个指令,可以正常仿真了。同时CodeVision也有这个版本的问题。

二、头文件包含

以前一直以为对这个很理解,没太在意,虽然也犯了几次错误,但都没有深究,这次又复习了一下“谭浩强”发现还是有根本的误解的。在对头文件理解之前需要理解编译过程。编译是以源文件为单位,也就是*.c或*.c++等,生成的目标文件也是与源文件对应的。而头文件的作用是把可能公用的声明放在一起,被源文件包含后,在编译的过程中可以理解为直接加在源文件的内部,而且添加的顺序与源文件的include语句顺序对应。所以如果A.c包含B.h,而B.h又用到C.h内容,但B.h本身没包含则在A.c中要注意先包含C.h再包含B.h。另外就是变量的定义,即需要申请内存占用内存这样的语句不能放在可能被多处包含的头文件中,这样会引发多次定义的错误。这个问题我一直以为在头文件的开始和结尾有个#ifndef语句就万事大吉了,后来才知道不是那么回事。#ifndef语句只是为了在A包含B,A包含C,B包含C这样情况下阻止C被两次包含,而如果还有一个D也包含C的话那么A与D两个源文件编译后的代码中都会对C中的变量进行定义的,从而造成变量多次定义。

三、条件编译

这个没太多用过,直到最近想把单片机的程序写的更通用一些,尽量能抽象出来一些公用的函数,可以在各个硬件平台使用,免去不少的重复工作。如串口通讯在51下,在avr下都写过,但是每次都是现用现写,现在想尽量把每种功能硬件相关部分提炼出来,并压缩到最小。这里面就需要用到条件编译对各种平台进行判断,对每种功能进行控制。看过嵌入式linux内核的应该都发现这个特点了,那就是成篇的条件编译。

四、变量作用域

我最常犯的就是全局变量与静态变量的错误使用。具体可以看“谭浩强”,这里只说明一下常用的全局变量的使用。有时候希望一个公共变量能在各个源文件访问,或者作为某种信号、开关使用。就需要在某个源文件中定义,然后在其他需要用到的地方使用extern关键字。如果需要用的地方太多,就在头文件中使用extern声明该变量,在其他源文件中包含该头文件即可。

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

基于AVR单片机实现超声波测距的程序编写

#include #defineucharunsignedchar #defineuin...

发表于 2018-10-29 15:37 ? 51次阅读
基于AVR单片机实现超声波测距的程序编写

单片机内没有程序,电脑是如何通过接口访问内部ro...

1、把单片机当做一个ROM芯片,早期的单片机都是如此。将单片机放在通用编程上编程时,就像给28C25...

发表于 2018-10-26 15:48 ? 88次阅读
单片机内没有程序,电脑是如何通过接口访问内部ro...

AT90USB1287资料

发表于 2018-10-26 13:03 ? 167次阅读
AT90USB1287资料

基于AVR单片机熔丝位的设置经验分享

RSTDISBL:复位或I/O功能选择11:复位功能;0:I/O功能(PC6) WDTON:看...

发表于 2018-10-22 15:17 ? 76次阅读
基于AVR单片机熔丝位的设置经验分享

简介郭天祥及人物经历

郭天祥1983年出生于新疆伊宁,曾就读于哈尔滨工程大学,后接触单片机,已成为单片机领域的知名人士。名...

发表于 2018-10-19 08:32 ? 172次阅读
简介郭天祥及人物经历

AVR单片机的CPU内核结构及汇编语言

AVR采用了Harvard结构,具有独立的数据和程序总线,CPU在执行一条指令的同时,就将PC中指定...

发表于 2018-10-17 16:39 ? 92次阅读
AVR单片机的CPU内核结构及汇编语言

AVR单片机定时器的5种工作类型

一 普通模式 WGM1=0跟51的普通模式差不多,有TOV1溢出中断标志,发生于MAX(0xFFFF...

发表于 2018-10-15 17:25 ? 79次阅读
AVR单片机定时器的5种工作类型

关于STM32的IAP教程的注意事项

发表于 2018-10-11 11:59 ? 149次阅读
关于STM32的IAP教程的注意事项

高性能单片机Mega64和10Mb/s以太网控制...

微控制器选用高性能的AVR单片机Mega64,AVR是ATMEL公司结合了成熟的51系列和PIC系列...

发表于 2018-09-29 16:25 ? 153次阅读
高性能单片机Mega64和10Mb/s以太网控制...

怎样制作AVR单片机ISP下载线

下面介绍利用Protel99se电路绘图软件和热转印技术制作这种下载线的方法和步骤。

发表于 2018-09-21 10:12 ? 376次阅读
怎样制作AVR单片机ISP下载线

基于AVR单片机的常见问题解答

所有的C 编译器均已在ATMEL 网站上有关第三方工具供应商的网页上列出;ATMEL 公司在它的网站...

发表于 2018-09-18 16:52 ? 172次阅读
基于AVR单片机的常见问题解答

avr的pwm的事

发表于 2018-09-12 19:45 ? 185次阅读
avr的pwm的事

STC单片机的特性及缺点解析

STC单片机是高速、低功耗、超强抗干扰的新一代8051单片机51单片机,指令代码完全兼容传统8051...

发表于 2018-09-10 17:07 ? 424次阅读
STC单片机的特性及缺点解析

AVR单片机的特点及缺点解析

AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指...

发表于 2018-09-10 17:03 ? 216次阅读
AVR单片机的特点及缺点解析

性能稳定,传输效率高的AVR单片机OTG主从机系...

Philips公司的ISP1362是一款符合USB 2.0总线协议的接口芯片,内部有3个USB控制器...

发表于 2018-08-27 17:31 ? 230次阅读
性能稳定,传输效率高的AVR单片机OTG主从机系...

以AVR单片机为核心控制器的可预置程控宽带直流功...

输入有效值为10 mV的正弦波,输出接50 Ω负载,将放大器增益设置为60 dB,分别预置截止频率为...

发表于 2018-08-27 17:14 ? 161次阅读
以AVR单片机为核心控制器的可预置程控宽带直流功...

以AVR单片机为控制核心的数字正弦逆变电源设计

其中,PSCOUT00~PSCOUT21 引脚为SPWM 波输出引脚,用来驱动功率开关管,SD 引脚...

发表于 2018-08-09 16:49 ? 120次阅读
以AVR单片机为控制核心的数字正弦逆变电源设计

利用单片机控制步进电机的轮胎模具内径测量系统设计

系统采用AVR单片机实现控制步进电机和光栅尺数据读取,通过接收上位机的控制命令,AVR单片机控制步进...

发表于 2018-08-03 10:04 ? 59次阅读
利用单片机控制步进电机的轮胎模具内径测量系统设计

以AVR单片机为控制电路核心的全自动太阳能工程热...

键盘输入部分可用4*4 按键组成0~ 9 数字键及确认键, 8 位数码管组成显示电路提示信息。单片机...

发表于 2018-08-01 09:42 ? 52次阅读
以AVR单片机为控制电路核心的全自动太阳能工程热...

基于AVR单片机的低成本真随机数发生器设计

其原理如图1所示。主要原理是利用串联RC电路的不确定性产生真随机数源,收集数据,通过AVR单片机AT...

发表于 2018-08-01 07:31 ? 29次阅读
基于AVR单片机的低成本真随机数发生器设计

AVR单片机解密技术分析

一般说来,AVR与传统类型的单片机相比,在IC芯片解密技术中除了必须能实现原来的一些基本的功能,其在...

发表于 2018-07-31 17:30 ? 1004次阅读
AVR单片机解密技术分析

怎样设计一个基于AVR单片机的SPI串行外设接口...

串行外设接口SPI允许ATmega16和外设之间进行高速的同步数据传输。ATmega16SPI的特点...

发表于 2018-07-24 07:15 ? 107次阅读
怎样设计一个基于AVR单片机的SPI串行外设接口...

如何设计一个以AVR单片机为核心的安全工器具监控...

主控板需要控制4个数据采集板,作用于同一个安全工器具柜。采用红外线反射式检测方法来对安全工器具离就位...

发表于 2018-07-23 08:27 ? 79次阅读
如何设计一个以AVR单片机为核心的安全工器具监控...

怎样利用AVR单片机来测试蓄电池的剩余电量?

具体实施的方法是:将蓄电池充满电(以12V蓄电池为例,充电至13.8V,浮充电流至10mA。)然后以...

发表于 2018-07-23 08:07 ? 98次阅读
怎样利用AVR单片机来测试蓄电池的剩余电量?

AVR单片机在小型工业控制系统的抗干扰研究设计

由于限位开关及馈线与 220V交流负载比较靠近,因此,负载产生的交流强磁场直接对限位开关及馈线产生干...

发表于 2018-07-19 07:13 ? 69次阅读
AVR单片机在小型工业控制系统的抗干扰研究设计

基于AVR单片机的PT2262软件解码程序分享

发表于 2018-07-19 01:35 ? 188次阅读
基于AVR单片机的PT2262软件解码程序分享

51单片机和AVR单片机有什么区别

51单片机和AVR单片机的部分区别

发表于 2018-07-15 09:33 ? 478次阅读
51单片机和AVR单片机有什么区别

avr单片机八位流水灯程序

发表于 2018-07-09 09:00 ? 200次阅读
avr单片机八位流水灯程序

mega8-8L mega16-16L mega32-32L AVR单片机芯片中文pdf手册下载

发表于 2018-07-09 05:13 ? 208次阅读
mega8-8L mega16-16L mega32-32L AVR单片机芯片中文pdf手册下载

AVR单片机功能特性介绍

发表于 2018-07-09 04:47 ? 110次阅读
AVR单片机功能特性介绍

Proteus仿真AVR单片机ATMega8实例教程

发表于 2018-07-09 04:34 ? 251次阅读
Proteus仿真AVR单片机ATMega8实例教程

avr单片机汇编参考程序

发表于 2018-07-09 00:29 ? 132次阅读
avr单片机汇编参考程序

avr单片机使用注意点汇总

发表于 2018-07-04 07:45 ? 144次阅读
avr单片机使用注意点汇总

Microchip推出两款全新tinyAVR? ...

ATtiny3217和ATtiny3216是Microchip tinyAVR? 产品系列中存储器最...

发表于 2018-07-03 14:33 ? 1936次阅读
Microchip推出两款全新tinyAVR? ...

初学者如何玩转ARM,举一反三

明白ARM板子中除集成IC之外的元器件的作用,最常见的是电容作用、驱动LED呀、扬声器呀、串口连接、...

发表于 2018-06-18 07:16 ? 285次阅读
初学者如何玩转ARM,举一反三

舵机驱动电路原理图_基于AVR单片机的舵机驱动电...

舵机( servo motor),又名伺服电机,主要是由外壳、电路板、马达、减速齿轮和电位器构成。舵...

发表于 2018-05-30 15:17 ? 3258次阅读
舵机驱动电路原理图_基于AVR单片机的舵机驱动电...

关于低频数字式相位仪的设计方案

基于AVR单片机与FPGA的低频数字式相位测量仪设计 在工业领域中经常要用到低频数字式相位仪来精确测...

发表于 2018-05-03 14:33 ? 568次阅读
关于低频数字式相位仪的设计方案

AVR单片机生成负压的原理解析

红外测温传感器的输出是一个mV级的电压信号,大约在室温下(26℃左右)输出0电压,温度再低就是负电压...

发表于 2018-05-01 09:32 ? 344次阅读
AVR单片机生成负压的原理解析

AVR单片机定时计数器学习笔记分享

定时计数器的结构与应用定时计数器(Timer/Counter)常用于计数、延时、测量 周期、频率、脉...

发表于 2018-04-26 14:18 ? 1081次阅读
AVR单片机定时计数器学习笔记分享

AVR单片机复位检测 如何识别复位条件

AVR复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。复位向量处的 指令必须是...

发表于 2018-04-25 15:39 ? 966次阅读
AVR单片机复位检测 如何识别复位条件

AVR单片机读写CPLD程序实例(ATmega1...

分享到 项目中需要使用CPLD完成一部分算法设计,参数由AVR给出,因此需要完成AVR和CPLD的通...

发表于 2018-04-19 12:40 ? 1514次阅读
AVR单片机读写CPLD程序实例(ATmega1...

avr单片机工作经验总结

本文主要介绍了avr单片机工作经验总结以及avr单片机结构特点。AVR单片机ATmega16的主要特...

发表于 2018-03-30 11:18 ? 969次阅读
avr单片机工作经验总结

小功率永磁同步电机无速度传感控制器

在传统的交流矢量变换控制系统中,速度传感器是必不可少的。对于普通的交流电机,速度传感器的作用有三:其...

发表于 2018-03-21 15:11 ? 201次阅读
小功率永磁同步电机无速度传感控制器

基于AVR芯片的光照和CO2控制系统分析

该系统先测量光照强度,根据在相应的光照条件下二氧化碳的测量值与相应生长期的各环境因子的最高、最低值比...

发表于 2018-03-14 10:48 ? 241次阅读
基于AVR芯片的光照和CO2控制系统分析

vr在生活中的应用案例分析

近年来, 随着计算机技术、交互技术和人工智能等相关技术的快速发展,虚拟现实技术取得了巨大的进步,以此...

发表于 2018-03-08 08:51 ? 2851次阅读
vr在生活中的应用案例分析

如何让你的AVR单片机功耗超低

四年多前整过一次低功耗的,当时调试也是OK的,程序基本上是移植过来了。 这次重新改动一下,做了,本以...

发表于 2018-02-20 18:53 ? 1055次阅读
如何让你的AVR单片机功耗超低

基于AVR单片机的节能电梯介绍

一、项目概述 1.1 引言 随着社会的发展,高层建筑和智能化建筑的不断出现,作为垂直运输工具的电梯得...

发表于 2018-02-20 16:57 ? 208次阅读
基于AVR单片机的节能电梯介绍

AVR单片机8位数码管显示的程序实现(两种方法介...

本文为大家介绍两个AVR单片机8位数码管显示的程序实现。

发表于 2018-01-29 10:53 ? 1972次阅读
AVR单片机8位数码管显示的程序实现(两种方法介...

avr单片机选型指南

AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高...

发表于 2018-01-29 10:23 ? 520次阅读
avr单片机选型指南

avr单片机功能特性介绍

RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类...

发表于 2018-01-29 09:35 ? 312次阅读
avr单片机功能特性介绍

avr单片机几个主要优点

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC 精简指令集高速8位单...

发表于 2018-01-29 09:04 ? 1191次阅读
avr单片机几个主要优点

巧用avr单片机设计轮胎内径测量系统

轮胎模具 用于成型轮胎,其加工质量对轮胎的生产非常重要。为了生产出好的轮胎,必须对轮胎模具加工质量提...

发表于 2017-12-12 09:05 ? 2143次阅读
巧用avr单片机设计轮胎内径测量系统

avr单片机和stm32区别与优缺点分析

摘要:avr单片机和stm32单片机是目前使用较广泛的单片机,那么avr单片机和stm32单片机有什...

发表于 2017-12-10 10:31 ? 14408次阅读
avr单片机和stm32区别与优缺点分析

avr单片机c语言编程风格介绍

摘要:作为一个初学者如何具有良好的程序设计风格呢?下面小编将以avr单片机介绍它的c语言编程风格。

发表于 2017-12-10 10:08 ? 1080次阅读
avr单片机c语言编程风格介绍

详解avr单片机的io原理及作用

为搞清IO 结构 ,首先看看上拉和下拉电阻的作用。 一、上拉电阻 上拉就是将不确定的信号通过一个电阻...

发表于 2017-11-27 14:54 ? 2651次阅读
详解avr单片机的io原理及作用

AVR单片机如何在编写程序里就配置好熔丝位?

在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)...

发表于 2017-11-22 17:40 ? 389次阅读
AVR单片机如何在编写程序里就配置好熔丝位?

AVR单片机的主要特性

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced In...

发表于 2017-11-17 14:41 ? 198次阅读
AVR单片机的主要特性

avr单片机用什么编程?avr单片机编程方式是什...

本节将详细介绍AVR单片机的流行编程方式,并略述其工作原理,旨在让AVR爱好者根据自己的需要选择或制...

发表于 2017-11-16 16:33 ? 3626次阅读
avr单片机用什么编程?avr单片机编程方式是什...

AVR单片机有什么优点_为什么要选择AVR单片机

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced In...

发表于 2017-11-15 14:17 ? 361次阅读
AVR单片机有什么优点_为什么要选择AVR单片机

avr单片机和stm32区别

单片机的发展相当的迅速,现在各个厂商们也在速度、内存、功能上此起彼伏,竞争激烈,同时涌现出一大批拥有...

发表于 2017-11-12 09:30 ? 1259次阅读
avr单片机和stm32区别

单片机定时器初值计算公式(51单片机和AVR单片...

单片机定时器初值计算公式 一、51单片机定时器初值计算 1、方法一 void main(void) ...

发表于 2017-11-09 17:17 ? 4896次阅读
单片机定时器初值计算公式(51单片机和AVR单片...

avr单片机和stm32区别,avr单片机选型技...

每种MCU都有自身的优点与缺点,与其它8-bit MCU相比,avr 8-bit MCU最大的特点是...

发表于 2016-10-12 16:17 ? 3132次阅读
avr单片机和stm32区别,avr单片机选型技...

AVR掉电保护电路设计图剖析 —电路图天天读(2...

AVR自带的BOD电路,作用是在电压过低(低于设定值)时产生复位信号,防止CPU意外动作。对EEPR...

发表于 2015-08-11 18:00 ? 1956次阅读
AVR掉电保护电路设计图剖析 —电路图天天读(2...

太神奇了,水果居然能驱动AVR单片机?

本来觉得水果电池驱动LCD只是展示会上的噱头,三片柠檬的电力,应该足够带动LCD的。

发表于 2015-03-23 14:53 ? 3212次阅读
太神奇了,水果居然能驱动AVR单片机?

AVR单片机硬件电路设计方法详解 —电路图天天读...

Mega16已经内置了上电复位设计,并且在熔丝位里,可以控制复位时的额外时间,故AVR外部的复位线路...

发表于 2015-02-10 15:50 ? 16012次阅读
AVR单片机硬件电路设计方法详解 —电路图天天读...

揭秘AVR单片机高性能便携式仪表电路 —电路图天...

本文以AVR单片机ATXmega128A1为核心,设计了一种高可靠、低功耗、多用途的便携式仪表电路,...

发表于 2014-12-25 10:41 ? 1736次阅读
揭秘AVR单片机高性能便携式仪表电路 —电路图天...

设计干货精选:AVR单片机工业控制方案合集

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced In...

发表于 2014-12-24 15:18 ? 3399次阅读
设计干货精选:AVR单片机工业控制方案合集

AVR单片机语音识别电路模块设计

控制器选用Atmel公司生产的ATMEGA128芯片,采用先进的RISC结构,内置128 KB FL...

发表于 2014-12-15 15:00 ? 1617次阅读
AVR单片机语音识别电路模块设计

示波器戴着用 鬼才工程师示波器手表设计电路曝光

Gabotronics公司曾经推出了引人注目的微型Xprotolab示波器。现在Anzziani又开...

发表于 2014-09-29 13:39 ? 18496次阅读
示波器戴着用 鬼才工程师示波器手表设计电路曝光

基于AVR单片机的医用智能输液系统

本系统是一种非接触式全自动的静滴检测和报警控制装置,时刻检测液体的滴速,并且在药液滴完后能够自动地切...

发表于 2014-09-04 09:43 ? 1098次阅读
基于AVR单片机的医用智能输液系统
a计划博彩 a计划博彩,连环夺宝注册送,唯品会注册送60元