找回密码
 立即注册
查看: 957|回复: 2

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-05-03 07:18:01

11

主题

70

回帖

4006

积分

论坛元老

单片机编程魔法师

积分
4006
发表于 2023-4-19 21:25:27 | 显示全部楼层 |阅读模式
本帖最后由 t176 于 2023-4-20 01:05 编辑
  1. /***
  2. * !!! 不要在项目中包含此文件!,它只能用于代码分析! !!!
  3. */
  4. // 非 KEIL 编译器,定义调试宏
  5. /*-中断号
  6. INT0        0
  7. Timer0        1
  8. INT1        2
  9. Timer1        3
  10. UART1        4
  11. ADC 5
  12. LVD        6
  13. UART2        8
  14. SPI        9
  15. INT2        10
  16. INT3        11
  17. Timer2        12
  18. INT4        16
  19. UART3        17
  20. UART4        18
  21. Timer3        19
  22. Timer4        20
  23. CMP        21
  24. I2C        24
  25. USB        25
  26. PWMA        26
  27. PWMB        27
  28. CANBUS        28
  29. CAN2BUS        29
  30. LINBUS        30
  31. RTC        36
  32. P0 中断        37
  33. P1 中断        38
  34. P2 中断        39
  35. P3 中断        40
  36. P4 中断        41
  37. P5 中断        42
  38. P6 中断        43
  39. P7 中断        44
  40. DMA_M2M 中断        47
  41. DMA_ADC 中断        48
  42. DMA_SPI        49
  43. DMA_UR1T        50
  44. DMA_UR1R        51
  45. DMA_UR2T        52
  46. DMA_UR2R        53
  47. DMA_UR3T        54
  48. DMA_UR3R        55
  49. DMA_UR4T        56
  50. DMA_UR4R        57
  51. DMA_LCM        58
  52. LCM        59
  53. DMA_I2CT        60
  54. DMA_I2CR        61
  55. I2S        62
  56. DMA_I2ST        63
  57. DMA_I2SR        64
  58. */
  59. #define interrupt
  60. // 定义中断、使用、地址和优先级宏
  61. #define using      /*--使用--*/
  62. #define _at_       /*--@地址--*/
  63. #define _priority_ /*--优先级--*/
  64. #define _task_     /*--任务--*/
  65. // 定义存储类型宏
  66. #define reentrant // 可重入函数 (列如递归写法,修饰函数)
  67. #define compact   // 使用外部RAM区
  68. #define small     // 全部缺省变量均位于外部RAM区的一页,优势是空间较Small为宽裕速度较Small慢,较large要快,是一种中间状态。
  69. #define large     // 全部缺省变量可放在外部RAM区,优势是空间大,可存变量多,缺点是速度较慢。提示:存储模式在C51编译器选项中选择
  70. #define data      // 默认的数据存储空间
  71. #define bdata     // 用于定义只占用一个位(bit)的变量
  72. #define idata     // 特殊存储空间
  73. #define pdata     // 位于内存地址范围0x00~0xFF之间的数据空间。它用于存储动态变量(例如堆栈)和局部变量
  74. #define xdata     // 是一种特殊的存储器空间,它位于8051芯片的外部RAM中,相比于data空间更大
  75. #define code      // 将变量放在ROM(Flash)中
  76. // 内部类型宏,包括位(bit)、特殊位(sbit)和特殊功能寄存器(sfr)
  77. typedef bit bit;     /*--位--*/
  78. typedef sbit sbit;   /*--特殊位--*/
  79. typedef sfr sfr;     /*--特殊功能寄存器--*/
  80. typedef sfr16 sfr16; /*--特殊功能寄存器16--*/
  81. typedef sfr32 sfr32; /*--特殊功能寄存器32--*/
复制代码

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




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


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





喜欢研究如何让电子产品变得更加智能和有趣.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-4-19 21:36:32 | 显示全部楼层


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


Screenshot 2023-04-19 213443.png Screenshot 2023-04-19 213445.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-05-03 07:18:01

11

主题

70

回帖

4006

积分

论坛元老

单片机编程魔法师

积分
4006
发表于 2023-4-19 21:38:06 | 显示全部楼层
kk*** 发表于 2023-4-19 21:36
我也使用头文件对编译器进行区分以及兼容vscode高亮
判断vscode和keil可以通过是否定义__C51__宏来判断, ...

优秀
喜欢研究如何让电子产品变得更加智能和有趣.
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 12:47 , Processed in 0.110006 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表