Keil编译环境下经常出现的错误

更新时间:2024-02-28 00:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Keil编译环境下经常出现的错误 问题

使用XC164单片机在Keil环境下编译程序时经常出现一些问题,希望得到帮助. 回答

以下有一些Keil C166 编译器使用过程中常见问题,请参考.

1. 在C环境下能访问到16M范围吗?

可以的.通过huge 和xhuge 类型就可以访问到16M地址空间. Huge存储类型使用16位地址计算,所以最大范围为64K,但这是最优的一种存储方式.xhuge存储类型没有大小的限制.

2. 如何修改系统堆栈的大小和位置?

需要编辑START166.A66文件.修改STK_SIZE=7,然后设置SSTSZ为自己设定的值.例如SSTSZ EQU 200H 则设置了系统堆栈大小为200H BYTES 但要注意系统堆栈要放到IDATA存储区内.

3. 能不能在运行或编译时确定程序的大小?

不可以.但可以在程序的结尾放一个变量,这一变量并非自动生成并需要在程序中放置所有变量,然后把”EOF”变量放到最后.

4. 如何在函数中禁止中断?

可以用#pragma disable来禁止中断,例如:

#pragma disable void function(void) { if (flag==0) { flag=1; flag2=1; } }

在进入函数时禁止中断,在退出函数时恢复中断.

5. Keil C166编译器是否支持C164?

是的, Keil C166编译器可以支持80C166,C167,C165,C164,C163,C161,XC164和ST10系列.

6. 如何使能XBUS外围设备?

通过修改\\C166\\LIB中的START166.A66来实现的.设置INIT_XPERCON为1并将XRAM设置为需要的值.

7. 当声明一位作为外部变量时得到如下错误信息提示: *** ERROR C102 IN LINE 4 OF .\\MAIN.C: 'mybit0': different const/volatile qualifiers

在MIAN.H头文件中定义 extern bit mybit0; /* bit 0 of ibase */ MAIN.C如下 #include \

int bdata ibase; /* Bit-addressable int */ sbit mybit0 = ibase ^ 0; /* bit 0 of ibase */ void main (void) { }

错误出现的原因是sbit实际上并非一个位变量.解决的方法必须声明一个外部的位变量,与sfr不同时定义,最简单的方法是用#define,例如: 在MAIN.H #ifndef SBITS

extern bit mybit0; /* Bit 0 of ibase */ #endif 在MAIN.C #define SBITS #include \

int bdata ibase; /* Bit-addressable int */ sbit mybit0 = ibase^0; void main (void) {

mybit0 = 0; } 在JUNK.C

#include \void junk (void) {

mybit0 = 1; }

8. Keil C166编译器时候支持浮点数运算?时候有库文件来声明浮点变量?

C166编译器支持单精度和双精度浮点数,所有的操作与ANSI C中的浮点数运算相同.默认情况下C166编译器以IEEE形式存储32位浮点数,给出7位小数点精度.当需要高于7位精度时可以用C166的FLOAT64指令使能64位双精度.也可以通过Project>-Optioin for Target>-Double-precision floating-point来设置.

本文来源:https://www.bwwdw.com/article/9mea.html

Top