stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
2012-07-19 21:55
381 查看
1.在STM32中经常出现IAP下载,我们通常采用的策略是把程序分成两段。
(A段)运行其主程序并且判断是否需要进行IAP下载,以及IAP下载的程序。
(B段)用户的程序。也可以说是通过IAP升级的程序。
通常我们把这两段程序分别存储在FLASH的不同的地址空间。
例如:STM32的flash的存储布局是:
name block bass address size
sector 0 0x08000000 - 0x08003fff 16k
sector 1 0x08004000 - 0x08007fff 16k
sector 2 0x08000000 - 0x08003fff 16k
sector 3 0x08004000 - 0x08007fff 16k
sector 4 0x08000000 - 0x08003fff 64k
sector 5 0x08004000 - 0x08007fff 128k
sector 6 0x08000000 - 0x08003fff 128k
sector 7 0x08004000 - 0x08007fff 128k
sector 8 0x08000000 - 0x08003fff 128k
sector 9 0x08004000 - 0x08007fff 128k
sector 10 0x08004000 - 0x08007fff 128k
sector 11 0x08004000 - 0x08007fff 128k
system memory 0x1fff0000 - 0x1fff77ff 30k
OTP 0x1fff7800 - 0x1fff7a0f 528b
Option bytes 0x1fffc000 - 0x1fffc00f 16b
我的做法是把:
sector 0 作为我的A段程序存储
sector 1 以及以后的内容作为B段程序存储
2.在A段程序中要注意的是:
typedef void (*usercode)(void);//
usercode EnterApp;
int main()
{
SCB->VTOR = 0x08004000;//重新定位中断向量表
EnterApp = (usercode)(*(unsigned int *)(0x08004000 + 0x04));//0x08004000这里存放的是第堆栈的地址
EnterApp();//在这里调用第二段程序
}
(A段)运行其主程序并且判断是否需要进行IAP下载,以及IAP下载的程序。
(B段)用户的程序。也可以说是通过IAP升级的程序。
通常我们把这两段程序分别存储在FLASH的不同的地址空间。
例如:STM32的flash的存储布局是:
name block bass address size
sector 0 0x08000000 - 0x08003fff 16k
sector 1 0x08004000 - 0x08007fff 16k
sector 2 0x08000000 - 0x08003fff 16k
sector 3 0x08004000 - 0x08007fff 16k
sector 4 0x08000000 - 0x08003fff 64k
sector 5 0x08004000 - 0x08007fff 128k
sector 6 0x08000000 - 0x08003fff 128k
sector 7 0x08004000 - 0x08007fff 128k
sector 8 0x08000000 - 0x08003fff 128k
sector 9 0x08004000 - 0x08007fff 128k
sector 10 0x08004000 - 0x08007fff 128k
sector 11 0x08004000 - 0x08007fff 128k
system memory 0x1fff0000 - 0x1fff77ff 30k
OTP 0x1fff7800 - 0x1fff7a0f 528b
Option bytes 0x1fffc000 - 0x1fffc00f 16b
我的做法是把:
sector 0 作为我的A段程序存储
sector 1 以及以后的内容作为B段程序存储
2.在A段程序中要注意的是:
typedef void (*usercode)(void);//
usercode EnterApp;
int main()
{
SCB->VTOR = 0x08004000;//重新定位中断向量表
EnterApp = (usercode)(*(unsigned int *)(0x08004000 + 0x04));//0x08004000这里存放的是第堆栈的地址
EnterApp();//在这里调用第二段程序
}
相关文章推荐
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- STM32单片机串口下载程序的简单原理和设置
- STM32程序下载成功但是不运行
- STM32在线仿真出现是循环,使用mcuisp下载程序却可以运行,JTAG下载程序可以下载成功,却没有任何动作!
- Linux下编写运行访问MYSQL的程序以及MYSQL在linux下的下载安装
- IE的安全设置中设成“启用,运行,下载activeX控件”程序控制的实现的原理
- STM32单片机,下载器下载完程序能正常跑起来,断电再上电程序不运行
- Maxtocode对.Net程序加密的原理及解密探讨五(元数据还原以及IL解码的改进)
- Android开发19――将Android程序部署至真实Android手机以及asm.jar的运行
- Lesson1 Windows程序内部运行原理
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- 孙鑫VC学习笔记:第一讲 Windows程序内部运行原理
- MDK st-link下载STM32程序出现Internal command error和Error:Flash download failed. Target DLL
- OK6410如何通过tftp下载运行C程序
- VMware Workstation 无法连接到虚拟机。请确保您有权限运行该程序、访问改程序使用的所有目录以及访问所有临时文件目录。
- ubuntu,显示端口占用,显示正在运行的程序,以及强制关闭一个进程
- MFC编程第一节:Windows程序内部运行原理
- 使用ToolRunner运行Hadoop程序基本原理分析
- VS 安装项目 :通过文本框得到用户输入 以及 安装后运行某程序(如打开C:\\a.html)