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

Posted 陈爽的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
}

以上是关于STVP编译时遇到no default placement for segment .FLASH_CODE的主要内容,如果未能解决你的问题,请参考以下文章

Vivado Synth/Place Faild但是没有给出error信息

stm8s003f3在上电时出错,必须重新烧写程序,而且,无法直接用IAR+STLink烧写,得先用STVP重设OptionByte

STVP烧录出现Verify failed at address 0x1000

STM8S 单片机通过 STVP下载程序后无法自动复位运行

交叉编译遇到bin/ld: cannot find crt1.o: No such file or directory问题解决

交叉编译遇到bin/ld: cannot find crt1.o: No such file or directory问题解决