首页 结合Keil描述如何编写ARM处理器的Bootloader

结合Keil描述如何编写ARM处理器的Bootloader

举报
开通vip

结合Keil描述如何编写ARM处理器的Bootloader     结合Keil描述如何编写ARM处理器的Bootloader                    [导读]之前从应用的角度给大家分享过Bootloader相关的文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader。关注+星标公众号,不错过精彩内容作者|strongerHuang微信公众号|strongerHuang之前从应用的角度给大家分享过Bootloader相关的文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader。关于BootloaderBootloader顾...

结合Keil描述如何编写ARM处理器的Bootloader
     结合Keil描述如何编写ARM处理器的Bootloader                    [导读]之前从应用的角度给大家分享过Bootloader相关的文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader。关注+星标公众号,不错过精彩内容作者|strongerHuang微信公众号|strongerHuang之前从应用的角度给大家分享过Bootloader相关的文章,今天从底层原理来给大家描述ARM处理器如何编写Bootloader。关于BootloaderBootloader顾名思义就是引导加载程序,是在操作系统或应用程序运行之前的一段程序,是在系统上电后执行的一段程序代码。BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式平台。因此,在嵌入式平台里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对bootloader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。---来源百度百科Bootloader在手机、电脑、众多嵌入式系统中都存在,它的作用有很多,比如:初始化底层应用驱动、加载应用程序、更新应用程序等。不同的设备,Bootloader可能差异很大,通常来说Bootloader比较依赖底层硬件和实际项目需求。如何编写bootloaderbootloader是一段引导加载程序代码,它更新用户的应用程序代码,可以使用很多硬件下载通道(例如USB、网络端口)获得新代码。在执行引导ROM之后,将执行bootloader程序,并在需要时进行更新,然后执行最终用户应用程序。引导加载程序和用户应用程序应作为两个独立的Project或Object进行编写和编译,从而产生两个独立且可执行的(bin/hex)文件。引导加载程序的主要任务是在必要时对用户应用程序进行重新编程/替换,并跳转至用户应用程序以执行该程序,应用程序不一定需要知道引导加载程序的存在。引导加载程序通常位于芯片闪存基址,下面通过一张图来描述内存和Flash代码映射关系:有很多 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 可以引导bootloader进入编程模式,以将用户应用程序重新编程到Flash中,或者直接跳转到现有的用户应用程序来执行。最简单的方法是检查GPIO引脚以确定是否应进入编程模式。大多数芯片供应商为用户提供了一种方便的方式,例如ISP和IAP接口,bootloader将使用它们来更新闪存内容。当Flash内容已更新或已经是最新时,引导加载程序将跳转到用户应用程序。在执行用户应用程序之前,这需要许多步骤:1.确保CPU处于特权模式。2.禁用NVIC中所有启用的中断。3.禁用所有可能产生中断请求的使能外设,并清除这些外设中的所有未使用中断标志。4.清除NVIC中所有未使用的中断请求。5.禁用SysTick并清除其异常挂起位。6.如果引导加载程序使用了单个故障处理程序,请禁用它们。7.如果发现内核当前与PSP一起运行,则激活MSP(由于编译器可能仍在使用堆栈,因此在此之前需要将PSP复制到MSP)。8.将用户应用程序的向量 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 地址加载到SCB->VTOR寄存器中。确保地址符合对齐要求。9.最后一部分是将MSP设置为用户应用程序向量表中找到的值,然后将用户应用程序的重置向量值加载到PC中,也就是跳转功能。比如通过调用下面的示例BootJump()这样的函数来完成此操作:                                                     static void BootJump(uint32_t *Address){//1.确保CPU处于特权模式。  if( CONTROL_nPRIV_Msk & __get_CONTROL()){/*notinprivilegedmode*/    EnablePrivilegedMode() ;}//2.禁用NVIC中所有启用的中断。Disable_All_Peripherals();//3.禁用所有可能产生中断请求的使能外设,并清除这些外设中的所有未使用中断标志。NVIC->ICER[0]=0xFFFFFFFF;NVIC->ICER[1]=0xFFFFFFFF;NVIC->ICER[2]=0xFFFFFFFF;NVIC->ICER[3]=0xFFFFFFFF;NVIC->ICER[4]=0xFFFFFFFF;NVIC->ICER[5]=0xFFFFFFFF;NVIC->ICER[6]=0xFFFFFFFF;NVIC->ICER[7]=0xFFFFFFFF;//4.清除NVIC中所有未使用的中断请求。NVIC->ICPR[0]=0xFFFFFFFF;NVIC->ICPR[1]=0xFFFFFFFF;NVIC->ICPR[2]=0xFFFFFFFF;NVIC->ICPR[3]=0xFFFFFFFF;NVIC->ICPR[4]=0xFFFFFFFF;NVIC->ICPR[5]=0xFFFFFFFF;NVIC->ICPR[6]=0xFFFFFFFF;NVIC->ICPR[7]=0xFFFFFFFF;//5.禁用SysTick并清除其异常挂起位。SysTick->CTRL=0;SCB->ICSR|=SCB_ICSR_PENDSTCLR_Msk;//6.如果引导加载程序使用了单个故障处理程序,请禁用它们。SCB->SHCSR&=~(SCB_SHCSR_USGFAULTENA_Msk|\SCB_SHCSR_BUSFAULTENA_Msk|\SCB_SHCSR_MEMFAULTENA_Msk);//7.如果发现内核当前与PSP一起运行,则激活MSP  if( CONTROL_SPSEL_Msk & __get_CONTROL()){/*MSPisnotactive*/    __set_MSP( __get_PSP()) ;    __set_CONTROL( __get_CONTROL() & ~CONTROL_SPSEL_Msk);}//8.将用户应用程序的向量表地址加载到SCB->VTOR寄存器中。SCB->VTOR=(uint32_t)Address;//9.跳转  BootJumpASM( Address[ 0 ], Address[ 1 ]);}再次说明bootloader与底层硬件和实际需求有关,以上代码仅供参考,主要是提供思路,方便大家理解。如果还不能理解,建议结合bootloader实际项目进行理解,比如之前给大家分享过的:STM32+IAP+Ymodem完美结合------------ END ------------推荐阅读:程序猿如何选择开源 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 ?线程、进程、多线程、多进程和多任务 几款优秀的支持C、C++等多种语言的在线编译器关注微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术 交流 第4课唐朝的中外文化交流教案班主任工作中的交流培训班交流发言材料交流低压配电柜检验标准小王子读书交流分享介绍 群。长按前往图中包含的公众号关注点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。12免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,请联系我们,谢谢! -全文完-
本文档为【结合Keil描述如何编写ARM处理器的Bootloader】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
永兴文档
暂无简介~
格式:doc
大小:148KB
软件:Word
页数:10
分类:互联网
上传时间:2023-03-21
浏览量:6