历史上的今天
今天是: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里面配置。
史海拾趣
|
vs2005开发PDA,调试程序时,用模拟器实验,连数据库IP地址设置为127.0.0.1用户sa密码为空,为什么连接不上,请指点。 vs2005开发PDA,调试程序时,用模拟器实验,连数据库IP地址设置为127.0.0.1用户sa密码为空,为什么连接不上,请指点。… 查看全部问答> |
|
我用的板子是s3c2410,北京恒丰锐科的产品,提供了bsp包,我用pb5.0做了一个wince5.0的镜像文件,0个错误,451个警告,但是烧到板子里后无法正常开机,一直都是显示"北京恒丰锐科"的字样,请问这是为什么啊… 查看全部问答> |
|
基于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一窍不通,我知道MSP430F5438能完成很多功能,我只需要一些关于AD转换的资料。有没有人有啊?共享一下我 [ 本帖最后由 adam136 于 2012-2-18 22:12 编辑 ]… 查看全部问答> |
|
大家好,我最近想把全部的程序放到SDRAM上去执行,那么在IAR jlink下载程序到SDRAM上之前,需要先对SDRAM进行初始化,其实就是利用一个初始化的mac脚本,对LM3S9B96的寄存器进行操作。看了一下TI官方提供的SDRAM的初始化的代码,觉得好麻烦,不知道 ...… 查看全部问答> |
|
1.5V干电池升压到3.6V/6A,请问如何做扩流电路?谢谢 用干电池,1.5V和3V输入,升压到3.6V,电流最大到6A,请问应该如何做?希望有朋友可以指点一下,谢谢 我是想,不知下边两种方法是否可行: 如图1,就是加大电感和场效应管的电流通量, 或者如下图,用达林顿管放大电流 … 查看全部问答> |




