t176 发表于 2023-4-19 21:25:27

Keil-------VSCODE 语法高亮兼容方案

本帖最后由 t176 于 2023-4-20 01:05 编辑

/***
* !!! 不要在项目中包含此文件!,它只能用于代码分析! !!!
*/

// 非 KEIL 编译器,定义调试宏
/*-中断号
INT0      0
Timer0      1
INT1      2
Timer1      3
UART1      4
ADC 5
LVD      6
UART2      8
SPI      9
INT2      10
INT3      11
Timer2      12
INT4      16
UART3      17
UART4      18
Timer3      19
Timer4      20
CMP      21
I2C      24
USB      25
PWMA      26
PWMB      27
CANBUS      28
CAN2BUS      29
LINBUS      30
RTC      36
P0 中断      37
P1 中断      38
P2 中断      39
P3 中断      40
P4 中断      41
P5 中断      42
P6 中断      43
P7 中断      44
DMA_M2M 中断      47
DMA_ADC 中断      48
DMA_SPI      49
DMA_UR1T      50
DMA_UR1R      51
DMA_UR2T      52
DMA_UR2R      53
DMA_UR3T      54
DMA_UR3R      55
DMA_UR4T      56
DMA_UR4R      57
DMA_LCM      58
LCM      59
DMA_I2CT      60
DMA_I2CR      61
I2S      62
DMA_I2ST      63
DMA_I2SR      64

*/
#define interrupt
// 定义中断、使用、地址和优先级宏

#define using      /*--使用--*/
#define _at_       /*--@地址--*/
#define _priority_ /*--优先级--*/
#define _task_   /*--任务--*/

// 定义存储类型宏

#define reentrant // 可重入函数 (列如递归写法,修饰函数)
#define compact   // 使用外部RAM区
#define small   // 全部缺省变量均位于外部RAM区的一页,优势是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。
#define large   // 全部缺省变量可放在外部RAM区,优势是空间大,可存变量多,缺点是速度较慢。提示:存储模式在C51编译器选项中选择
#define data      // 默认的数据存储空间
#define bdata   // 用于定义只占用一个位(bit)的变量
#define idata   // 特殊存储空间
#define pdata   // 位于内存地址范围0x00~0xFF之间的数据空间。它用于存储动态变量(例如堆栈)和局部变量
#define xdata   // 是一种特殊的存储器空间,它位于8051芯片的外部RAM中,相比于data空间更大
#define code      // 将变量放在ROM(Flash)中

// 内部类型宏,包括位(bit)、特殊位(sbit)和特殊功能寄存器(sfr)

typedef bit bit;   /*--位--*/
typedef sbit sbit;   /*--特殊位--*/
typedef sfr sfr;   /*--特殊功能寄存器--*/
typedef sfr16 sfr16; /*--特殊功能寄存器16--*/
typedef sfr32 sfr32; /*--特殊功能寄存器32--*/

前言:
针对VSCODE 开发环境下,没有bit/sbit/interrupt等等,因包含非标准C语言关键词(keil 特有关键字)导致不兼容语法高亮失效,解决方案.
使用方法:
#if !defined(__C251__) && !defined(__C51__)
#include "../debug/debug.h"
#endif




效果展示:
这是没做环境兼容的效果,由于interrupt为非标准关键字,导致整个函数内,语法高亮失效.



下面是包含兼容头文件后的效果






kksk 发表于 2023-4-19 21:36:32



我也使用头文件对编译器进行区分以及兼容vscode高亮
判断vscode和keil可以通过是否定义__C51__宏来判断,因此可以不用手动注释




t176 发表于 2023-4-19 21:38:06

kksk 发表于 2023-4-19 21:36
我也使用头文件对编译器进行区分以及兼容vscode高亮
判断vscode和keil可以通过是否定义__C51__宏来判断, ...

优秀{:4_196:}
页: [1]
查看完整版本: Keil-------VSCODE 语法高亮兼容方案