您好,欢迎访问三七文档
STM8S做IAP一:环境与平台MCU:STM8S005K6集成开发环境:STVD开发方式:库开发芯片内部存储”偷窥”软件SmartPRO2008二:在RAM中运行代码0.在STM8s.h中将#defineRAM_EXECUTION(1)的注释去掉,以使用RAM功能.1.利用编译器函数#pragmasection(FLASH_CODE),#pragmasection()对函数voidFLASH_ProgramBlock(Num,PROG,FAST,Buffer);进行声明.FLASH_CODE是声明的这段代码的名字,可以自己随便取.同时函数用IN_RAM包括.举例代码如下:#pragmasection(FLASH_CODE)IN_RAM(voidFLASH_ProgramBlock(Num,PROG,FAST,Buffer)){Num=PROG+FAST+Buffer;}#pragmasection()2.声明编译器函数int_fctcpy(charname);3.在函数FLASH_ProgramBlock运行前时,利用编译器函数int_fctcpy(charname)将函数FLASH_ProgramBlock复制到RAM中.形参charname是指要复制的代码段名字的首字母.此例中要复制的代码段名为FLASH_CODE.所以应该写成:_fctcpy('F');4.在STVD软件,project工程,seting设置,linker链接器,Gategory,Input,RAM栏中添加要在RAM中运行的代码.FLASH_CODE名,并在option中输入-ic.具体见图片.如果出现没有.FLASH_CODE的默认位置这样的错误,说明这步没有处理好.三:STM8S的中断特性1把APP的中断向量表地址改成0xa300,Flash地址改成oxa380,之后程序不能执行.把APP的中断向量表地址改成0x8000,Flash地址改成oxa380,之后程序就能执行.是因为一上电STM8S就读取0x8000-0x8003的复位地址,以实现复位,但找不到.这异常与复位中断有关,STM8S读取中断向量表的地址只能是0x8000到0x8080.谁的复位函数地址处在0x8000,就复谁的位.复位就是跳转主函数开始地址的意思.STM8S单片机主函数地址/复位地址是0x8000-0x8003.地址0x8004-0x8080为其它中断函数地址2.局部的变量,全局的变量,都在主函数运行后被赋初值或运行中改变值,这些变量都存储在RAM中.只有code/const指定了的才会在ROM中.3.可以利用软件复位实现软件间跳转(跳转前修改地址0x8000-0x8003中复位函数的地址);也可直接利用跳转指令实现跳转.四:操作流程1:APP软件,在STVD软件中,工程-设置-Linker-Caneral-Input中,设置中断地址0xa300,Flash地址0xa380.设置是否完成会在.lkf文件中看到,这是地址分配文件2:Boot软件,在软件中利用汇编指令跳转到APP代码Flash的开始地址._asm(LDWX,SP);_asm(LDA,$FF);_asm(LDXL,A);_asm(LDWSP,X);_asm(JPF$A380);//跳转到APPFlash地址0xA380嵌入app.bin的地址为偏移地址,包含中断向量表地址/Flash地址.Boot代码的地址分配默认.3.利用smartPro软件将APP.hex文件转化成APP.bin4.利用二进制软件,修剪无用数据5.先在smartpro2008中导入Boot.hex,再导入修剪过的app.bin,最后保存为Down.hex即可.注意,导入app.bin时,不要清除之前导入的Boot代码.同时注意导入的app.bin文件的Flash地址,导入到缓冲区的地址(器件地址)要对应跳转地址.五:SmartPRO2008的应用.1.该软件可作一般二进制处理软件使用.但其特别之处在于,它的显示区/缓冲区/器件存储区都是基于具体真实的芯片存储架构,所以比一般的二进制软件好操作芯片的存储.具体操作在此不说明,可单独联系我.六:声明/其它1:以上内容为个人观点,没有经过严格测试,如有使用,请使用者自行评估风险,出现问题本人一概不负责!2:技术交流:3228504429
本文标题:STM8S做IAP
链接地址:https://www.777doc.com/doc-2860987 .html