ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:357.85KB ,
资源ID:6987235      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6987235.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进一步掌握STVD和COSMIC.docx)为本站会员(buyk185)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

进一步掌握STVD和COSMIC.docx

1、如何分配变量到指定的地址举例:unsigned char temp_A0x00; /定义无符号变量 temp_A,强制其地址为 0x00unsigned char temp_B0x100; /定义无符号变量 temp_B,强制其地址为 0x100tiny unsigned char temp_C; /定义无符号变量 temp_C,由编译器自动在地址小于 0x100 的 RAM 中为其分配一个地址near unsigned char temp_D; /定义无符号变量 temp_D,由编译器自动在地址大于 0xFF 的 RAM 中为其分配一个地址另外也可以采用伪指令“pragma“将函数或者变量定

2、义到指定的 section 中,例如:#pragma section name / 将下面定义的未初始化变量定义到.name section 中Unsigned char data1;Unsigned int data2;(任何需要定义在.name section 中的变量)#pragma section / 返回到正常的 section.注意:pragma 伪指令可以用来定位函数,初始化变量或者未初始化变量。这三者用不同的括号区分。(name):代码name :未初始化变量name:初始化变量如何在 COSMIC C 文件中使用汇编语言在 COSMIC C 文件中使用汇编语言常见的方法有如下

3、两种:使用#asm #endasm 组合格式或_asm(“); 单行格式。举例 1:unsigned char temp_A;Void func1(void).#asmPUSH ALD A,(X)LD _temp_A,APOP A#endasm.注:在 C 嵌汇编环境下使用全局变量,要在该全局变量名称前加下划线“_“。举例 2:Void func1(void)._asm(“rim“);_asm(“nop“);.如何观察 RAM/FLASH/EEPROM 的最终分配情况在 Project-settings-linker 选项页中,将 Category 选为 Output,再勾选 Generate

4、 Map File。点击 OK 按键后,再次编译链接该项目,如果成功则会在项目输出目录中(本例是在 C:STM8_NewProject1debug 目录下)生成 .map 文件。该文件详细地列出 RAM/FLASH/EEPROM 的分配使用情况。如何生成 hex 格式的输出文件在 Project-settings-PostBuild 选项页中,在 commands 栏内加入下行命令:chex fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8再次编译链接该项目,如果成功则会在项目输出目录中(本例是在 C:S

5、TM8_NewProject1debug 目录下)生成 .hex 文件。什么是 MEMORY MODELSTM8 的 C 编译器支持多种存储器模式。用户可以根据应用的需要选择最适合的配置。可以根据需要选择采用 2 个字节的寻址方式(仅适用于 64k 以内的程序)或者 3 字节的寻址方式。也可以规定将变量默认为定义在存储器的哪一区域:zero page 内,还是 zero page 外。下面对几种供选择的 MEMORY MODEL 做简单说明。在 Project-settings-C Complier 选项页中,将 Category 选为 General,里面有一个 Memory Models

6、选项栏如下:在下拉菜单中共有 4 种 MEMORY MODEL 可供选择: 程序地址空间在 64K 以内(即程序容量小于 32K)mods0,modsl0 程序地址哦那个键在 64K 以上(即程序容量大于 32K)modsmodslMODS0 MODSL0 MODS MODSL名称 Stack Short短堆栈模式 Stack Long长堆栈模式 Stack Short短堆栈模式 Stack Long长堆栈模式程序地址空间 程序所用到的地址空间在 64K 范围内 程序所用到的地址空间超出 64K 范围指针默认类型 函数指针和数据指针默认为near (2 bytes) 函数指针默认为far(地址

7、为 3 字节);数据指针默认为near全局变量默认类型所有全局变量的地址默认为 1 个字节。对于地址超出 1 个字节的变量,必须用near 定义所有全局变量默认为Long 型。若要将变量地址定义为 1 个字节,必须用tiny 定义所有全局变量的地址默认为 1 个字节。对于地址超出 1 个字节的变量,必须用near 定义所有全局变量默认为Long 型。若要将变量地址定义为 1 个字节,必须用tiny 定义.lkf 文件的作用.lkf 文件在程序链接时决定如何具体分配 RAM/ROM 的空间。在 Project Settings Linker Category(Input)选项页中,当“Auto“

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

9、# 放于此段(-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)一个 EEPROM 段(.eeprom),开始(b)于 0x4000,最大分配(m)0x800 个字节(即不超#过 0x47FF),为该段起名(n)为. eeprom (和 EEPROM 段的保留字同名

10、 )。+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

11、 .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

12、.bss# 段定义结束,下面放置的库及 Obj 文件中的变量、常量、程序就按照上面的规定进行分配。#初始化程序crtsi0.sm8#用户程序Debugmain.o# 一些必要的 cosmic 库libis0.sm8libm0.sm8# 重定义常量段,开始于 0x8000,用于放置中断向量表(STM8 硬件决定此位置)# k 用于程序冗余代码优化,详情可参考 cosmic 用户手册。+seg .const -b 0x8000 k# 中断向量Debugstm8_interrupt_vector.o#定义了三个变量,用于系统初始化+def _endzp=.ubsct # end of uniniti

13、alized zpage+def _memory=.bss # end of bss segment+def _stack=0x17ff # 不同的芯片_stack 内容不同,由系统自动生成如何实现位操作Cosmic C 编译器支持位变量的操作,可以将其定义成 _Bool 类型。_Bool 类型的变量只包含两种值 true(1)或者 false(0 ) 。若将一个表达式赋值给_Bool 变量,则编译器会将表达式与 0 做比较,然后将布尔值赋给_Bool 变量。因此,任何整型或者表达式的值都可以赋给_Bool 变量。但是,布尔变量不能定义位数组,只能定义成结构体或者联合。而且,_Bool 变量会

14、被打包成字节的形式。编译器会将所有的全局_Bool 变量打包成字节形式,存放在.bit section 中。局部_Bool 变量也会被打包成字节形式。但是_Bool 类型的参数会被扩展成一个单字节。具体的关于位变量的定义和使用可参考如下例子:定义位变量:_Bool in_range;_Bool p_valid;char *ptr;使用位变量:in_range = (value = 10) p_valid = ptr; /* p_valid is true if ptr not 0 */if (p_valid & in_在使用位变量时,若程序编译时提示如下错误:#error clnk Debug

15、example.lkf:1 no default placement for segment .bitThe command: “clnk -l“C:Program FilesCOSMICCXSTM8_16K_4.2.10Lib“ -o Debugexample.sm8 -mDebugexample.map -sa Debugexample.lkf “ has failed, the returned value is: 1exit code=1.实际上是由于,在项目中没有定义.bit section。可按照如下步骤,手工添加.bit section:打开项目链接配置窗口:Project - Settings - Linker,选择 Input 目录项在 Zero page 或者 Ram 里面定义一个.bit section.然后重新编译一下就可以了。

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报