extern unsigned long far __SP_INIT[];这句语句是什么意思?为什么在KEIL里会报错?应该怎么修改
时间: 2024-04-07 10:30:43 浏览: 133
这句语句定义了一个名为`__SP_INIT`的unsigned long类型的全局变量,类型前的`far`关键字表示该变量是位于远程内存地址空间中的,即其地址需要使用扩展指针(segment:offset)来访问。
在KEIL中报错可能是由于使用了不支持far关键字的编译器或者编译器设置不正确导致的。如果要在KEIL中使用far关键字,需要确保使用的编译器支持far关键字,并且在编译器设置中启用了对far关键字的支持。
如果编译器不支持far关键字,可以将其替换为其他的关键字或者使用指针来实现类似的功能。例如,可以使用`__far`关键字来定义远程指针类型,并使用指针来访问远程内存空间中的变量。具体实现方式可以参考编译器的文档或者使用编译器提供的支持远程内存访问的API函数。
相关问题
extern unsigned long far __SP_INIT[];这句语句是什么意思?为什么在KEIL里会报错?使用GD32F303基础库应该怎么修改
这句语句定义了一个名为`__SP_INIT`的unsigned long类型的全局变量,类型前的`far`关键字表示该变量是位于远程内存地址空间中的,即其地址需要使用扩展指针(segment:offset)来访问。
在KEIL中报错可能是由于使用了不支持far关键字的编译器或者编译器设置不正确导致的。如果要在KEIL中使用far关键字,需要确保使用的编译器支持far关键字,并且在编译器设置中启用了对far关键字的支持。
对于使用GD32F303基础库的项目,可以根据使用的编译器和开发环境的不同,采用不同的方法来修改这段代码。下面以使用Keil MDK环境为例,介绍如何修改这段代码:
1. 如果使用的是Keil MDK自带的编译器,可以将关键字`far`替换为`__far`,即将`extern unsigned long far __SP_INIT[];`修改为`extern unsigned long __far __SP_INIT[];`。
2. 如果使用的是其他编译器,需要查看编译器的文档,了解其支持的远程内存访问方式,并相应修改代码。
需要注意的是,不同的编译器可能对关键字和语法的支持有所不同,因此在修改代码时需要根据具体情况进行调整。
解释INTRINS.H Intrinsic functions for C51. Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH All rights reserved. --------------------------------------------------------------------------*/ #ifndef __INTRINS_H__ #define __INTRINS_H__ #pragma SAVE #if defined (__CX2__) #pragma FUNCTIONS(STATIC) /* intrinsic functions are reentrant, but need static attribute */ #endif extern void _nop_ (void); extern bit _testbit_ (bit); extern unsigned char _cror_ (unsigned char, unsigned char); extern unsigned int _iror_ (unsigned int, unsigned char); extern unsigned long _lror_ (unsigned long, unsigned char); extern unsigned char _crol_ (unsigned char, unsigned char); extern unsigned int _irol_ (unsigned int, unsigned char); extern unsigned long _lrol_ (unsigned long, unsigned char); extern unsigned char _chkfloat_(float); #if defined (__CX2__) extern int abs (int); extern void _illop_ (void); #endif #if !defined (__CX2__) extern void _push_ (unsigned char _sfr); extern void _pop_ (unsigned char _sfr); #endif #pragma RESTORE #endif
这段代码是关于C51芯片的Intrinsic函数的头文件,Intrinsic函数是指直接嵌入到程序中的函数,不需要进行函数调用,在编程中可以提高效率。该文件定义了一些Intrinsic函数,比如_nop_、_testbit_、_cror_、_iror_、_lror_、_crol_、_irol_、_lrol_等等,这些函数可以直接在程序中使用。此外,该文件还定义了一些宏,如SAVE、FUNCTIONS、RESTORE等,用于在编译时控制函数的属性和行为。
阅读全文