IAR for STM8 研究

发布者:hxcp18最新更新时间:2018-06-02 来源: eefocus关键字:IAR  STM8 手机看文章 扫描二维码
随时随地手机看文章

最近移植了一个UCOSII到STM8L,先从编译器谈起。

由于IAR与VC++很像,所以直接就选用了它。

1. 函数参数传递

了解到它用了16个虚拟寄存器(也可以配置成12个)作为局部变量和函数参数传递。地址从0x00~0x0F。从MAP文件中可以看到。注意0地址是RAM的,所以函数中对指针的判断要特别注意。

从调试时反汇编的代码可以看到,C函数调用开始前都需要调用系统的一些函数用于保存参数,但在汇编里的函数就必须自己保存。比如中断回调函数:

汇编:

         PUBLIC _interrupt_29            //UART_TXE irq
        SECTION `.far_func.text`:CODE:NOROOT(0)
_interrupt_29:          //vector number on datasheet + 2, don't ask me why. zhw  
        SAVE_VREGS  //这个非常重要,由于有C函数调用,编译器会用到VREGS
         CALLF     UART_TxEmptyIrqHandler
        RESTORE_VREGS         
         IRET
       

其中宏:

SAVE_VREGS  MACRO        
        push s:?b0
        push s:?b1
        push s:?b2
        push s:?b3
        push s:?b4
        push s:?b5
        push s:?b6
        push s:?b7 
        push s:?b8
        push s:?b9
        push s:?b10
        push s:?b11
        push s:?b12
        push s:?b13
        push s:?b14
        push s:?b15 
        ENDM       


RESTORE_VREGS  MACRO     
        pop s:?b15
        pop s:?b14
        pop s:?b13
        pop s:?b12
        pop s:?b11
        pop s:?b10
        pop s:?b9
        pop s:?b8      
        pop s:?b7
        pop s:?b6
        pop s:?b5
        pop s:?b4
        pop s:?b3
        pop s:?b2
        pop s:?b1
        pop s:?b0            
        ENDM  

C函数:

#pragma vector = 29        
 __interrupt void Irq_UARTTxHandler ( void )
{
   
    UART_TxEmptyIrqHandler();
}


看起来C代码简洁,但实际从实际效率来看,汇编的效率更好。


2. 环境配置

主要是配置你选用的芯片型号。另外还有系统堆栈大小和堆的大小。根据实际配置可节省RAM空间。如果要编译库(如FWLIB)也是在Options里面配置。


关键字:IAR  STM8 引用地址:IAR for STM8 研究

上一篇:IAR ARM、IAR STM8、IAR MSP430共用一个IDE
下一篇:stm8 ADC模数转换

推荐阅读最新更新时间:2024-03-16 16:04

STM8 4线驱动1602乱码
近段时间用STM8驱动1602,采用4线方式,首次上电出现乱码,现在网上找到解决方法,做此总结。 网上大佬分析,出现乱码原因是在单片机发送0x28初始化时,高4位发送就已经完成初始化,低4位发送导致出现乱码,需要延时后再初始化可解决。这位大佬提供的方法确实可以解决问题,但感觉问题应该不在这,具体原因还没得出。 #include iostm8s105k4.h #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef
[单片机]
STM8 UART中断发,中断收
STM8 UART 初始化 配置STM8 UART的几个常用寄存器分别为: UART1_CR1:控制寄存器1 UART1_CR3:控制寄存器3 UART1_BRR2:波特率寄存器2 UART1_BRR1:波特率寄存器1 利用控制寄存器1,2,3可以配置UART数据传输的具体帧格式,这里将UART配置为1个起始位,8个数据位,1个停止位,无校验位。具体操作代码如下: UART1_CR1=0x00; UART1_CR3=0x00; 在UART1_CR1中第4位,定义了数据字的长度,该位写0将设置UART为一个起始位,8个数据位,n个停止位,停止位n的数量可在UART1_CR3中设置。 UART1_CR
[单片机]
**解决STLINK V2烧过JLINK OB,恢复后不能识别STM8**
我手上的stlink v2是在正点原子那买开发板一块买的,这个是他们自己做的,不和官方的完全一样,实际使用时不能识别STM32L4系列的片子,后来发现拆机刷成JLINK OB的可以用了,但只能在ST家芯片上用SWD模式,速度4mhz,完全够用了;刷成CMSIS-DAP也可以用,还可以支持其他家的ARM,速度低些只有1mhz。指示灯好像都不正常,但这都不是事 后来有项目用STM8S的片子,这个只能用SWIM口调试,所以准备刷回来,看到有官方的恢复软件“STLinkReflash.exe”,所以没拆机(问题就在这),刷了后在stm32上一切正常,但是就是不识别STM8的片子,通过官方软件“ST-LinkUpgrade.exe”升级固
[单片机]
**解决STLINK V2烧过JLINK OB,恢复后不能识别<font color='red'>STM8</font>**
STM8 I2C从机
宏定义 #define SLAVE_ADDR 0x51 #define I2CSPEED 400000 //i2c速度 stm8l051 i2c从机初始化 /* I2C clock Enable*/ CLK_PeripheralClockConfig(CLK_Peripheral_I2C1, ENABLE); I2C_DeInit(I2C1); I2C_Init(I2C1, I2CSPEED, SLAVE_ADDR , I2C_Mode_I2C, I2C_DutyCycle_2, I2C_Ack_Enable, I2C_AcknowledgedAddress_7bit); /*
[单片机]
STM8 UART2
#include stm8s.h #include stm8s_conf.h #include UART2.h #include stdarg.h void UART2_Config(u32 Rate) { CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE); GPIO_Init(UART2_PORT, TX2_PIN, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(UART2_PORT, RX2_PIN, GPIO_MODE_IN_PU_NO_IT); UART2_Init(Rate, U
[单片机]
STM8控制LCD12864液晶屏实验
第一部分 并口传输显示中英文 主要是以下几个函数: 首先:写一个LCD_write函数来给LCD发送数据.根据时序图,发送数据是RW要置0,E要产生下降沿,RS置1为数据,RS置0为命令,由于是并口传输PSB置1. 其次:能够给LCD发命令后,我们就要使用LCD_init函数发送初始化命令。初始化命令至少包括:1、设置显示,2、功能设定,3、初始化清屏3个部分。 写命令时注意每个命令都有自己的运行时间,记得保证足够延时。 第三:写一个LCD_display函数可以分行分列显示内容。 void LCD_write(u8 data,u8 cmd_flag); void LCD_init(void); void LCD_
[单片机]
<font color='red'>STM8</font>控制LCD12864液晶屏实验
IAR编译器的常见问题
最近因为项目需要开始使用IAR for AVR,我用的是5.40版本的,主要是5.40以上才包括了aTtiny87,至于安装文件和和谐文件,大家自己找吧,很好找的。 1.编译报错如图所示: 很显然你没有使能寄存器的位定义。方法如下:Project Option General Options System(如下图所示),勾选 Enable bit definitions in I/O-Include files即可 2.MCU型号选择 如果和我一样都次都是以空工程创建的话,不过忘了第一步先进Project Option General Options Target选择所使
[单片机]
<font color='red'>IAR</font>编译器的常见问题
IAR Systems发布支持Freescale ColdFire微处理器的集成开发工具套件
IAR YellowSuite for ColdFire微处理器集成了设计流程中所有必需的开发工具,从项目初始就致力于提高设计流程效率,最大可能地缩短开发时间。这套开发工具包含:IAR Embedded Workbench集成开发环境;IAR visualSTATE建模工具;IAR PowerPac 实时操作系统、 文件系统以及配套中间件;IAR KickStart Kit开发套件。 IAR Systems的产品总监Mats Ullstrm表示:“与Freescale战略合作,在现有的产品线上增加ColdFire开发套件,是IAR Systems的一个里程碑。我们相信对Flexis QE128系列与IAR YellowSuite配
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
    做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下 :1、学习A ...
  • 学习ARM开发(2)
    天是星期天,刚好在家里休息。又是学习ARM的大好时机了。早上起得很早,因为都想着怎么样搞好这个ARM开发环境,总是心急的。搞得睡觉,也睡 ...
  • 学习ARM开发(4)
    已经把CPU大体架构学会了,当然我之前已经学习过80X86的结构,所以对于像RISC的计算机,也能想像到它是什么样的东西。如果没有学习过《微机 ...
  • 学习ARM开发(6)
  • 学习ARM开发(7)
  • 学习ARM开发(8)
  • 学习ARM开发(9)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved