在IAP的bootloader中经常使用到地址跳转,指定程序跳转到某一地址运行,例如强制跳转到0x2c去执行,则可使用(*((void (*)(void))0x2c)))();
实际上这是运用的函数指针,可以这样分解:
1,函数指针的定义为 void (* fd) (void); 省略参数的函数原型为
void (*)(void).
2, 0x2c, 这里的0x2c为地址,可以认为是变量(个人理解),可以理解为将变量0x2c进行强制类型转换,转换成函数指针类型,即( void(*)(void) )0x2c.
3,调用函数。 (* (func) ) (); func 为函数指针(void(*)(void) )0x2c, 合起来就是 (* ( (void(*)(void) )0x2c) )();
关键字:绝对地址 IAP bootloader
引用地址:
跳转到绝对地址执行
推荐阅读最新更新时间:2024-03-16 14:44
基于S3C6410的ARM11学习(十八) 移植printf和scanf
在学c语言的时候,经典的hello world程序,是通过printf函数实现了。有了这个函数,就可以随意的向屏幕打印数据了。在嵌入式中,其实也是可以用printf函数的,不过需要稍微麻烦点的移植。毕竟,在嵌入式中,所有实现的都要自己来弄,不在向PC程序开发一样,很多库函数,操作系统已经搞好,就用就行了。 首先,是要去下载能实现printf的源代码。这里用的是国嵌提供的。有两个文件夹,一个include,里面一些头文件,另外一个lib,实现printf的需要的额外的程序。 中间的是inlcude中的头文件,下边是lib中的文件。 在lib中有一个Makefile。这个Makefile
[单片机]
Stm32F030用Coocox工程进行Bootloader升级时程序跑飞
最近做STM32F030C8的Bootloader升级,使用的是Coocox的工程,发现Bootloader可以正常跳转,但是到应用程序时,就直接跑飞,经过仔细查看,发现是中断向量表没有映射,但是在把中断向量表映射后,程序依旧跑飞。一直自己找了好几天,在Nick的帮助下,终于解决了,方法如下: 1、在Bootloader里设置跳转: /* Jump to user application */ JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); Jump_To_Application = (pFunction) JumpAddress; /* Initial
[单片机]
STM32F030的IAP应用简介
程序收尾总想着以后更新的方便性,采用在应用编程(In Application Programming),通过Bootload引导单片机自己往程序存储器里写数据或修改程序。下面简介STM32F030的IAP方法。不同于STM32F1系列,F0没有中断向量偏移寄存器。所以在APP程序的开头要添加以下代码。为什么这样做?? 可以看到函数用了for循环将矢量表拷贝到0 x20000000 SRAM的基地址,即将矢量表由Flash映射到了SRAM。所以在MDK里面设置Flash偏移地址的时候,同时要设置SRAM偏移地址。如下截图 //APP程序开头加入IAP_Set(void)函数 //Falsh address #defin
[单片机]
一文看懂汽车电子ECU bootloader开发
随着半导体技术的不断进步(按照摩尔定律),MCU内部集成的逻辑功能外设越来越多,存储器也越来越大。消费者对于汽车节能(经济和法规对排放的要求)型、舒适性、互联性、安全性(功能安全和信息安全)的要求越来越高,特别是近年来新能源电动车、车联网和自动驾驶技术的兴起,更大大加速了汽车电子技术的发展。汽车电子ECU(Electronic Control Unit--电控单元)集成的功能日益复杂,为了应对软件远程(在线)功能升级(增加新的功能)和bug修复的需求、对bootLoader(启动加载程序)的需求越来越多。本文详细介绍了汽车电子ECU bootloader的一般性工作原理和开发要点,其适用于所有的汽车电子ECU bootload
[嵌入式]
TMS320C6000系列二次Bootloader的设计与实现
引 言 随着DSP(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的Boot-loader通过Flash存储器来引导DSP程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。 系统上电后,由引导程序将DSP的应用程序从该存储器引导到DSP应用板上的高速存储器(如内部SRAM、SDRAM等)中。由于Flash存储器具有电信号删除功能,且删除速度快,集成度高,因此已成为此种存储器的首选。由于Flash存储器的存取速度较慢,写入Flash存储器的程序将在系统上电时被DSP装载到快速的存储器中运
[应用]
Encrypted bootloader (程序BIN文件加密及在线升级)
在上一个博客随笔,我介绍了为PIC16,PIC18, PIC24/dsPIC, PIC32的学习板或最小系统板做的Xmodem bootloader。今天给大家介绍在我的Xmodem bootloader 的基础上开发的Encrypted bootloader。今年的国庆节,我哪都没去,就宅在家里把Encrypted bootloader完成。虽然我叫它Encrypted bootloader, 实际上加密(encrypted)的是应用程序BIN文件,加密过的BIN文件传送给单片机,单片机的boot程序先(decrypting)解密然后烧写数据到单片机ROM的对应的地址上。所以整个Encrypted bootloader工程分
[单片机]
ATMega48的Bootloader的软件实用方法
AVR是Atmel公司推出的第一款真正意义上的RISC结构8位单片机,具有先进的指令集及单时钟周期指令执行时间,数据吞吐率可高达1MIPS,其性能明显优于其他类型8位单片机。
作为AVR主流产品,Mega系列的很多产品(Mega8/Megal6/Mega32/Mega8535等)在硬件上都支持Boot-loader功能。这样MCU可灵活运行BOOT区程序,实现在应用编程(IAP)及一些高级应用,如系统智能升级,密码校验自保护,远程系统更新等。但有很高性价比的Mega48在硬件上却不支持Bootloader功能。因此,本文针对Mega48首次提出两种软件实现Bootloader的方法:跳转保存法和倒置法。
1 ATMega
[应用]
Stm8的bootloader介绍
本次应用笔记是专门为STM8的固件和系统设计者提供,他们需要实现一个内应用编程(In-application programming, IPA)特征的产品,以stm8微处理器作为研发的。Stm8是一个8位微控制器家族,并以一个flash memory 去存储用户的程序代码或者固件。(for storing the user program codeor firmware.)在为控制其被移植到最终产品上后,IAP 使得控制器可以就地更新固件。这么更新固件的有优点是微控制器能一直保持在产品里面,不用取出芯片特意给它烧录程序。更新固件的时候也不用调停机器(产品)的运行工作。(在线烧录,通过IIC,SPI,uart)。 IAP是对发布
[单片机]