STVP编译时遇到no default placement for segment .FLASH_CODE

最近编译STM8S003时需要使用flash库函数,看起来简单,实则折腾了超过1天。今天总结方法如下:

1.修改stm8s.h 156行  #define RAM_EXECUTION  注释去掉  如果用的是COSMIC这个 可以不去

2、在project的source和include files中添加 stm8s_flash文件

3.右键点击项目文件,选择settings->linker->category->Input,然后Code,constants那一区域添加.FLASH_CODE,注意要大写!

此时使用flash的函数不会再报错了。

至于在主文件中#include "stm8s_flash.h" 这个是没有必要的。

 

//读E2pRom
void Read_EEPROM(void)
{
//EEPROM解除保护。
FLASH_Unlock(FLASH_MEMTYPE_DATA);

//若EEPROM的首地址即第一个字节是标志字节,可知之前向EEPROM中写入过数据,应读出。
if(FLASH_ReadByte(EEPROM_HEAD_ADDR)==FLAG_VALIDDATA)//0,1,2
{
//2个字节的数据从EEPROM中读出 。
lastsavestate[0]= FLASH_ReadByte(EEPROM_HEAD_ADDR);//补水仪
lastsavestate[1]= FLASH_ReadByte(EEPROM_HEAD_ADDR+1);//按摩棒
}else {
lastsavestate[0]=0;
lastsavestate[1]=0;
}

//EEPROM加上保护。
FLASH_Lock(FLASH_MEMTYPE_DATA);
}

//写E2prom
void Write_EEPROM(void)
{
//EEPROM解除保护。
FLASH_Unlock(FLASH_MEMTYPE_DATA);

//STM8S003F3一共有128字节的EEPROM空间。
//写入前,全部擦除。
FLASH_EraseBlock(0,FLASH_MEMTYPE_DATA); //擦除块
//在EEPROM的首地址写入标志字节,表示EEPROM被使用过,内有有效数据。
FLASH_ProgramByte(EEPROM_HEAD_ADDR, FLAG_VALIDDATA);

FLASH_ProgramByte((EEPROM_HEAD_ADDR),lastsavestate[0]);
FLASH_ProgramByte((EEPROM_HEAD_ADDR+1),lastsavestate[1]);
//EEPROM加上保护。
FLASH_Lock(FLASH_MEMTYPE_DATA);
}

转载于:https://www.cnblogs.com/csaaa/p/6599168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值