要修改.lkf 文件。

ST 有个中文文档: 如何基于STM8S系列MCU进行项目开发

页29/34

当“Auto”选择框被勾选时,.lkf文件会自动生成在项目主目录下的 debug/ 和 release/ 目录中。下面以上图所示 io_test Project的 lkf 文件为例,来进一步理解.lkf 。在.lkf中,以“#”开头的行是注释行,为方便用户理解,将原注释删除,代之以中文注释如下:
# 定义(+seg)一个常量段(.const),开始(b)于0x8080,最大分配(m)0x1ff80个字节(即不超过
# 0x27FFF),为该段起名(n)为.const(和常量段的保留字同名),需要初始化的变量的初始值存
# 放于此段(-it)
+seg .const -b 0x8080 -m 0x1ff80 -n .const -it

# 定义(+seg)一个程序段(.text),紧跟(-a)在.const段后面(和.const 共同位于0x8080 –
# 0x27FFF),为该段起名(n)为. text (和程序段的保留字同名)。
+seg .text -a .const -n .text
# 定义(+seg)一个程序段(.text),紧跟(-a)在.const段后面(和.const 共同位于0x8080 –
# 0x27FFF),为该段起名(n)为. text (和程序段的保留字同名)。
+seg .text -a .const -n .text

# 定义(+seg)一个EEPROM段(.eeprom),开始(b)于0x4000,最大分配(m)0x800个字节(即不超
#过0x47FF),为该段起名(n)为. eeprom (和EEPROM段的保留字同名)。
+seg .eeprom -b 0x4000 -m 0x800 -n .eeprom

# .bsct段服务于定义在0页(地址小于0x100)以内需要初始化的全局变量(如@tiny char a = 9;)
+seg .bsct -b 0x0 -m 0x100 -n .bsct

# .ubsct段服务于定义在0页(地址小于0x100)以内不需要初始化的全局变量(如@tiny char b;)
+seg .ubsct -a .bsct -n .ubsct

# .bit表示位域段,定义后即可在程序中使用_Bool变量(如_Bool c = 1;),-id表示该段需要初始
化。
+seg .bit -a .ubsct -n .bit -id

# 这是ST7时代(STM8是基于ST7发展而来的)由于物理堆栈小,速度慢,使用内存来模拟堆栈
的变通手段。
+seg .share -a .bit -n .share -is

# .data段服务于定义在0页(地址大于0xFF)以外需要初始化的全局变量(如@near char d = 8;)
+seg .data -b 0x100 -m 0x1300 -n .data

# .bss段服务于定义在0页(地址大于0xFF)以内不需要初始化的全局变量(如@ near char e;)
+seg .bss -a .data -n .bss

# 段定义结束,下面放置的库及Obj文件中的变量、常量、程序就按照上面的规定进行分配。
#初始化程序
crtsi0.sm8
#用户程序
Debug\main.o

# 一些必要的cosmic库
libis0.sm8
libm0.sm8

# 重定义常量段,开始于0x8000,用于放置中断向量表(STM8硬件决定此位置)
# –k 用于程序冗余代码优化,详情可参考cosmic用户手册。
+seg .const -b 0x8000 –k
# 中断向量
Debug\stm8_interrupt_vector.o

#定义了三个变量,用于系统初始化
+def __endzp=@.ubsct
# end of uninitialized zpage
+def __memory=@.bss # end of bss segment
+def __stack=0x17ff # 不同的芯片__stack内容不同,由系统自动生成

3 进一步掌握STVD/COSMIC
3.1 如何分配变量到指定的地址
举例:
unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00
unsigned char temp_B@0x100; //定义无符号变量temp_B,强制其地址为0x100
@tiny unsigned char temp_C; //定义无符号变量temp_C,由编译器自动在地址小于0x100的RAM中为其分配一个地址
@near unsigned char temp_D; //定义无符号变量temp_D,由编译器自动在地址大于0xFF的RAM中为其分配一个地址
另外也可以采用伪指令“pragma”将函数或者变量定义到指定的section中,例如:
#pragma section [name] // 将下面定义的未初始化变量定义到.name section中
Unsigned char data1;
Unsigned int data2;

……(任何需要定义在.name section中的变量)
……
#pragma section [] // 返回到正常的section.
(关于section的定义方法可以参考3.7节的描述。)

注意:pragma伪指令可以用来定位函数,初始化变量或者未初始化变量。这三者用不同的括号区分。
(name):代码
[name] :未初始化变量
{name}:初始化变量

在.lkf中加入你自定义的段 比如叫 .myflash,在c程序中使用#pragma section(myflash) ,紧随其后的代码就放到指定的myflash限定的地址中去了

谢谢.问题已经解决.楼上各位大侠说得都在理.问题是我要在IDE方式下处理段的定位问题.目前我已经找到解决方法,如下:
1) 在ST IDE 的工程下,(按SHIFT+F7或选择菜单Project->settings)
2) 选择linker属性页
3)在category下拉菜单下选input
4)(门道在这) 在segment/section name表格中按鼠标右键选add segment,然后新建一个段,修改段的起始地址和结束地址
5)然后在新的段中按鼠标右键选add section 加入程序中已经定义好的片段APP_CODE
程序中的开始部分定义的,如下
#pragma section (APP_CODE)
#pragma section const {APP_CONST}

编译后如下

--------
Segments
--------

start 00004000 end 00004001 length 1 segment .eeprom
start 00000000 end 0000000a length 10 segment .bsct, initialized
start 0000808d end 00008097 length 10 segment .bsct, from
start 0000000a end 000000ac length 162 segment .ubsct
start 000000ac end 000000ac length 0 segment .bit
start 000000ac end 000000ac length 0 segment .share
start 00000100 end 00000100 length 0 segment .data
start 00000100 end 00000100 length 0 segment .bss
start 00000100 end 000003f1 length 753 segment .FLASH_CODE, initialized
start 00008097 end 00008388 length 753 segment .FLASH_CODE, from
start 00008080 end 00008080 length 0 segment .const
start 00008388 end 00008924 length 1436 segment .IAP_CODE
start 00008924 end 00008968 length 68 segment .IAP_CONST
start 00009c00 end 00009cc0 length 192 segment .MYINTER_CODE
start 00009cc0 end 0000a398 length 1752 segment .text
start 0000a398 end 0000bba6 length 6158 segment .APP_CODE
start 0000bba6 end 0000c6da length 2868 segment .APP_CONST
start 00000000 end 0002beef length 179951 segment .debug
start 00008000 end 00008080 length 128 segment .const
start 00008080 end 0000808d length 13 segment .init

转载于:https://www.cnblogs.com/zhangshenghui/p/6424151.html

(八) stm8程序段定位,理解lkf文件相关推荐

  1. 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)

    原文:解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译) 解剖SQLSERVER 第八篇  OrcaMDF 现在支持多数据文件的数据库(译) http://improve ...

  2. 【C++探索之旅】第一部分第八课:传值引用,文件源头

    内容简介 1.第一部分第八课:传值引用,文件源头 2.第一部分第九课预告:数组威武,动静合一 传值引用,文件源头 这一课的标题有点怪.其实是由这一课的几个重点内容结合起来取的名,慢慢学习就知道啦. 上 ...

  3. 深入理解:文件、二进制、字符集(编码)三者之间的区别与联系

    深入理解:文件.二进制.字符集又称编码,三者之间的区别与联系 一·为什么计算机底层要使用二进制存储数据? 二·如何使用二进制来表示世界上的各种信息与符号? 三·那二进制又与文件.字符集之间有什么关系呢 ...

  4. cmd窗口快速定位到具体文件夹方法

    在用Python进行机器实战时,打开cmd窗口后,总是到定位到kNN.py所在文件夹才能Python(否则import kNN失败),每次都要输入地址非常麻烦 这里介绍一个cmd窗口快速定位到具体文件 ...

  5. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  6. mac Finder中快捷打开终端并定位到当前文件夹

    最近发现了mac上的一个小工具,它能快捷的打开终端并定位到当前文件夹 下载地址https://github.com/jbtule/cdto/releases/tag/2_6_0 下载后找到termin ...

  7. 高德地图八:手机定位和GPS定位

    高德地图八:手机定位和GPS定位 高德地图八:手机定位和GPS定位 代码实现: layout/activity_main.xml <?xml version="1.0" en ...

  8. tf第八讲:global_step理解与指数衰减学习率

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  9. 【甄选靶场】Vulnhub百个项目渗透——项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析)

    Vulnhub百个项目渗透 Vulnhub百个项目渗透--项目十八:pwnlab_init(LFI本地文件包含,PHP伪协议,文件上传绕过,逆向分析) 靶场地址

最新文章

  1. PDO绑定含IN的SQL语句的参数注意事项
  2. JavaScript 技术篇-chrome利用ClipboardEvent写入剪切板,chrome写入剪切板不成功解决方法
  3. 图像处理理论(五)——SIFT
  4. aws s3 命令行_通过命令行界面使用AWS ElasticMapReduce
  5. Micsorft文档阅读笔记-Run-Time Type Information解析及使用
  6. iOS推送机制下AppDelegate中代理函数执行顺序
  7. 索引、视图和同义词、序列
  8. 【集成电路 - -芯片】
  9. 路由器不开机——维修更换MT7621AT CPU
  10. 【leetCode】69. x 的平方根
  11. pdf打印机如何加密pdf文件?
  12. 【修真院java小课堂】代码生成
  13. 2020年中高级Android面试秘籍(Android基础篇)
  14. 【Android学习】图片
  15. micropython 常量_MicroPython添加Module(二)
  16. telegram怎么改密码?
  17. 在微信小程序中编写金额摇奖效果
  18. android webview epub,《webview实现epub阅读器详解》.pdf
  19. iOS获取汉字拼音首字母的方法
  20. 【无标题】SQL Server2019配置管理器MMC无法创建管理单元,谁知道怎么解决

热门文章

  1. Java获得泛型类中T的实例
  2. 全国计算机一级考试的练题软件,2017全国计算机一级考试WPS备考练习题
  3. fft谱分析的误差有哪些原因造成的?如何减小分析误差。_回归分析 | 闯荡数据江湖的武功秘籍...
  4. 面试必备算法题集之「动态规划」Ⅰ
  5. L2-005 集合相似度-PAT团体程序设计天梯赛GPLT
  6. java map集合遍历方法,Java的Map集合的三种遍历方法
  7. wgs84坐标格式转换度分秒_一起爬山吗?寻找GIS坐标系统中“隐秘的角落”
  8. 分享你的见解与经验|RocketMQ Summit 2022 议题征集中
  9. 计算机系统结构总概,计算机系统结构概论
  10. c++ 计算正弦的近似值_数值计算笔记1·基本知识