历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2020年01月11日 | STM32串口IAP实验中的地址问题

2020-01-11 来源: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程序使用。

推荐阅读

史海拾趣

全志(Allwinner)公司的发展小趣事

2010年,平板电脑市场的崛起为全志科技带来了巨大的发展机遇。全志迅速调整产品策略,推出了AP处理器A系列,成功抓住了这一市场风口。其芯片产品在平板电脑领域的应用,不仅提升了公司的市场份额,也为公司的未来发展奠定了坚实的基础。

DELTA公司的发展小趣事

Delta公司始终将技术创新作为推动企业发展的核心动力。公司不断投入巨资进行技术研发和创新,积极引进先进技术和设备,培养高素质的研发人才。这些努力使Delta在电源管理、能源管理、智能绿生活等领域取得了多项技术突破和专利成果,不仅提升了公司的核心竞争力,还引领了整个行业的发展方向。

Cavium Networks公司的发展小趣事

在追求高性能与业务和谐的道路上,Cavium Networks 与 Wind River 公司展开了深度合作。两家公司共同制定了长期的产品研发路线,Wind River 为 Cavium 的 OCTEON II 等多核处理器提供了商业级支持。通过合作,双方共同调整和优化了领先的多核硬件和软件解决方案,为用户提供了世界领先的多核解决方案。这一合作不仅提升了 Cavium Networks 的技术实力和市场地位,也推动了整个电子行业的发展。

Fagor Electrónica公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Fagor Electrónica开始将其业务范围扩展到更广泛的电子和数字领域。公司不断推出新的产品和服务,以满足不同客户的需求。同时,Fagor Electrónica还积极拓展国际市场,将其产品销往世界各地。这一时期的多元化发展和市场拓展为公司带来了更大的商业机会和更广阔的市场前景。

芯旺微电子(ChipON)公司的发展小趣事

在汽车电子领域,AEC-Q100品质认证是衡量MCU产品质量的重要标准。芯旺微电子通过不懈的努力和技术创新,成功研发出满足AEC-Q100品质认证的MCU产品,并广泛应用于汽车前装市场。这一突破不仅证明了芯旺微电子的技术实力,也为其赢得了国内外众多知名汽车厂商的信赖和合作。

E. Dold & Söhne KG公司的发展小趣事

在追求经济效益的同时,E. Dold & Söhne KG公司也高度重视环保和可持续发展。公司积极引进环保技术和设备,降低生产过程中的能耗和废弃物排放。此外,公司还倡导绿色采购和绿色供应链管理,推动整个产业链向环保和可持续方向发展。这种对环保和可持续发展的关注使得E. Dold & Söhne KG公司在行业内树立了良好的社会形象。

问答坊 | AI 解惑

模拟电路的频率响应

想知道一模拟电路的频率响应曲线,如何测量,有没有相关的标准或者机构来测量的。 如果没有,我自己想能不能这样测量: 假设关心的频率范围是300k~400k,那用信号源发射300k的连续正弦波作为输入,然后用示波器得到模拟电路的输出信号,分析其频 ...…

查看全部问答>

FPGA数字示波器

本帖最后由 paulhyde 于 2014-9-15 03:27 编辑 基于FPGA制作数字示波器,大家可以看下。。。    …

查看全部问答>

高亮度LED在汽车照明应用的问题

毋庸置疑,采用高亮度LED照明将成为未来汽车的主要特征,这归功于LED相对于传统的白炽光照明方案所具有的许多基本优势。此外,采用LED照明也可带动汽车设计技术和设计风格上的变化。然而,正像任何创新技术一样,LED在被广泛用于汽车照明之前,仍需 ...…

查看全部问答>

做个家用带有温湿度测试仪的电子表,原理图、PCB在17楼,欢迎讨论

这个应用很简单,取代家用的电子表,除了具有普通电子表具有的显示时间,报警功能外,添加温度和湿度显示,这样可以随时了解室内的温湿度状况。市场挺好。…

查看全部问答>

windows是如何找到设备驱动的?

当USB设备插入电脑时,windows是怎么找到对应的驱动程序并加载的 ? …

查看全部问答>

用vs2005 c#开发ppc程序是为什么汉字会变成方块

我把菜单写了关闭2个字,ide中显示正常,模拟器中显示确实方块,不知道在实际的机器上会是什么样子,如何解决。…

查看全部问答>

想做基于Wince的PDA的开发,请推荐几款?

正在读研究生呢,非常想做一些嵌入式方面的研究,最好是WinCE方面的。 这里的各位大侠在这方面都很有经验,所以请各位推荐几款市场上可以买的成品PDA,价格适中,2000元以内。 而且,可以用作开发。 现在,我看了几款在taobao网上,不敢买,怕买 ...…

查看全部问答>

从昆腾plc中取数的问题,

做一个管理软件,使用vb,需要从昆腾plc中通过tcp/ip方式取数,听说需要用modbus协议取数,对这个协议不熟悉,有Modbus的接口或者驱动之类的东西吗,thanks a lot…

查看全部问答>

spartan 6 warning HDLCompiler:89

在spartan 6 中,我调用了一个除法器,结果出现如下warning: HDLCompiler:89 - \"E:\\qiaodong\\FPGA\\test_FPGA\\test_div\\top.vhf\" Line 53: <div_lx16> remains a black-box since it has no binding entity. 如何解决? ...…

查看全部问答>

VHDL 语言中GENERATE 用途是什么?

一种目的,两种用途: 1)生成相同元件的多次实例化,示例如下: for k in 99 downto 0 generate flip_flop : DFF port map ( clk => clk, d => din(k), q => dout(k) ); ...…

查看全部问答>