C51也能 VS code, 旦快乐 lets code ! 在 Android Studio 和 VS code 的双重夹击下, 凭借自动补全, 以及浮动显示注释等功能, 我再也不担心长变量名与长函数名, 在用回 Keil 之前, 我甚至还以为我进入了 22 世纪(大雾). 直到 2019 的冬天, 我怀着期待打开了 Keil ( Keil 新图标还蛮现代化的, 不错不错), 下一刻我就醉了, 我的内心充满了怀疑: ” 这又长又臭的变量名是我起的??? ” , ” 这变量名叫啥来着?? ” , ” 噢, 还翘舌+前后鼻音, 还TM拼错了?? ” . 为了解决我心中的疑惑, 我决定去复习一下汉语拼音, 噢不对, 我要用 VS code 写 C51. 对于 Keil 的32位版本, 其编辑器还有自动补全功能, 而对于其 8 位机版本(Keil uVision), 自动补全却成为了可望不可及的功能. 更别提那些注释浮动显示, 全局引用查看等功能了, Keil 的反汇编调试的确方便, 但是我变量名都打不全, 编译都通过不了…… VS code 这么香, 谁不想尝上一口呢. 其实, 我已经尝了好久了哈哈哈 xD. 毕竟不能独食, 分享一下我的方案. 首先: 1. 准备一个香喷喷的 VS code, 并且装好 C 语言的插件(推荐微软官方提供的 C 语言插件). 2. 准备一个 Keil uVision(版本号大于4). 3. 准备一个由 Keil uVision 维护的项目. 开始: 打开 Keil uVision 维护的项目, 看到左边的写着 ” Project ” 的目录吗? 右键你项目目标的文件夹, 选第一个[Options for Target ‘ xxxxxxxx ‘ ] . 在我这里, 我的项目目标的文件夹名字叫 ” MyProject ” , 如图:
然后选到 ” Output ” 标签页, 如图:
这里的关键是这个批处理, 运行这个批处理, 就能自动调用Keil 的编译器, 然后就生成了 hex 文件了. 所以说, 我们现在要做的事情就是在 VS code 中, 运行一下这个批处理就 OK 了. 找到你项目的文件夹, 把整个文件夹拖到 VS code 图标上, 观察 VS code 的左侧栏, 然后看图:
是不是发现了你自己的批处理文件, 和一个叫 ” .vscode ” 的文件夹.? 然后观察 VS code 的菜单栏, ” 调试 ” -> ” 添加配置 ” , 如图:
然后它会新建一个 json 配置文件, 并且弹出一个框框让你选, 如图:
选好之后, 是这个样子的, 如图:
根据我的批处理名字, 改了一下, 如图:
然后就Ok了. 回到你 VS code 的工程目录, F5调试, 结果如下图:
这样就 OK 了, 哈哈哈. 注意事项: 1. 如果你有新的 C 文件加入或新建到你的项目中, 编译前记得先到 Keil 中加入这个 C 文件, 然后重新生成批处理, 如果忘记了这一步操作, 批处理是不会自动把你的新文件纳入进行编译的. 步骤如图:
结果如下: Batch-Build summary: 1 succeeded, 0 failed, 0 skipped – Time Elapsed: 00:00:04 图:
这样就表明已经成功建立批处理文件了. 2. C51 兼容的 C 版本比较老(貌似是支持到 C89 ), 像那种循环体内定义i, 稀疏数组个别下标具体定义等等特性是不兼容的, 所以很可能出现 VS code 没有语法错误, 在 Keil 编译器就是过不了的情况, 大家可以在 .vscode 文件夹中的 c_cpp_properties.json 中进行 VS code 的 C 版本配置, 让其版本与 C51 兼容的版本相同. 3. C51 有一些特别的头文件, 和一些特别的关键字是标准 C 没有的, 我是这样解决的, 还是设置c_cpp_properties.json, 看图:
这样子设置, 基本上就不会有特殊关键字的语法错误了, 但是即便是这样设置, 我还是没办法处理中断 ( interrupt ) 所提示的语法错误, 我也想过用宏定义的方法, 但是由于空格的存在, 木有办法, 但是这还是不能阻挡我用 VS code, VS code 实在太香了. 顺便问问谁能教教我怎么避开这个不是错误的语法错误提示, 如图:
经过这一番折腾, 相信你也会说一句:” VS code 真香 !”. =============================================================== 后记: 已经很久没更新了,昨天有个人留言告诉我可以直接在 c_cpp_properties.json 加入 “interrupt=//”,来避免 interrupt 的语法报错,其实这个方法我刚用 vscode 的时候就试过了,是不行的,现在几年过去了,依旧不行,今晚我就想了一下,根本没这么复杂,只要把 vscode 欺骗了就行。我在编译的时候加入某 define 关键字,然后 vscode 它又不会检查我的 .bat 批处理的,嘿嘿嘿,那不就简单了嘛。 步骤: 对于 C51 的中断函数,都要在 interrupt 后面加入向量号,标准C是不支持这种写法的,而 vscode 的语法检查是标准C,所以我们只要把源代码写成标准C不报错的形式,就可以避免 vscode 报错了。把下面的写法: 改成下面这种写法: 然后打开[Options for Target ‘ xxxxxxxx ‘ ],找到编译参数的文本框,加入 Interrupt_C51_To_Std_C 定义即可。 原理其实很简单,vscode 只检查你的程序源文件的语法,它没办法检查 keil 生成的 .bat 编译命令文件,所以实际上我们是假装告诉 vscode 我们没有定义宏 Interrupt_C51_To_Std_C ,所以 vscode 就把 interrupt_def(x) 当作“空”了,从而就变成了标准的 C 函数。在编译的时候,编译参数加入了 “Interrupt_C51_To_Std_C ”的定义,所以在实际编译的前,interrupt_def(x) 就被替换成了 interrupt x,就还原了 C51 的中断函数写法,编译通过。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/63131.html