技术标签: iap stm32l4
Stm32的bootloader和App的编写注意事项
1、 怎么分配bootloader和app的空间
2、 怎么得到数据和写入flash
3、 怎么从bootloader跳转到app
4、 怎么设置App的中断向量
5、 App中怎么生成bin文件
6、程序执行的流程
1、怎么分配bootloader和app的空间
因为我用的是stm32f103c8t6,它的flash的大小是64k,所以把它分成如上所示
0x08000000 —0x0800 33FF分配给bootloader使用,大小是13k
0x0800 3400----0x080097FF分配给第一个APP的使用,大小是25k
0x08009800----0x0800 FBFF分配给第二个APP的使用,大小是25k
0x0800FC00----0x0800 FFFF 分配给user_flag和其它标志使用,大小是1k
在keil中设置rom的大小
A、bootloader中rom大小的设置
B、APP1中rom大小的设置
C、APP2中rom大小的设置
Rom设置好了就可以在map中看见地址的改变,这里拿bootloader和app1来说。
Bootloader的map
App1的map
这里就可以看到RESET的地址改变了
但是要想我们改变的rom在map中也改变keil里面必须要设置如下图,
这里必须要打勾,默认新建的工程是没有选择的
2、怎么得到数据和写入flash
在我的程序是通过串口接收数据,然后调用app_bin_handler(&timer);函数来在里面完成写flash(函数iap_write_appbin(Flash_Current_Write_addr(),g_RxBuf1,length))、和校验写入的数据是否正确(函数flag =read_flash_ECC(Flash_Current_Write_addr(),length);)、校验通过就可以跳转到app中(函数JumpToApp(Flash_Current_Write_addr(),1);)
3、怎么从bootloader跳转到app
voidJumpToApp(u32 ApplicationAddress,u8 flag)
{u32 temp;
if (((*(vu32*)ApplicationAddress) &0x2FFE0000 ) == 0x20000000)
{
if(flag == 1)
{
User_write_Flash_falg();
}
temp = (*(vu32*)(ApplicationAddress + 4));
JumpToApplication =(FunVoidType)temp;
MSR_MSP(*(vu32*)ApplicationAddress);
JumpToApplication();
}1234567891011121314151617181920212223
}
程序中就是利用上面的函数实现跳转,中间有个User_write_Flash_falg()函数是用来设置app的标志的,如果当前正在使用的是app1,那么就设置标志位为2,好在下次启动的时候跳转到app2,如果当前正在使用的是app2,那么就设置标志位为1,好在下次启动的时候跳转到app1
至于上面函数的详解可以百度。
4、怎么设置App的中断向量
Stm32的中断重定向比较简单,因为它有一个专用的寄存器NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x9800);1
这个函数就是重定向了app2的中断向量,实现起来简单
6、App中怎么生成bin文件
因为我的程序是通过串口下载app的所以必须要生成bin文件,才方便下载,
在工程里面进行如下设置就可以生成bin文件
其中主要是路径要对,不然找不到.axf文件,也就生成不了bin文件
总结:
Bootloader里面主要是
1、设置bootloader和app的空间
2、接收编译好的app的bin文件,写入flash
3、实现跳转
App里面主要修改的地方是
1、 ROM起始地址和分配的空间大小
2、 重定向中断向量
3、 生成bin文件
这里就是整个程序执行的流程
文章浏览阅读217次。1 通过Ifenslave手动配置Bonding该方法适用于某些发行包,它们的网络初始化脚本(sysconfig或initscripts包)没有bonding相关的知识。SuSE Linux Enterprise Server 版本8就是这样的一个发行包。对于这些系统一般的方法是,把bonding模块的参数放进/etc/modules.conf或..._echo "all" > /sys/class/net/bond0/bonding/arp_validate echo "100" > /sys
文章浏览阅读2.3k次。很简单,看图:_tableau更换筛选器后怎么添加到汇总表里
文章浏览阅读4.7k次,点赞3次,收藏8次。pip更新安装包的时候出现错误,如下图所示:解决方法是:pip install --user [要安装的包] #加上一个–user就好了_pip23.3.2安装包时拒绝访问
文章浏览阅读331次。题目链接:题目腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的。聪明的你能解出来吗?看下面的题目接招吧。给定二维平面上 nnn 个与坐标轴平行的矩形,每个矩形是形如 {(x,y)∣x,y∈R,x1≤x≤x2,y1≤y≤y2}\lbrace (x,y) | x,y \in R, x_1 \le x \le x_2, y_1 \le y \le y_2 \rbrace{(x,y)∣x,y∈R,x1≤x≤x2,y1≤y≤y2} 的点集,你的任务是对于每个矩形,计算它与_游戏两矩形相交计算
文章浏览阅读733次,点赞16次,收藏16次。免费领取项目源码,请关注●点赞收藏并私信博主,谢谢~宠物店管理系统主要功能模块包括宠物类型、宠物医生、普通挂号、会员挂号、宠物护理、护理订单、提醒信息、会员提醒、护理订单(会员)等信息维护,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取MySQL作为后台数据的主要存储单元,采用Java技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。本次报告,首先分析了研究的背景、作用、意义,为研究工作的合理性打下了基础。针对
文章浏览阅读271次。在R语言中,我们可以使用ggplot2包来创建漂亮的柱状图,并且可以自定义每个柱子的填充颜色。在本例中,我们将使用mtcars数据集,该数据集包含了不同汽车型号的性能指标。通过使用fill参数,我们可以轻松地为柱状图指定填充颜色,以增强数据可视化效果。你可以根据自己的需要选择不同的颜色方案,或者根据数据的特点来选择合适的填充颜色。现在我们可以使用ggplot函数创建柱状图,并使用fill参数指定填充颜色。每个柱子将使用不同的颜色进行填充,颜色的顺序与数据中汽车品牌的顺序相对应。在这个例子中,我们使用了。_如果对柱状图进行颜色润色的话,需要用到下面 哪一个参数?
文章浏览阅读3.6k次。来自:http://blog.zyan.cc/post/360/前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。 在DELL PowerEdge 6850服务器(四颗64 位Inter Xeon MP 7110N处理器 / 8GB内存)、RedHat AS4 Linux操作系统、MySQL 5.1.26、MyIS
文章浏览阅读5.4k次,点赞2次,收藏11次。HTML嵌入JavaScript代码的三种方式_24、在html中,可以引入javascrint代码方式(3分)是()。a、a、行内式b、b、内嵌
文章浏览阅读6w次,点赞73次,收藏50次。问题打开调试器,F5刷新页面后出现下面这种情况没有出现资源等想要的信息(注:从参考1里面得到如下图)解决方法1、打开Edge浏览器里面的调试器的设置2、重置默认并刷新即可注:chrome浏览器的开发者工具的设置也在类似位置参考1、edge等浏览器打开开发者工具(F12)之后在NetWork看不到请求头等信息..._浏览器开发者工具 console没有请求信息
文章浏览阅读953次。1, 调试前肩后肩的驱动,那个文件是那个设备的驱动?,lcd刷新频率。2,MMC sdiosd驱动框架看下;大概了解记忆sdio协议。复读一下wifi驱动的框架,3,i2c驱动框架。4,Makefile基本常识基本语句 1,解决过什么问题:收货什么经验,自己的review的总结: 1,解决当wifi没有连接到路由器上时,此时通过_adv7280a移植
文章浏览阅读875次。1.asp.net webform用“Request.PhysicalApplicationPath获取站点所在虚拟目录的物理路径,最后包含“\”;2.c# winform用A:“Application.StartupPath”:获取当前应用程序所在目录的路径,最后不包含“\”;B:“Application.ExecutablePath ”:获取当前应用程序文件的路径,包含文件_c获取当前程序的路径
文章浏览阅读233次。分布式事务解决方案-TCC什么是TCC事务TCC是Try、Confirm、Cancel三个词的缩写,TCC要求每个分支事务实现三个操作,预处理Try、确认Confirm、撤销Cancel。Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反得cao操作的回滚操作。TM首先先发起所有的分支事务的try操作,任何一个分支事务的Try操作执行失败,TM将会发起所有的分支事务的Cancel操作,若Try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Co