嵌入式学习小组
直播中

王坤

7年用户 195经验值
私信 关注

请问如何在COSMIC C文件中使用汇编语言?

如何分配变量到指定的地址
如何在COSMIC C文件中使用汇编语言
如何观察RAM/FLASH/EEPROM的最终分配情况
如何生成hex格式的输出文件
什么是MEMORY MODEL
lkf 文件的作用
如何实现位操作

回帖(7)

云甫太

2020-11-20 14:42:43
  如何分配变量到指定的地址
  举例:
  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.
  注意:pragma伪指令可以用来定位函数,初始化变量或者未初始化变量。这三者用不同的括号区分。
  (name):代码
  [name] :未初始化变量
  {name}:初始化变量
举报

周娟

2020-11-20 14:42:56
  如何在COSMIC C文件中使用汇编语言
  在COSMIC C文件中使用汇编语言常见的方法有如下两种:使用#asm …#endasm组合格式
  或_asm(“…”); 单行格式。
  举例1:
  unsigned char temp_A;
  Void func1(void)
  {
  。..
  #asm
  PUSH A
  LD A,(X)
  LD _temp_A,A
  POP A
  #endasm
  。..
  }
  注:在C嵌汇编环境下使用全局变量,要在该全局变量名称前加下划线“_”。
  举例2:
  Void func1(void)
  {
  。..
  _asm(“rim”);
  _asm(“nop”);
  。..
  }
举报

陆兰兰

2020-11-20 14:43:56
如何观察RAM/FLASH/EEPROM的最终分配情况
在Project-》settings-》linker选项页中,将Category选为Output,再勾选Generate Map File。

点击OK按键后,再次编译链接该项目,如果成功则会在项目输出目录中(本例是在C:STM8_NewProject1debug 目录下)生成 .map 文件。该文件详细地列出RAM/FLASH/EEPROM的分配使用情况。
举报

李志静

2020-11-20 14:44:06
  如何生成hex格式的输出文件
  在Project-》settings-》PostBuild选项页中,在commands栏内加入下行命令:
  chex -fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8
  再次编译链接该项目,如果成功则会在项目输出目录中(本例是在C:STM8_NewProject1debug 目录下)生成 .hex 文件。
  生成S19格式的输出文件
  chex -o $(OutputPath)$(TargetSName).s19 $(OutputPath)$(TargetSName).sm8
举报

更多回帖

发帖
×
20
完善资料,
赚取积分