历史上的今天
返回首页

历史上的今天

今天是:2025年06月02日(星期一)

正在发生

2018年06月02日 | IAR for STM8 研究

2018-06-02 来源:eefocus

最近移植了一个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里面配置。


推荐阅读

史海拾趣

American Power Management Inc公司的发展小趣事

在电子行业的初期,APMI以一家小型创业公司的身份出现,专注于电源管理技术的研发。当时,市场上的电源管理产品普遍存在效率低下、体积庞大的问题。APMI的研发团队通过深入研究,成功开发出了一款高效、紧凑的电源管理芯片,这一创新为电子产品的小型化和节能化奠定了基础。随着技术的不断完善和推广,APMI逐渐在电源管理领域崭露头角,吸引了众多合作伙伴和投资者的关注。

Exar公司的发展小趣事

Exar公司从一个小型创业公司起步,凭借其独特的技术和创新的思维,在电子行业中崭露头角。公司初期专注于数据传输和存储技术的研发,通过不断的技术创新和产品优化,逐渐在市场上建立起良好的口碑。随着公司规模的扩大,Exar开始涉足更多的领域,包括网络通信、消费电子等,逐步发展成为一家跨行业的综合性企业。

意普(ESPE)公司的发展小趣事

作为一家有社会责任感的企业,意普(ESPE)公司始终关注环保和可持续发展。公司采用环保材料和生产工艺,减少了对环境的污染。同时,公司还积极参与社会公益活动,为社会做出了积极贡献。这些举措不仅提升了公司的社会形象,也为企业的长期发展奠定了良好的社会基础。

上海双岭电子(Double-peak)公司的发展小趣事

随着市场的不断扩大,双岭电子逐渐意识到品质对于企业长远发展的重要性。因此,公司投入大量资源加强品质管理,建立了完善的质量检测体系,并对全体员工进行品质意识培训。通过不懈的努力,双岭电子的产品质量得到了显著提升,赢得了客户的广泛赞誉。同时,公司还积极参与国际标准化组织的认证工作,为进一步提升品牌影响力奠定了基础。

高通(GENITOP)公司的发展小趣事

随着全球市场的不断拓展,超霸电池的销售网络遍布亚洲、欧洲和北美等多个国家和地区。公司始终坚持绿色环保的生产理念,研发出无汞无镉的电池产品,可随生活垃圾丢弃而不会对环境造成影响。此外,超霸电池还积极参与环保事业,旗下多家工厂获得了UL美国安全试验所废弃物零填埋认证。这些举措不仅彰显了超霸电池的社会责任感,也为其在国际市场上树立了良好的品牌形象。

CP Technology Inc公司的发展小趣事

随着公司规模的不断扩大,CP Technology Inc开始实施全球化战略。公司在海外设立了研发中心和销售网络,以更好地服务全球客户。同时,公司还积极参与国际电子行业的交流与合作,不断提升自身的技术水平和市场竞争力。

问答坊 | AI 解惑

MSP430系列FLASH型超低功耗16位单片机.rarrar

MSP430系列FLASH型超低功耗16位单片机.…

查看全部问答>

常用电子元器件的检测

常用电子元器件的检测…

查看全部问答>

vs2005开发PDA,调试程序时,用模拟器实验,连数据库IP地址设置为127.0.0.1用户sa密码为空,为什么连接不上,请指点。

vs2005开发PDA,调试程序时,用模拟器实验,连数据库IP地址设置为127.0.0.1用户sa密码为空,为什么连接不上,请指点。…

查看全部问答>

自己编的wince5.0镜像,在板子上无法运行

我用的板子是s3c2410,北京恒丰锐科的产品,提供了bsp包,我用pb5.0做了一个wince5.0的镜像文件,0个错误,451个警告,但是烧到板子里后无法正常开机,一直都是显示"北京恒丰锐科"的字样,请问这是为什么啊…

查看全部问答>

带手机充电器的应急灯

充电管理芯片实现充电控制,灯光亮度控制由pwm实现. 单独一个usb接口给手机充电用,电压变换到5V.…

查看全部问答>

基于LaunchPad的【低功耗时钟】我的DIY~~~~【【技术讨论帖】】

 东西的视频照片在这个帖子里:https://bbs.eeworld.com.cn/viewthread.php?tid=309715&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D66 这次DIY其实已经计划了好长时间了,自从买了LaunchPad就一直想做点什么。后来论坛里 ...…

查看全部问答>

有没有关于MSP430F5438对AD转换这方面的资料?

毕业论文需要用MSP430F5438来完成AD转换。之前对MSP430F5438一窍不通,我知道MSP430F5438能完成很多功能,我只需要一些关于AD转换的资料。有没有人有啊?共享一下我 [ 本帖最后由 adam136 于 2012-2-18 22:12 编辑 ]…

查看全部问答>

关于 DK LM3S9B96的 初始化脚本文件

大家好,我最近想把全部的程序放到SDRAM上去执行,那么在IAR jlink下载程序到SDRAM上之前,需要先对SDRAM进行初始化,其实就是利用一个初始化的mac脚本,对LM3S9B96的寄存器进行操作。看了一下TI官方提供的SDRAM的初始化的代码,觉得好麻烦,不知道 ...…

查看全部问答>

1.5V干电池升压到3.6V/6A,请问如何做扩流电路?谢谢

用干电池,1.5V和3V输入,升压到3.6V,电流最大到6A,请问应该如何做?希望有朋友可以指点一下,谢谢 我是想,不知下边两种方法是否可行: 如图1,就是加大电感和场效应管的电流通量, 或者如下图,用达林顿管放大电流 …

查看全部问答>