IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM单片机工程之间的切换 -> 正文阅读

[嵌入式]ARM单片机工程之间的切换

ARM单片机工程之间的切换

??在做ARM单片机开发的时候,有时候会在一个MCU内部存放几个工程,工程之间可以是独立的,也可以是有联系的。有联系体现在2个以上的工程公用RAM和flash资源,实现工程之间的同步,如果单片机内部存在BRAM(BACKUP RAM),那么可以选择使用BRAM存放工程之间的共享数据;如果没有,还可以使用读写Flash实现数据的共享。本章主要介绍ARM单片机中工程之间的跳转。

1.首先了解下中断向量表

在这里插入图片描述
??上图摘自STM32L4芯片手册,首先这个中断向量表上可以直观的看到地址0x0000存放的是SP的初始值,地址0x0004存放的是Reset。可以在IAR或者KEIL调试程序的时候看到,Reset其实就是一个跳转的地址,具体的说是,中断向量表上每个单位存放的是4个字节组成的地址,当有中断异常等发生时,就会认准里面存的地址然后直接跳过去运行。(目前接触到的M3,M4,M7内核的中断向量表都长这啥样)

2.主堆栈MSP

??MSP:缺省的堆栈指针,它由OS内核、异常服务例程以及所有需要特权访问的应用程序代码使用。在程序启动的时候,会将上面中断向量表的SP Value写到MSP。

3.程序计数器PC

??PC,字面意思就是记录程序的执行位置,在程序一启动的时候,默认是将Reset的地址赋值给PC,然后运行代码。因为Arm内核使用了指令流水线,所以在读PC时返回的值是当前指令地址+4。

4.系统的Reset序列

??系统先是进入复位状态,接着在离开复位状态后,内核做的第一件事:
(1)从地址0x00000000处读取MSP的初始值。
(2)从地址0x00000004处读取PC的初始值–这个是复位向量,最低位LSB必须为1。程序就是从这PC值真正开始运行的。

5.跳转代码的书写

??下面直接贴出工程跳转函数:

typedef void (*func)();
void Project_Jump(uint32_t addr)
{
	func func_ptr;
	SysTick->CTRL = 0;//关闭滴答定时器
	__disable_irq();//关闭全局中断
	for(uint8_t i=0;i<8;i++)
	{
		NVIC->ICER[i] = 0xFFFFFFFF;//可屏蔽中断失能
		NVIC->ICPR[i] = 0xFFFFFFFF;//解除被挂起的中断
	}
	__DSB();
	__ISB();
	SCB->VTOR = addr;//设置中断向量表地址
	__DSB();
	__ISB();
	__enable_irq();//使能全局中断
	__set_MSP(*(uint32_t *)addr);//设置堆栈指针
	func_ptr = (__IO func)(*(__IO uint32_t*) (addr+4));//指针函数赋值
	func_ptr();
}

??上面的__DSB()和__ISB()最好加上,确保数据和指令都同步。还有就是,如果单片机当前工程有使用到ICache和DCache的话,跳转的时候也需要将它们Disable和Clean掉。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:46:32  更:2022-02-26 11:48:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:57:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码