找回密码
 立即注册
楼主: 锦鈓

【萌新指南-02】使用 VScode + keil 实现(代码提示)编辑+编译程序

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2026-05-30 11:14:51
已绑定手机

38

主题

205

回帖

2374

积分

荣誉版主

Rbowlystar

积分
2374
发表于 2026-5-30 11:14:51 | 显示全部楼层
wuzhe*** 发表于 2026-5-28 20:07
请教一下版主:
下图中的报错,应该如何设置才能消除?

看一下3.5
截图202605301114465912.jpg
故事没有结局,遗忘是唯一的终点...
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2026-05-30 11:14:51
已绑定手机

38

主题

205

回帖

2374

积分

荣誉版主

Rbowlystar

积分
2374
发表于 2026-5-30 11:24:25 | 显示全部楼层
wuzhe*** 发表于 2026-5-28 20:07
请教一下版主:
下图中的报错,应该如何设置才能消除?

截图202605301117487359.jpg

点评没法回复,在此处回复你。

Q:顺带请教一下,“我们就可以在头文件中,插入一段宏定义去实现,在VScode中注释interrupt x,并且不会影响到keil5编译。” 这个头文件具体是指哪一个头文件?  
A:放在一个所有文件都会引用的头文件里,例如定义了u8、u16的那个头文件。
当然你也可以单独在每一个包含【
interrupt】中断函数的文件中插入这段宏定义。
亦可以把所有中断函数都统一写在一个C文件中,然后在这个C文件中插入这段宏定义。


故事没有结局,遗忘是唯一的终点...
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:202
  • 最近打卡:2026-07-04 17:28:31
已绑定手机

25

主题

2662

回帖

3411

积分

论坛元老

积分
3411
发表于 2026-5-30 20:27:50 | 显示全部楼层
锦*** 发表于 2026-5-30 11:24
点评没法回复,在此处回复你。

Q:顺带请教一下,“我们就可以在头文件中,插入一段宏定义去实现,在V ...

首先感谢版主的热心帮助!

我大致理解了,其实我一直在自己尝试:

例如我在config.h 中加入这段:

  1. //========================================================================
  2. //                               VScode优化
  3. //========================================================================
  4. #if defined(__VSCODE_C251__) || defined(__VSCODE_C51__)
  5.     // 当在 VSCode 环境下时,将 interrupt(x) 替换为空,相当于删除了这个关键字
  6.     #define interrupt(x)  
  7.             
  8. #else
  9.     // 正常编译时,保留 interrupt x 语法
  10.     #define interrupt(x)  interrupt x
  11. #endif
复制代码


按道理就应该OK,但在vscode 里依旧有:
截图202605302026191202.jpg
截图202605302027362826.jpg

点评

在VScode里面,需要写成如下形式。 因为interruot是keil的关键字,不是C语言的关键字, 所以在vscode用C语言的语法检查,就是不正确的写法。 修复的原理就是在vscode中,通过宏定义将 interrupt(X) 替换成空白格  详情 回复 发表于 2026-5-30 22:00
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:202
  • 最近打卡:2026-07-04 17:28:31
已绑定手机

25

主题

2662

回帖

3411

积分

论坛元老

积分
3411
发表于 2026-5-30 20:34:11 | 显示全部楼层
当然我马上查*.json:

也没发现什么问题

但是我用vscode 打开冲哥STC32G144k246 的定时器程序,就不报错!

好奇怪,我就不明白是什么原因?下面也把冲哥不报错的定时器历程切个图上来:





截图202605302028515821.jpg
截图202605302034056505.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:202
  • 最近打卡:2026-07-04 17:28:31
已绑定手机

25

主题

2662

回帖

3411

积分

论坛元老

积分
3411
发表于 2026-5-30 20:36:49 | 显示全部楼层
仔细观察,冲哥的*.json


截图202605302036444018.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:439
  • 最近打卡:2026-05-30 11:14:51
已绑定手机

38

主题

205

回帖

2374

积分

荣誉版主

Rbowlystar

积分
2374
发表于 2026-5-30 22:00:46 | 显示全部楼层
wuzhe*** 发表于 2026-5-30 20:27
首先感谢版主的热心帮助!

我大致理解了,其实我一直在自己尝试:

在VScode里面,需要写成如下形式。
  1. void TIME4_ISR(void) interrupt(TMR4_VECTOR)
复制代码

因为interruot是keil的关键字,不是C语言的关键字,
所以在vscode用C语言的语法检查,就是不正确的写法。


修复的原理就是在vscode中,通过宏定义将 interrupt(X) 替换成空白格了,

对vscode来说,不存在interrupt(X),所有就避免了报错。


但在keil5中,自动恢复成正常的写法,所有不会影响keil5的编译。


另一个程序中,没有报错的原因,是应为前面有报错问题没有解决,
vscode会隐藏部分错误提示信息,大概率是某种机制吧,可以参考我下面的图


截图202605302155242644.jpg

故事没有结局,遗忘是唯一的终点...
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:202
  • 最近打卡:2026-07-04 17:28:31
已绑定手机

25

主题

2662

回帖

3411

积分

论坛元老

积分
3411
发表于 2026-5-31 16:27:05 | 显示全部楼层
锦*** 发表于 2026-5-30 22:00
在VScode里面,需要写成如下形式。

因为interruot是keil的关键字,不是C语言的关键字,

感谢版主大侠耐心指导!!!

祝福板主万事如意!!!

您花费时间指导我一下,好过我自己折腾几天才可能慢慢想到这个高招,当然也可能一直想不到.....................


版主能想到 “ void TIME4_ISR(void) interrupt(TMR4_VECTOR)

这在实验科学中也是个创新,我慢慢想了一下,觉得好巧妙,其实这反应了一开始的宏定义的精髓我其实没体会

再一次感谢版主!!!
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 12:50 , Processed in 0.076635 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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