打印
[STM8]

RAM运行代码出错

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

使用特权

评论回复
沙发
renyaq| | 2022-4-15 23:12 | 只看该作者
楼主详细说说怎么回事啊,这么说太笼统了

使用特权

评论回复
板凳
supernan|  楼主 | 2022-4-15 23:13 | 只看该作者

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

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

就会重启死机

使用特权

评论回复
地板
supernan|  楼主 | 2022-4-15 23:18 | 只看该作者
编译的时候出现如下警告:

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
pengf| | 2022-4-15 23:18 | 只看该作者
问题比较明显:IAR的库函数 mul32,add32等等位于FLASH里,从RAM里面的函数调用的IAR的库函数,所以出问题了。

使用特权

评论回复
6
supernan|  楼主 | 2022-4-15 23:22 | 只看该作者

mul32_l0_l0_l1 警告提示是下面这段代码
   
/* Point to the first block address */
    startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_SIZE);

怎么改呢

使用特权

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

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

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

使用特权

评论回复
8
pengf| | 2022-4-15 23:24 | 只看该作者
我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|  楼主 | 2022-4-15 23:28 | 只看该作者
搞定了,呵呵,犯了低级错误…

使用特权

评论回复
10
SantaBunny| | 2023-3-3 13:06 | 只看该作者
通常调用到自带库函数都定义在FLASH区的,若要在RAM里执行,尽量避免调用自带库的函数

使用特权

评论回复
11
Bblythe| | 2024-4-5 07:07 | 只看该作者

超出 120 个字节则必须用 idata 显式的指定为间接寻址

使用特权

评论回复
12
周半梅| | 2024-4-5 09:03 | 只看该作者

靠近功率开关管或整流器的电容分到的纹波电流远多于相距较远的电容分到的纹波电流

使用特权

评论回复
13
Pulitzer| | 2024-4-5 10:06 | 只看该作者

small 模式下未指存储类型的变量默认为data型

使用特权

评论回复
14
童雨竹| | 2024-4-5 12:02 | 只看该作者

离线式变换器

使用特权

评论回复
15
Wordsworth| | 2024-4-5 13:05 | 只看该作者

一般要进行内存优化,尽量提高内存的使用效率

使用特权

评论回复
16
Clyde011| | 2024-4-5 14:08 | 只看该作者

让尽可能多的变量使用直接寻址,提高速度

使用特权

评论回复
17
公羊子丹| | 2024-4-5 15:01 | 只看该作者

经变压器映射成这么多节点

使用特权

评论回复
18
万图| | 2024-4-5 16:04 | 只看该作者

访问时采用不同的指令,所以并不会占用 RAM 空间

使用特权

评论回复
19
Uriah| | 2024-4-5 17:07 | 只看该作者

极限情况下可以定义的变量可占 247 个字节

使用特权

评论回复
20
帛灿灿| | 2024-4-5 19:03 | 只看该作者

51 单片机不使用线性编址

使用特权

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

本版积分规则

730

主题

10412

帖子

6

粉丝