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);
}

时间: 2024-11-07 03:22:23

STVP编译时遇到no default placement for segment .FLASH_CODE的相关文章

Android混淆编译时,用到gson-2.2.2.jar进行反射解析json数据时,报ClassCastException错误

在我的代码中,我使用方法是: public synchronized <T> T parseJson(String json, Class<T> classOfT) throws Exception{ T target = null; Gson gson = new Gson(); target = gson.fromJson(json, classOfT); return target; } 之后在我的Activity中使用方式是: String addModel = JsonP

现代 C++ 编译时 结构体字段反射

基于 C++ 14 原生语法,不到 100 行代码:让编译器帮你写 JSON 序列化/反序列化代码,告别体力劳动.?? 本文不讨论完整的 C++ 反射技术,只讨论结构体 (struct) 的字段 (field) 反射,及其在序列化/反序列化代码生成上的应用. 正文开始于 [sec|静态反射] 部分,其他部分都是铺垫..可以略读... 背景(TL;DR) 很多人喜欢把程序员称为 码农,程序员也经常嘲讽自己每天都在 搬砖.这时候,大家会想:能否构造出一些 更好的工具,代替我们做那些无意义的 体力劳动

linux下编译时的默认库和头文件搜索路径

链接库路径 默认的链接库路径,定义在搜索/etc/ld.so.conf下的一些路径,其包含了一些重要的系统位置:LIBRARY_PATH, 但如果定义了LD_LIBRARY_PATH, 动态库的搜索路径会先去该环境变量下搜索 但如果定义了LIBRARY_PATH, 静态库的搜索路径会先去该环境变量下搜索 默认的头文件位置 还没找到默认头文件定义的配置文件,与系统,编译器等都有关系,但可以通过以下命令查看 cpp -v /dev/null -o /dev/null 除此之外,可以通过设置C_INC

java--自定义注解(注解在编译时生效)

转:https://www.cnblogs.com/yaoxiaowen/p/6753964.html 若注解在运行时(Runtime)通过反射机制来处理注解,既然是Runtime,那么总会有效率上的损耗,如果我们能够在编译期(Compile time)就能处理注解,那自然更好,而很多框架其实都是在编译期处理注解,比如大名鼎鼎的bufferknife,这个过程并不复杂,只需要我们自定义注解处理器(Annotation Processor)就可以了.(Annotation Processor下文有

MISP版本嵌入式QT编译时出现mips-linux-gcc command not found

configure的时候都没什么问题我的configure是:./configure -prefix /opt/qt-jz -xplatform qws/linux-mips-g++ -embedded mips  configure顺利的过了,但是当make的时候,出现了mips-linux-gcc :Commond not fount! 我装的是mipsl-linux-gcc ,而且已经交叉编译过了个hello world了.. make时出现的错误是:make[1]: Entering d

Eclipse编译时Cannot run program &quot;make&quot;:?????

在确定环境变量配置正确(命令行运行make成功)的情况下,如果使用Eclipse编译C程序,控制台报告Cannot run program "make":?????"?错误,那么很有可能的错误是org.eclipse.cdt.core.win32_5.2.0.201202111925 (Eclipse的plugin目录下)出现了错误.可以通过替换或者重新安装CDT来解决这个问题. 参考:http://bbs.csdn.net/topics/380228213 Error: C

php安装编译时 configure: error: Cannot find OpenSSL&#39;s &lt;evp.h&gt;

=============================================== yum install error: protected multilib versions error===============================================sudo yum downgrade openssl 降级sudo yum install openssl-devel ===另外参考====================================

STM32初学Keil4编译时出现 Error:Failed to execute &#39;BIN40/Armcc&#39;

一种是在系统开始--运行里输入cmd,查看armcc状态.详情见推文: http://blog.csdn.net/hicui/article/details/7350805(笔记记录,请勿见怪) 都没有问题的话,那么可以尝试: 在keil里的菜单栏依次选择Project->Manage->Components,Environment andBooks(CEB)(或者直接点击工具栏的图标), 然后在CEB里选择Folders/Extensions标签页,在RealView Folder里选择ke

基于mipsel编译Qt4.6.2版本(有具体参数和编译时遇到的问题)

1.使用的configure配置为:./configure -embedded mips -little-endian -xplatform qws/linux-mips-g++ -prefix /opt/qte462-mips -release -opensource -confirm-license -webkit -qt-zlib -qt-libpng -qt-libjpeg -qt-gif -I$QTDIR/include/libz -L$QTDIR/lib -no-qt3support