本文地址:https://www.cnblogs.com/jqdy/p/12565161.html

  习惯了VS的强大编辑功能,对Keil 5越来越深恶痛绝。查阅网络文章后按图索骥初步实现了VS编辑Keil项目的功能,但是VS仍然不识别sfr、sbit、bit等特有关键字。虽然不是大问题,但是当键入STC8.h中定义的相关寄存器名称时,不能使用自动提示功能,成了比较大的缺憾。尝试再三,利用条件编译终于让VS识别了sfr等特有关键字,并实现了自动提示功能。

  第一步:模拟Keil5中的项目结构,在VS中建立一个解决方案。

  这不是让VS编译Keil项目,而是方便在VS中打开项目中的各个文件进行编辑。下面,每个操作步骤一张图片。

  1. 创建新项目

  2. 选定空项目

   3. 确定项目名称和目录

  名称和目录随意,不过为了避免产生混淆,名称最好和Keil中的项目名称一致或类似,目录位置最好也和Keil的.uvproj放在一起,或在之下再建一个专门的vs项目目录。总之,原则就是即要与Keil项目相呼应,又要分开放置,避免混淆。

  4. 添加有关.c和.h文件

  在“解决方案资源管理器”中,右击“源文件”-“添加”-“新建项”或者“现有项”,找到Keil项目所在目录或者其下的子目录,添加或者新建Keil项目所使用的".c"文件。同样,处理“解决方案管理器”中的“头文件”,添加或者新建相关的“.h”文件。这样就把所需的.c和.h文件添加完毕了,添加完毕后保存。

  这时,从vs项目所在文件夹中可以看到VS特有的.sln、.vcxproj等文件和Debug目录,这些都是VS使用,但Keil不用的,所以,为了避免混淆,最好将VS和Keil文件放在不同的目录。注意这里所说的“VS使用,但Keil”不用,仅仅针对于.sln和.vcxproj等文件,对于刚才在“解决方案管理器”中添加的.c和.h文件,两者是共用的,均保留在原Keil项目目录下。在后续使用VS编辑相关文件并保存后,切换到Keil中,Keil会提示相关文件已经改变,是否重新加载,重新加载就会发现VS编辑的内容了。

  第二步:让VS可以自动找到芯片头文件和项目头文件。

  5. 设置VS项目的默认头文件目录,

  目的是在VS中建立头文件搜索路径,好在各个.c和.h文件之间自动建立关联。

  5.1 在“解决方案管理器”中鼠标右击该项目-属性。

  5.2 在弹出的“属性页”窗口中,先后选择:VC++目录-包含目录-右面的下拉箭头-编辑,弹出“包含目录”对话框

   5.3 添加默认包含文件所在的目录

  在弹出的“包含目录”对话框中,点击看上去像文件夹一样的第一个图标,这时,下面就多出来一个空行,再点击空行右边的“...”图标。这样就出现了常规的“选择目录”对话框,因属常规操作就不再贴图了。

  这里要强调的是,要添加头文件的包含目录有三个。

  第一个是C51标准库的头文件所在目录,我的机子中这个目录是“C:\C:\Keil_v5\C51\INC”。

  第二个是所使用芯片的.h文件所在目录,例如我是用的STC8.h,这个头文件在安装Keil的目录内,例如下图第一个白框中显示半行的哪个目录,在我的电脑中具体是“C:\Keil_v5\C51\INC\STC”,这样就可让VS找到项目c文件中#include <stc8.h>所指的stc8.h了,编辑时VS就可自动提示stc8.h中的内容了。

  第三个要添加的目录是你这个项目中自己添加的.h文件所在的目录,如果这些.h文件放置到多个目录中,还要逐个添加进来,这样VS就可找到项目c文件中自定义的那些头文件了,这些头文件形如#include "stc8_abc.h"。

  至此,网络上提供的办法就结束了。但是,VS仍然不认sfr、sbit、bit等C51特有的数据类型,在这些类型下面有红色波浪线的提示到在其次,主要问题是VS不认这些数据类型,编辑时的自动提示中就不会出现这些内容。

  第三步:让VS识别sfr、sbit、bit。

  6. 让VS识别sfr、sbit、bit等数据类型,进而在编辑时可进行自动提示。

  这里用到的主要是预处理中条件编译的相关内容,有2个方面的工作需要做。

  6.1 在VS的“预处理器”中加入特有的预处理器定义符号

  我这里加入的是“_keil_vs_”,这个符号怎么写不重要,重要的是keil中永远用不到即可。这个符号仅仅加在VS项目中,而不加入到Keil编辑器中,要达到这样的目的:使用这个标记定义的内容只有VS认识,keil不认识。

  在5.2中“属性页”中不进入“VC++目录”,而是进入“C/C++”-预处理器-预处理器定义-右边下箭头-编辑,在“预处理器定义”对话框中输入这个符号,然后保存退出。

  6.2 在Keil安装目录找到所使用芯片的.h文件,并进行修改。

  如5.3所述,我使用芯片的.h文件,在“C:\Keil_v5\C51\INC\STC”内,文件名是“STC8.h”。开打这个文件,在文件开头键入以下内容。

#ifdef _keil_vs_
typedef unsigned char sfr;//仅用于vs编辑Keil文件
typedef unsigned char sbit;//仅用于vs编辑Keil文件
typedef unsigned char bit;//仅用于vs编辑Keil文件
#endif // _keil_vs_

  下面贴个图:

  其中,最关键的就是使用 #ifdef 判断预处理器中是否定义了_keil_vs_这个符号了。

  对于VS,刚才已经在预处理器中进行了定义,所以对于VS来说sfr、sbit、bit就被typedef为unsigned char类型了,VS遇到这几个类型就会认为是unsigned char类型,这样就实现了VS识别的目的,也能进行自动提示了。

  对于keil来说,因为并没有将_keil_vs_这个符号添加进预处理器,所以这几个在#ifdef/#endif中包含的几个typedef不起任何作用。这样,就实现了VS和Keil的兼顾,VS既能识别并自动提示,又不对keil产生任何影响。

  实际上,可以typedef为任何vs识别的类型,不一定必须是unsigned char。如果有其他类似需要也可按此处理。

  至此,大功告成!

  下面贴一个效果图,当键入sbu过程中,VS会出现SBUF的自动提示:

如何发挥Visual Studio 2019强大的编辑功能轻松编辑Keil项目的更多相关文章

  1. Visual Studio 2019 XAML Hot Reload功能介绍

    Visual Studio 2019提供了XAML Hot Reload功能,这个功能可以让WPF程序运行以后仍然可以修改XAML代码,并实时显示. XAML Hot Reload功能在Blend F ...

  2. Visual Studio 2019 RC入门

    介绍 在本文中,让我们看看如何开始使用Visual Studio 2019 RC.Microsoft现已发布Visual Studio Release Candidate,现在可以下载了.最初,Mic ...

  3. Visual Studio 2019 RC

    Visual Studio 2019 RC入门 介绍 在本文中,让我们看看如何开始使用Visual Studio 2019 RC.Microsoft现已发布Visual Studio Release ...

  4. visual studio 2019 + cmake 实现windows linux跨平台开发环境搭建

    visual studio 2019开始支持cmake跨平台开发. 以前cmake项目需要先生成vs项目,然后vs直接使用vs项目开发.现在可以直接用vs2019创建或打开cmake项目. 使用vis ...

  5. C++ 与 Visual Studio 2019 和 WSL(四)——库组件

    C++ 与 Visual Studio 2019 和 WSL (库组件) Reference 在 C++ 项目中使用库和组件 | Microsoft Docs 演练:创建和使用自己的动态链接库 (C+ ...

  6. 强大的VS插件CodeRush发布v19.1.4|支持Visual Studio 2019

    CodeRush是一个强大的Visual Studio .NET 插件,它利用整合技术,通过促进开发者和团队效率来提升开发者体验. [CodeRush for Visual Studio v19.1. ...

  7. “宇宙最强” IDE,Visual Studio 2019 正式发布

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 本文由葡萄城翻译并发布 今天凌晨Visual Studio 2019已经正式发布,现在已经可以下载了.使用V ...

  8. 【转载】“宇宙最强” IDE,Visual Studio 2019 正式发布

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 本文由葡萄城翻译并发布 今天凌晨Visual Studio 2019已经正式发布,现在已经可以下载了.使用V ...

  9. Visual Studio 2019 正式发布,重磅更新,支持live share

    如约而至,微软已于今天推出 Visual Studio 2019 正式版,一同发布的还有 Visual Studio 2019 for Mac. Visual Studio 2019 下载地址:htt ...

随机推荐

  1. stand up meeting 12-3

    因为前后端在参数传递定义不清晰的原因,今天士杰和国庆采用了pair programming的方法,在一台电脑前工作了四十分钟,明确了请求questionpool,请求question,请求rank d ...

  2. api_DZFPKJ & api_DZFPCX(get_AES_url代码优化)

    通过AES加密网站的接口来传值,不需要手动加密字符串后复制过来传值. #coding:utf-8 import requests import re def get_aes_url(key, text ...

  3. CLDAPReflectionDDoS(CLDAP反射放大攻击)

    CLDAP Reflection DDoS 0x01 LDAP: 全称为Lightweight Directory Access Protocol,即轻量目录访问协议,基于X.500标准: 目录服务就 ...

  4. ElasticSearch的高级复杂查询:非聚合查询和聚合查询

    一.非聚合复杂查询(这儿展示了非聚合复杂查询的常用流程) 查询条件QueryBuilder的构建方法 1.1 精确查询(必须完全匹配上,相当于SQL语句中的“=”) ① 单个匹配 termQuery ...

  5. JDBC 工具类封装

    每次使用jdbc 我们都要 加载驱动类 创建链接 创建Statement 接口对象执行sql 关闭资源 按照这样的套路可以封装一些重用代码方便在其他方法中调用 package com.xzlf.jdb ...

  6. 如何保证kafka消息不丢失

    背景 这里的kafka值得是broker,broker消息丢失的边界需要对齐一下: 1 已经提交的消息 2 有限度的持久化 如果消息没提交成功,并不是broke丢失了消息: 有限度的持久化(broke ...

  7. 记使用STL与unique_ptr造成的事故-段子类比

    最近由于业务需要在写内存池子时遇到了一个doule-free的问题.折腾半个晚上以为自己的眼睛花了.开始以为是编译器有问题(我也是够自信的),但是在windows下使用qtcreator vs2017 ...

  8. python爬虫实战之爬取智联职位信息和博客文章信息

    1.python爬取招聘信息 简单爬取智联招聘职位信息 # !/usr/bin/env python # -*-coding:utf-8-*- """ @Author  ...

  9. webug3.0靶场渗透基础Day_2(完)

    第八关: 管理员每天晚上十点上线 这题我没看懂什么意思,网上搜索到就是用bp生成一个poc让管理员点击,最简单的CSRF,这里就不多讲了,网上的教程很多. 第九关: 能不能从我到百度那边去? 构造下面 ...

  10. Prometheus+Grafana 监控 Docker

    cAdvisor (Container Advisor) :用于收集正在运行的容器资源使用和性能信息. https://github.com/google/cadvisor Prometheus(普罗 ...