OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12044|回复: 2

STM8L FLASH 读写问题

[复制链接]

12

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2014-3-6
在线时间
31 小时
发表于 2014-9-1 14:07:54 | 显示全部楼层 |阅读模式
5金钱
写了个stm8l52c6 的block读写代码,用的是IAR.按照官方提示步骤更改过RAM方面的配置:
- For IAR Compiler:
    1- Define a location FLASH_CODE before each code function by the mean of 
    " #pragma location = "FLASH_CODE"".
    This location is defined in the stm8l15x_flash.c file, and it's conditionned
    by IAR_RAM_EXECUTION definifition.
  2- Uncomment the "#define IAR_RAM_EXECUTION  (1)" line in the stm8l15x.h file,
    or define it in IAR compiler preprocessor to enable the FLASH_CODE location 
    definition.
  3- Edit the linker file lnkstm8l15xxx.icf available under 
    "$\IAR Systems\Embedded Workbench 6.0\stm8\config\lnkstm8l15xxx.icf"
       by updating the line "initialize by copy { rw, ro section .tiny.rodata };"
       with the the following one:
       "initialize by copy { rw, ro section .tiny.rodata, section FLASH_CODE};".
  4- The speed optimization is required to ensure proper execution from RAM.
    -> In IAR Embedded workbench IDE Select Project\Options\C/C++ Compiler\Optimizations
    select speed optimization
代码如下:

#pragma location="MY_RAM_FUNC"

void LPR_Ram(void)

  uint8_t i = 0;

/* To reduce consumption to minimal 
  Swith off the Flash */
  FLASH->CR1 = 0x08;
  while(((CLK->REGCSR)&0x80)==0x80);

/* Swith off the Regulator*/
  CLK->REGCSR = 0x02;
  while(((CLK->REGCSR)&0x01)==0x01);

/* Set trigger on GPIOE pin6*/ 
  WFE->CR2 = 0x04;
  GPIOE->CR2 = 0x44;
  
  for (i=0; i<100; i++);

/* To start counter on falling edge*/
//  GPIO_LOW(CTN_GPIO_PORT,CTN_CNTEN_GPIO_PIN);
  
/*Wait for end of counter */
  wfe();
  
  EXTI->SR1 |= 0x40;
  WFE->CR2 = 0x00;
  
  //Switch on the regulator
  CLK->REGCSR = 0x00;
  while(((CLK->REGCSR)&0x1) != 0x1);
}

lnkstm8l152c6.icf
initialize by copy { rw section .far.bss,
                     rw section .far.data,
                     rw section .far_func.textrw,
                     rw section .huge.bss,
                     rw section .huge.data,
                     rw section .huge_func.textrw,
                     rw section .iar.dynexit,
                     rw section .near.bss,
                     rw section .near.data,
                     rw section .near_func.textrw,
                     rw section .tiny.bss,
                     rw section .tiny.data,
                     ro section .tiny.rodata, section MY_RAM_FUNC
                     };
Embedded Workbench 6.5里面加了这个

运行之后
Error[Lc036]: no block or place matches the pattern "ro code section MY_RAM_FUNC_init in lowpower.o" 
Error[Lc036]: no block or place matches the pattern "rw code section MY_RAM_FUNC in lowpower.o" 


这个是什么原因呢?有没有遇到过这样的问题,改怎么解决啊?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-9-1 22:58:23 | 显示全部楼层
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-9-1
在线时间
0 小时
发表于 2014-9-10 16:14:29 | 显示全部楼层
楼主解决了吧?突然发现 这个论坛里面,好多人提问的都没有解决哦,我是新手,还没有学到flash,帮不到你。遗憾?
谦虚使人退步,短暂的激情是不值钱的,持久的激情才是赚钱的!持续改善LED电子技术研发!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 18:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表