AVR-GCC如何调用存储于Flash中的指向函数的指针

发布者:楼高峰最新更新时间:2016-01-13 来源: eefocus关键字:AVR-GCC  Flash  指向函数  指针 手机看文章 扫描二维码
随时随地手机看文章
//---------------------------------------------------------------
// 功能:演示AVR-GCC如何调用存储于Flash中的指向函数的指针 (摇摆灯)
//---------------------------------------------------------------
#include
#include
#include
void ledrun(void);
typedef struct
{
void (*pFun)(void);
}Function;
const Function function PROGMEM={ledrun};
void ledrun(void)
{
static unsigned char light_on=0x01;
static unsigned char light_ddr=0;
PORTD=light_on;

if (light_ddr==0)
{
  if (light_on==0x80)light_ddr=1;
  else light_on<<=1;
}

else
{
  if (light_on==0x01)light_ddr=0;
  else light_on>>=1;
}

_delay_ms(50);
}

int main(void)
{
PORTD=0;
DDRD=~0;

//void (*pFun)(void) =ledrun;

while (1)
{
  //pgm_read_word(&function.pFun);
  (*((void(*)(void))pgm_read_word(&function.pFun)))(); //别的没什么说,关键就在这里了
}

return 0;
关键字:AVR-GCC  Flash  指向函数  指针 引用地址:AVR-GCC如何调用存储于Flash中的指向函数的指针

上一篇:关于正确配置AVR熔丝位
下一篇:AVR编程_如何用C语言设置,清除和检查是否置位I/O

推荐阅读最新更新时间:2024-03-16 14:43

指针式功率表测量误差修正方法
在通电测量时,由于功率表电流回路或电压回路要产生电压降或分流功率,所以将对测量值带来一定的误差△p,使仪表显示值pb略大于实际值pf。这种误差属于“方法误差”。当该误差值占测量值的比例较大足以影响测量结果,或要求精密测量时,应对这些误差进行修正。下面以较简单的单相电路来介绍修正办法。其他电路可参照进行。 (1)电压前接法单相电路功率表误差的修正 对电压前接法电路,功率表电压测量中包括负载的电压降和功率表电流回路的电压降两部分。后一部分与负载电流相互作用产生的功率即是功率表的方法误差△p。可用下式求取负载功率的实际值pf。损耗和功率单位为w。 pf=pb-ap-pb-i2ra (1) 式中i-通过负载的电流(也是通过功率表电
[测试测量]
<font color='red'>指针</font>式功率表测量误差修正方法
指针式万用表和数字万用表的选用
指针式万用表和数字万用表的选用: 1、指针式万用表读数精度较差,但指针摆动的过程比较直观,其摆动速度幅度有时也能比较客观地反映了被测量的大小,数字万用表读数直观,但数字变化的过程看起来比较无序,不太容易观看。 2、指针式万用表内一般有两块电池,一块1.5V的低电压,一块是9V或15V的高电压,其黑表笔为正端。数字万用表通常用一块6V或9V的电池。在电阻档,相对于数字万用表来说指针式万用表表笔输出电流要大很多。 3、在电压档,指针式万用表内阻相对数字万用表来说比较小,测量精度相对较差。某些高电压微电流的场合甚至无法测准,因为其内阻会对被测电路造成影响。数字万用表电压档的内阻很大,至少在兆欧级,对被测电路影响很小。但极高的输出阻抗使
[测试测量]
学习STM32C语言要达到什么水平?
学到可以看懂这句代码 *(unsigned int *)0X00000800=16; 学到可以看懂标准库(结构体、枚举、宏定义、函数形参为结构体变量的情况该怎么传值) 学到可以理解指针是C语言的精髓学到可以理解内存的重要性 而要做到这些你只需要看下面的三个视频AV50963968 AV50868642 AV80340721 吹爆我大B站 下面总结了一些操作! 1) 不改变其他位的值的状况下,对某几个位进行设值。 这个场景单片机开发中经常使用,方法就是先对需要设置的位用&操作符进行清零操作, 然后用|操作符设值。比如我要改变 GPIOA 的状态,可以先对寄存器的值进行&清零操作 GPIOA- CRL&=0XFFFFFF0F; //将
[单片机]
一种验证指针程序的方法
随着国家、社会和日常生活对软件系统的依赖程度日益增长,安全攸关软件的高可信成为保障国家安全、保持经济可持续发展和维护社会稳定的必要条件。  形式验证是提高软件可信程度的重要方法。粗略地说,软件的形式验证有两种途径,第一种是模型检测,它通过遍历系统所有状态空间,能够对有穷状态系统进行自动验证,并自动构造不满足验证性质的反例。这种方法在工业界较流行。第二种是逻辑推理,它利用某种程序逻辑进行演算,对程序性质进行严格的推理,产生验证条件,再利用定理证明器进行证明。本文所讨论的方法是基于逻辑推理的方式。  对于指针程序的推理,关键在于别名的判断和处理。通常所采用的Hoare逻辑的一个重要限制是程序中不同的名字代表不同的程序对象,即不允许出
[工业控制]
一种验证<font color='red'>指针</font>程序的方法
指针万用表测量彩管灯丝电压的“三个必须”
只要在测量彩管灯丝电压时,坚持“三个必须”原则,那么各种彩电的灯丝电压将是一个统一的固定值。 第一, 必须直接测量灯丝电压。即在管座的灯丝两脚上测量,而不是在行输出变压器的灯丝绕组两脚上测量。这是因为各种彩电的灯丝回路里都串有一只(或两只)电阻,阻值各异,有的是3.9Ω,有的是1Ω……不同彩电的行输出变压器灯丝绕组输出的电压不一样,是靠串联不同的阻值的限流来配合,才能使灯丝的电压降符合要求。 第二, 必须测量两次。第二次测量时必须将两表笔调换位置。假设第一次测量时红笔接A脚,黑笔接B脚。这样就会得到两个不同的电压得数,试把读数较高的叫“大值”,把读数较低的叫“小值”。这里规定,灯丝电压都是指大值。为什么两次测量结果不同呢?因为
[测试测量]
MSP430单片机的FLASH与存储器结构(1)
简介: 我们这节课的主要内容有: ·存储器结构 ·片内ROM组织 ·RAM和外围模块组织 ·FLASH存储器 ·FLASH操作程序设计 1,存储器结构 1.1存储空间的组织结构 我们先来看一下MSP430的存储空间的组织结构,大家可以看到,MSP430是按照64K的存储空间来处理的,只不过不同型号的单片机它内部的容量发生了一些变化。像有些单片机RAM会很大,flash想回会小一些;还有一些flash和RAM都很小,中间空出来的就是作为保留区域,像我们使用的这个149单片机的话,使用的60K的flash,flash空间就是从0FFFFh-01100h。还有就是1K的启动ROM,然后这是RAM的地址,然后下面这里的地址都是
[单片机]
MSP430单片机的<font color='red'>FLASH</font>与存储器结构(1)
第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列
本章参考资料:《STM32F4xx 中文参考手册》、《STM32F4xx规格书》、库说明文档《stm32f4xx_dsp_stdperiph_lib_um.chm》以及《Proprietary code read-out protection on microcontrollers》。 51.1 选项字节与读写保护 在实际发布的产品中,在STM32芯片的内部FLASH存储了控制程序,如果不作任何保护措施的话,可以使用下载器直接把内部FLASH的内容读取回来,得到bin或hex文件格式的代码拷贝,别有用心的厂商即可利用该代码文件山寨产品。为此,STM32芯片提供了多种方式保护内部FLASH的程序不被非法读取,但在默认情况下该保护功
[单片机]
第51章 设置<font color='red'>FLASH</font>的读写保护及解除—零死角玩转STM32-F429系列
stm32系统存储器中自举程序和flash中bootloader的区别
stm32的系统存储器中烧写了ST的自举程序并被锁死,防止用户擦写。此自举程序用于在应用编程,例如正点原子的usb转串口硬件和flymcu软件,通过它们就可以将程序烧写至flash。 而大多数人说的bootloader是指自己编写的bootloader程序并被烧写至flash的起始位置(stm32为0x8000000),通过此程序更新app程序。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved