IAR for STM8 研究
来源:互联网 发布:淘宝层级怎么刷 编辑:程序博客网 时间:2024/05/21 14:43
最近移植了一个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 for STM8 研究
- iar for stm8初学总结
- IAR for STM8 使用固件库
- IAR for STM8 常用快捷键
- IAR FOR FOR STM8学习笔记
- IAR FOR STM8精确延时函数
- IAR for STM8重定向printf
- IAR for stm8 新建工程模板
- 20150804-IAR For STM8工程改名
- IAR FOR STM8使用问题总结
- STM8 FOR IAR 中实现绝对地址跳转
- IAR for stm8 中指定编译的起始地址
- IAR for STM8 程序…
- IAR Embedded Workbench for STMicroelectronics STM8 1.42 和谐
- IAR for stm8使用标准固件库的方法以及注意事项
- IAR for STM8 学习笔记(1)--数据类型
- IAR WorkB For STM8 1.42.2和谐文件,无私分享
- IAR for STM8介绍、下载、安装与注册
- C中堆管理——浅谈malloc,calloc,realloc函数之间的区别
- 【图像处理】Gabor滤波器Gabor filter
- 没有makefile的日子
- 2013年8月15日百度校园招聘2道面试题及解答
- 生于忧患而死于安乐:程序员如何走出安逸环境
- IAR for STM8 研究
- 网易公开课“机器学习”学习笔记(一)线性回归
- jpg转pdf软件免费下载
- Python 代码调试技巧
- windows 下 easy_install 的安装
- javascript z
- SecureCRT 常用设置
- NSIS制作安装包(一)
- “卖给我一支笔”:乔布斯会如何应对这个经典问题?