打印
[STM8]

STM8 RAM中运行代码出错

[复制链接]
1008|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supernan|  楼主 | 2017-7-25 23:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前在在IAP功能,FLASH编程使用BLOCK编程代码,这样就需要RAM中执行CODE,按照固件库说明 允许RAM中执行
沙发
kangzj| | 2017-7-25 23:37 | 只看该作者

楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
supernan|  楼主 | 2017-7-25 23:39 | 只看该作者


#if !defined (RAM_EXECUTION)
#define RAM_EXECUTION  (1)
#endif /* RAM_EXECUTION */

但是执行到FLASH_ProgramBlock(u32BlockAddr, FLASH_MEMTYPE_PROG, FLASH_PROGRAMMODE_STANDARD, pBuf);

就会重启死机

使用特权

评论回复
地板
supernan|  楼主 | 2017-7-25 23:40 | 只看该作者
编译的时候出现如下警告:

Warning[Ta005]: Library call (?mul32_l0_l0_l1) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 659
Warning[Ta005]: Library call (?add32_l0_l0_l1) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 659
Warning[Ta005]: Library call (?epilogue_l2) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 685
Warning[Ta005]: Library call (?mul32_l0_l0_l1) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 607
Warning[Ta005]: Library call (?add32_l0_l0_l1) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 607
Warning[Ta005]: Library call (?epilogue_l2) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 627
Warning[Ta005]: Library call (?dec32_l1_l1) from within a __ramfunc function E:\工程项目\ZBS-II\软件工程\STM8\BL\Lib\STM8S_StdPeriph_Driver\src\stm8s_flash.c 545

使用特权

评论回复
5
liuzaiy| | 2017-7-25 23:41 | 只看该作者

问题比较明显:IAR的库函数 mul32,add32等等位于FLASH里,从RAM里面的函数调用的IAR的库函数,所以出问题了。

使用特权

评论回复
6
supernan|  楼主 | 2017-7-25 23:42 | 只看该作者
mul32_l0_l0_l1 警告提示是下面这段代码
   
/* Point to the first block address */
    startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_SIZE);

怎么改呢

使用特权

评论回复
7
pangb| | 2017-7-25 23:44 | 只看该作者
目前在在IAP功能,FLASH编程使用BLOCK编程代码,这样就需要RAM中执行CODE,按照固件库说明 允许RAM中执行,具体如下:

#if !defined (RAM_EXECUTION)
#define RAM_EXECUTION  (1)
#endif /* RAM_EXECUTION */

在哪里有这个说明啊,能不能给个链接或贴出来

使用特权

评论回复
8
chenjunt| | 2017-7-25 23:46 | 只看该作者

我eeprom编程也出现了许多警告,请问怎么解决Warning[Ta005]: Library call (?mul32_l0_l0_l1) from within a __ramfunc function F:\registor\linshi\线切割\xqg-gaopin-code\TCIAR V1.1\FWlib\src\stm8s_flash.c 655

使用特权

评论回复
9
supernan|  楼主 | 2017-7-25 23:48 | 只看该作者
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝