本机C编译器说明:
支持全局变量、局部变量、函数、头文件、字符串替换命令.
1.支持数据类型.
signed可以省略,会默认为有符号数.
char占1个字节,int占2个字节,long int占4个字节, 指针占2个字节.
signed char
signed int
signed long int
unsigned char
unsigned int
unsigned long int
signed char*
signed int*
signed long int*
unsigned char*
unsigned int*
unsigned long int*
signed char 一维数组
signed int 一维数组
signed long int 一维数组
unsigned char 一维数组
unsigned int 一维数组
unsigned long int 一维数组
16进制常量
10进制常量
8进制常量
字符常量
变量的物理地址定义方式.
@0xfffe char a,b;@
意思是修改当前变量的分配地址为0xfffe,然后变量a的地址就是0xfffe,b的地址是0xffff, 然后遇到第2个"@"分配地址会恢复,否则会一直加下去....
2.支持函数类型.
signed可以省略,会默认为有符号数.
char返回1个字节,int返回2个字节,long int返回4个字节, 指针返回2个字节.
void
signed char
signed int
signed long int
unsigned char
unsigned int
unsigned long int
signed char*
signed int*
signed long int*
unsigned char*
unsigned int*
unsigned long int*
函数分页定义方式.
void x()rom0 on
{
}
函数括号末尾加上"rom0"的意思是编译的时候把这个函数放在rom第0页,一页64KB,最多可以支持255页(16MB的ROM), 因为这个CPU程序计数器16位只能寻址64KB,也就是这里一个函数最大64KB, 怎么实现不同函数的页间调用。。这个是我觉得做得比较得意的地方~~ 后面有空讲.
后面那个"on"的意思就是这个函数是页间共享, 这样其他页的函数就可以调用本函数, 如果不加 "on" 其他页的函数不能调用本函数, 加 "on" 比不加 "on" 效率低.
如果不加 "rom0", 这个函数默认放在ROM第0页.
3.支持控制语句.
if - else
if - else if - else if - else if ......
while
do - while
for
goto
break
continue
return
rom_run
特殊控制语句 "rom_run" .
本机有两组ROM, 不管CPU当前执行的程序在哪个ROM,只要执行到rom_run后就会切换到另一组ROM的首地址开始运行, 而且还可以通过 _R1(CPU的R1寄存器) 传递一个数值给另一组ROM.
4.支持运算符(表达式里的运算符严格按照C优先级处理).
sizeof
()
[]
+
-
*
/
%
&
|
~
^
!
>
<
>=
<=
==
!=
++
--
&&
||
>>
<<
+=
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
?:
5.可以表达式插入操作的CPU部件和指令:
_ACC
_R1
_R2
_R3
_C
_Z
_BIT0
_BIT1
_BIT2
_BIT3
_BIT4
_BIT5
_RAM
_NOP
本编译器的局部变量分配方法:
函数之间有调用关系分配地址不同,函数之间没有调用关系,分配地址相同.
下面这种调用关系的程序内存总占用约为1024字节.
void a()
{
char x[1024];
}
void b()
{
char x[1024];
}
main()
{
a();
b();
}
而下面这种调用关系的程序内存总占用约为2048字节.
void a()
{
char x[1024];
}
void b()
{
char x[1024];
a();
}
main()
{
a();
b();
}