历史上的今天
今天是:2024年11月06日(星期三)
2019年11月06日 | STM32串口IAP实验中的地址问题
2019-11-06 来源:eefocus
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)和if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)分析
首先要清楚:0x8000000是Flash的起始地址,0x20000000是SRAM的起始地址。jump2app()是一个虚拟函数(函数指针)
(*(vu32*)(0X20001000+4))== (*(__IO uint32_t*)(0X20001000+4))
==(*(volatile unsigned int*)(0X20001000+4))
(*(vu32*)(0X20001000+4)) 通过内存寻址访问地址为(0x20001000 + 4)中的值
(0X20001000+4)只是一个常量;
(volatile unsigned int*)(0X20001000+4) 将0x20001000 + 4这个常量强制转化成volatile unsigned int类型的指针;
(*(volatile unsigned int*)(0X20001000+4)) 相对于取0x20001000 + 4地址处的值
程序设置把串口接收来的数据从0x20001000开始存储,第一个4个字节为栈顶地址,第二个4字节为复位中断向量的入口地址,接下来+8,将会是NMI中断服务函数的入口地址, +12,将会是HardFault的服务函数入口地址...

STM32程序地址从 0X08000000 开始 执行,PC机也是从硬盘上的 0X08000000 地址开始执行。前四个字节是栈顶地址main()函数式主函数,也有个栈顶地址,其他函数一样,在调用跳转之前,将其对应的函数栈地址保存起来。 BootLoader程序先烧进Flash里,它的栈顶地址从0X08000000开始,4字节栈顶地址数据空间,然后是各种中断服务地址。。。
当收到APP程序时(它自己已经定义好了,收到APP文件后写道0X08000000+N这个地址上),它要把APP程序写到0X08000000+N上,因此,它需要首先判断一下APP程序在MDK中编译生成.bin文件后否是遵循这个0X08000000+N这个地址。如果和Bootloader要求的一样,那么就是正确的文件。
而appxaddr存放的是用户程序Flash的首地址,(*(volatile u32*)appxaddr)的意思是取用户程序首地址里面的数据,这个数据就是用户代码的堆栈地址,堆栈地址指向RAM,而RAM的起始地址是0x20000000,因此上面的判断语句执行:判断用户代码的堆栈地址是否落在:0x20000000~0x2001ffff区间中。
注:这里面的(0X20001000+4)和我们在SRAM里的起始地址 0X20001000 有什么关系呢?
我们选择0X20001000,就是留下SRAM区域的前4K SRAM给IAP程序使用。
史海拾趣
|
初学者, 想去 示波器,以及电源器 刚才淘宝上看到一处买示波器, 有几种价格,便宜的三四百, 不知道能不能用, 各价格有什么区别,懂的人看看 http://store.taobao.com/shop/xshop/wui_page-cat-35391858-36790672-ob7Eo8Tiyr6yqMb3ob8=.htm ...… 查看全部问答> |
|
苹果的每一次举动,似乎都成了暴力拆解的对象,其中的芯片,也自然成了大家关注的焦点。 随着苹果iPad平板电脑的发布,有关其内部集成的自产处理器Apple A4的信息也逐渐浮出了水面, BSN 网站报道称这款处理器是一款集成了ARM Cortex A9架构多 ...… 查看全部问答> |
|
关于欧姆龙PLC与变频器的通讯,我使用的是欧姆龙的C200HE系列,现在控制电机需要变频调速~打算选择安川的变频器,他们的通讯协议啊~方式是什么?… 查看全部问答> |
|
我们机房有一台惠普DL380 G6服务器:双E5530cpu,4根2gddr3内存,6块300g sas硬盘,双电源,此服务器的标配是单E5530cpu,3根2g内存, 在标配情况下服务器正常使用,但是用我们现有的配置机器就会无规律重启,寻找原因中,请高手帮忙… 查看全部问答> |
|
我要做个电池驱动,就去看了看common下的电池驱动。首先想知道下电池驱动是不是就上纯粹的和其他流驱动一样只是提供一些接口,还是有其他一些扯不清的关系,因为我看完后觉的有点糊涂。我不知道为什么要这样做,我把代码帖出来,希望大家帮忙说说, ...… 查看全部问答> |
|
pic串行输出信号有一段是跳动的是怎么回事,是连到lcd驱动芯片的,lcd显示的是一串稳定的数字,示波器看到的信号由一段是跳动的,什么原因?请高人解释,谢谢… 查看全部问答> |
|
现在除了太阳能是可以再生能源之外,LED照明也成为了可以迅速的有效降低二氧化碳的排放。有报道说,如果将LED照明代替传统的照明灯泡,可以在20年内为世界减少一半的二氧化碳排放量,还有研究说,LED照明可以省下很多的电费,而且减少很多能源的 ...… 查看全部问答> |
|
写了个看门狗程序,可是却不工作,不知何原因,大家指点一二。/******************************************************************************** Function Name : IWDG_Configuration* Description & ...… 查看全部问答> |




