合泰单片机总结
--测试环境C编译器V2
1. Debug
2.
3. .数组,支持一维/二维数组(大小小于1 bank);
4. 使用const关键字,变量将存储于程序存储区,如,const uint8_t tab[] = “1,2,3”; 5. 中断服务函数:
#pragma vector ISR_tmr0 @ 0x0c void ISR_tmr0(void) { tick++ ;}
6. 中断函数中调用普通函数 (1)方法1
#pragma vector ISR_tmr0 @ 0x0c #pragma nolocal fun fun() { }
void ISR_tmr0(void) { fun() ; } (2)方法2
#pragma vector ISR_tmr0 @ 0x0c fun() { }
void ISR_tmr0(void) { #asm call _fun; #endasm } 7. 宏定义 #define _pa0 8. 位变量定义
对于有多个bank的MCU,位变量只能定义在bank0,使用如下方式 #pragma rambank0 bit flag ;
#pragma norambank
_12_0
//bit 0 of RAM address 0x12
//定义中断入口地址
9. 指针
(1) 不支持指向“字符串数组”
char *rainbow[] = { \(2) 只支持全局的静态函数指针,且所指函数不能带有参数 fun() { return 1; }
int (*const p)() =fun; // global and initialization required void main() { int a; a=(*p)(); }
(3) 不支持取得const常量的地址 const int ldc = 0; void main(){ int *a;
a = &ldc; // cannot pass }
10. 内嵌汇编
#asm
[label:] opcode [operands] ... #endasm
Eg: char a; int b;
void fun(char p1,int p2) { a = p1; #asm // b = p2; MOV A,fun1 MOV _b,A MOV A,fun1[1] mov _b[1],A #endasm }
void main() { int d1; char d2;
unsigned char q, r; r = 0;
q = d1 / d2; // get quotient #asm // r = q; MOV A, CR3 ; CR3→q MOV CR4,A ; CR4→r #endasm
#asm // fun(d2,d1) MOV A,CR2
MOV fun0,A ; p1 = d2 MOV A,CR1 MOV fun1,A MOV A,CR1[1]
MOV fun1[1],A ; p2 = d1 CALL _fun #endasm }
11. 预编译指令
12. 编译器特殊选项