单片机学习归纳总结(三):代码编写的前期准备

注:该文章中所讲述内容均是在VSCode编辑器中操作!

在正式编写业务代码之前,需要先搭建好整体框架,包括忽略文件、代码片段自动生成文件、安装各种插件、防止VSCode编译器报错的文件、各种今后可能会用到的.c和.h文件等等。

忽略文件为“.gitignore”文件和“settings.json”文件

防止VSCode编译器报错的文件为: “c_cpp_properties.json”文件

代码片段自动生成文件为:点击菜单栏的“文件”—>“首选项”—>“用户代码片段”,在弹出的搜索框中选择“C”并回车确定即可看到生成一个“c.json”文件。

点击快捷键:“Ctrl+Shift+P”或点击菜单栏“编辑”—>“Emmet…”打开搜索框,输入“>hide Gitignored…”回车确定就会生成一个“settings.json”文件。

在.gitignore文件中,添加“Listings/”和“Objects/”,保存后在“settings.json”文件中查看是否已经添加。

所需安装的插件:

(1)C/C++

(2)C++ Intellisense

(3)Clang-Format

(4)hide-gitignored

(5)Markdown All in One

(6)vscode-icons

(7)One Dark Pro

“.vscode”里面的{}c_cpp_properties.json是代码自动生成的。通过在includeAll.h里面设置一些不存在的头文件,当其出现一个黄色的小灯泡时,点击它,然后点击“Edit “includePath” setting”即可出现c_cpp_properties.json文件。

1、由于本次实验是利用VSCode编辑器去做嵌入式开发,而VSCode编辑器本身并不支持嵌入式C,仅支持标准C,因此嵌入式C中的很多关键字在VSCode编辑器中会出现报错信息,我们需要通过编辑“c_cpp_properties.json”文件来防止VSCode编辑器出现报错信息:在c_cpp_properties.json文件中的“defines”选项,添加"sbit=char",“sfr=char”,“bit=char”,“interrupt 2 =”。保存后会发现“REGtenxTM52F5278B.h”文件里面的错误已经消失了。

2、在代码自动补全文件:“c.json”中配置:

{

// Place your snippets for c here. Each snippet is defined under a snippet name and has a prefix, body and

// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:

// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the

// same ids are connected.

// Example:

// "Print to console": {

// "prefix": "log",

// "body": [

// "console.log('$1');",

// "$2"

// ],

// "description": "Log output to console"

// }

"H file frame": {

"prefix": "hframe",

"body": [

"#ifndef __$1_h",

"#define __$1_h ",

"//Hal: exp: #define P_led P10 ----------------\n",

"//Const: exp: #define D_data 1 ---------------\n",

"//Globle var ---------------------------------\n",

"#ifdef __$1_c\n",

"#else\n",

"#endif\n",

"//Action Macro: exp: #define F_getData() -----\n",

"//Function -----------------------------------\n",

"#endif"

]

},

"C file frame":{

"prefix": "cframe",

"body": [

"#define __$1_c ",

"#include \"includeAll.h\"\n"

]

},

"C function div":{

"prefix": "fdiv",

"body": [

"//============================================\n"

]

},

"main":{

"prefix": "mainframe",

"body":[

"//============================================",

"void main(){",

"InitSys();\n",

"while(1){",

"}",

"}",

"//============================================",

"void DisplayProcess(){\n",

"}",

"//============================================",

"void UserSettingProcess(){\n",

"}",

"//============================================",

"void TaskProcess(){\n",

"}",

"//============================================",

"void TimeProcess(){\n",

"}"

]

}

}

3、格式化代码(需要用到插件:Clang-Format):点击菜单栏中的“文件”—>“首选项”—>“设置”打开“Settings”文件。在扩展—>“C/C++”—>“C_Cpp:Clang_format_fallback Style”选项填写“LLVM”;在扩展—>“Clang-Format configuration”—>Fallback Style选项中填写“LLVM”。

最后,在“Settings”文件中,搜索:“Code Action On Save”,点击“Edit in settings.json”查看一下是否配置成功。也可通过搜索:“C_Cpp:Clang_format_path”,点击“Edit in settings.json”查看一下是否配置成功。

4、局部变量:可能发生动态内存溢出;

全局变量:在编译的时候就已经分配了内存。

使用全局变量会增加文件之间的耦合度。

“extern uint8_t ledFlashCounter”表示其为外部变量,这里只是引用进来进行使用而已。

5、在C语言中,函数一定是全局的,没有局部函数之说,所以函数在引用声明时不需要在前面加上“extern”。

6、变量的作用域:

·静态全局变量的作用域,可见域就是所定义的本文件;别的文件用“extern”是引用不了的,生命周期为整个程序;

·全局变量,用“extern”将其可见域拓展到其他文件。

静态局部变量:

·局部变量:作用域、可见域、生命周期均为所属函数。

7、“uint8_t ledFlashCounter”:定义并分配内存空间给ledFlashCounter

8、取名字标准

函数名:首字母大写,采用驼峰形式;

变量名:首字母小写,采用驼峰形式;

类型名:基础数据类型全部采用转义的方式,要把其“是否有符号”、“类型形式”、“二进制长度”都表示出来,同时在末尾加上“_t

如:

typedef unsigned char uint8_t;

typedef unsigned int uint16_t;

typedef unsigned long uint32_t;

typedef char int8_t;

typedef short int16_t;

宏定义:第一个字母大写,其次加上一个下划线“_”,如:P_led、D_led、F_ledOn()

以双划线“__”开头的宏定义

以“P_”开头的宏定义

以“D_”开头的宏定义

以“F_”开头的宏定义

(0)

相关推荐

  • Go语言开发环境搭建

    一.Windows下安装 安装Go开发包 官网下载Go语言开发包,安装方法就是next,除了安装位置选择 安装目录选定一个好记的.尽量不要放在C盘中,除非你盘空间很大,完全够用.此路径需要自己记住,需 ...

  • Python编程的最好搭档:VSCode 详细指南

    刚学Python的同学可能会觉得每次写Python的时候都得打开Cmd有点烦躁,直接上手Pycharm的同学可能会觉得这软件太笨重了,晦涩难用.那么有没有省去打开CMD的步骤,又能弥补Pycharm笨 ...

  • 如何从零开始开发一个 VS Code 插件?

     今天 之前一直以为开发VS code插件是一件很难的事情,后来工作上需要搞一个效率小工具,就试着找了些资料来入门,发现其实就入门和开发一些简单功能的插件来说难度还是很低的.因为vscode本身是基于 ...

  • VSCode自制的IDE编译多个源文件

    文/Edward 前一篇文章中,我们讲述了如何利用VSCode软件来搭建一个C语言的开发环境,这个C语言的开发环境和我们之前<乐创C语言教程>里面所讲述的有很大差别,这些差别在我看来对于那 ...

  • VS CODE一些常见配置操作(快捷键设置、C/C 的debug、代码路径配置)

    总述 今天来一篇简单的操作文章吧,VSCODE是我们经常用的软件,我之前也写过关于VSCODE远程办公的一些的操作(有兴趣的朋友可以点击进去看看),今天我再稍微介绍一些我其他地方用到的一些操作,做个整 ...

  • 原来搞单片机也可以面向对象

    摘要:在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范.自己写单片机程序时,也许你也是奔溃的.总感觉重新开启一个项目,之前的写过相似的代码 ...

  • Linux/Ubuntu中Vs Code配置C /C环境

    这篇博文演示在Ubuntu虚拟机中安装Vs Code并配置C++/C环境 第一步:安装并运行Vs Code 进入应用商店搜索visual studio code并点击install进行安装 安装后在终 ...

  • 如何通过vscode运行调试javascript代码

    方法一: 在 js 后缀文件中写 javascript 代码. 1. 环境配置: (1). 需要安装 nodejs (在Bing搜索中输入 nodejs, 找到nodejs官网,然后找到适合你电脑配置 ...

  • 万字长文把VSCode打造成C开发利器,解决你的多重开发需求

    https://m.toutiao.com/is/JHSE2SV/ 作者: denniszhu ,腾讯 CDG 开发工程师 面对大量代码,在开发任务繁重场景下,VSCode 绝对是一把利器.本文虽以 ...

  • VSCode Snippets 使用指南

    我们在写代码的过程中,常常会遇到一些固定的代码结构,形如输入一串console.log或者输入for的结构甚至是编写redux的reducers等等.反复写这些代码结构,不仅枯燥无聊,也会觉得效率不够 ...

  • Vscode中自动生成Verilog/VHDL模板以及代码自动联想

    为了高效开发VHDL/Verilog,使用的编辑器一般会有很多的插件便于用户的开发,比如自动生成测试文件的插件(我当初也发过相关的脚本),语法的检测,模块的联想自动补充,这些插件提供的都属于通用的功能 ...