之C语言基础一)
前言前段时间给自己放了一个长假和家人出去玩了一圈最近又一直在处理一些工作就没有多少时间做视频所以就有很长一段时间没有更新视频了后面整理一些内容再更新出来。发现B站也能写些文章估计是太小众了吧是我孤陋寡闻了之前一直没用过今天就试着把公众号上的文章搬过来看看吧。前期搬过来的一些文章可能发表比较久远的了如果一些话不合语境还望谅解哈哈哈~以后再保持两个平台同步吧如果觉得还有点用希望能点个赞如果发现错误还请指正为什么是C从这篇文章开始我们将讲解单片机编程开发相关知识如果没有编程基础或不太熟练的朋友就跟着一起从基础学起吧但一定要记住看完后自己必须多思考多查资料多练习才能掌握得了不然后面的内容会完全跟不上从而失去学习兴趣有问题可以留言或私信。有基础的朋友可以略过这些基础知识讲解内容当然我还是建议如果有空还是值得看一下的毕竟是我一字一句敲下来的给个面子撒若发现错误顺便指出来就更好了明天周六那正好这篇文章可以多扯会淡。我们使用51单片机开发项目时使用的编程语言主要有两种即汇编语言和C语言通常情况下多数人使用的都是C语言。有些人可能看到汇编就想起了微机原理了吧微机原理难不难比较难它的难很大程度是因为它需要用汇编语言开发。为什么我们不用JavaPython等更简单的高级语言呢因为那会它们都还没出生呀它娘都还年轻着呢。任何事物产生都得依靠环境吧正所谓经济基础决定上层建筑这些高级语言耗费的内存空间巨大对于8086,8051等早期的控制器来说其内部资源非常有限甚至内部ram都没有还得外挂才能用每一点资源都得抠抠搜搜省着用现在它们见到JavaPython等语言也只能说臣妾办不到呀汇编语言的特点就是紧凑访问底层硬件非常容易特别容易生成机器代码所以它具有天生的优势但它的最大缺点也是最致命的就是它的代码可读性太差不好记呀简单说就是这家伙亲机器不亲人类。我们人类最喜欢偷懒了就像汇编出来后手打的机器代码被人抛弃了一样有人可能没听说过手打机器代码这玩意在一些科技纪录片或电影里找找应该有说实话现实版的我也没见过科技博物馆应该有所以那时候的计算机等专业绝对不是热门专业谁没事想整天对着一堆纸费那么大劲呢是吧万一媳妇找不着咋整呀后来C语言被开发出来它保持了汇编优良的底层访问效率而且可读性大大增强它访问硬件的效率稍微逊色于汇编代码也没汇编精简但终于可以不用记忆代码了呀牺牲一点效率和空间也OK啦后来计算机资源越来越来丰富了JavaPython等各类牛鬼蛇神的高级语言出来后C语言也慢慢地落寞了对吧人啦就是善变来个富婆爷就可以“抛妻夫弃子”长相年龄通通都不重要但它的境遇比纸带代码和汇编要好很过至少它可读性良好对底层访问效率够高在电子微控制器领域还是没人能取代它的地位。所以以后人类社会只要还使用电子产品就应该还会存在C语言。以上扯了这么多就是为了说清单片机开发选择C语言的原因同时也说明一点如果你掌握好了C语言就不愁找不到工作虽然它可能不能像游戏开发移动应用开发网页开发等互联网行业一样动不动就年薪百万但再不济在电子行业总有一家公司容得下你。并且当你你有C语言的基础后你再学习其他语言会更轻松到时同样可以获得互联网行业的工作。有很多初学者可能意志不坚看到其他语言简单或哪个朋友啥东西好就又去学其他的去了这都是很正常的事我觉得选择没有对错之分你也不会因为一个选择就错过了人生更何况这世界何为成败这是一个很主观的词即使到盖棺定论也没有人可论你成败后人评论的就不关自己啥事了吧。所以特别是在校大学生在没毕业之前多去探索一些自己喜欢的事物吧这总比做玩游戏的死肥宅强。这不昨天刚高考完嘛如果是今年刚参加高考的朋友看到这篇文章又有志于做程序员的那也送上一句少年不管考试结果如何趁年轻尽管去折腾吧前段时间有一个小弟弟初中毕业后修车修了差不多五年了他看了我的视频后跟我说想学电子以后更专业的修车拿更高的工资我对他这股学习的劲是非常赞同的并且他目标已经很明确了我觉得这小朋友有戏。他自己也买了材料书籍仪器来学习并且也认识到自己差一个人带我就跟他说遇到问题告诉我。这段时间他碰到问题就会跟我说虽然最开始他问的很基础有些甚至让我哭笑不得也有些是代沟问题吧毕竟00后脑回路跟我还是不一样但我尽量以他了解的基础给予回复现在他提的一些问题就慢慢的专业一些了这是一件很趣的事情。一个对比的例子就是我的外甥高中文化几年前他说想跟我学我当面跟他说需要准备什么学习什么怎么做把前期学习需要准备的资料也给到他让他遇到问题就及时告诉我前两天还能问些问题一个星期左右就变成我问他学习进度了到后面我问他也得不到回复了现在几年过去了它干着我看不懂的工作不知是好事还是坏事也不知道是不是自己对他期望太高。我的结论就是不管学什么知识只有你自己真正有了一个明确的目标之后监督自己认清现状调整状态找到适合自己的解决方案一步一步实现小目标你才能取得成效。先不扯远了吧接下来进入正题。C语言简介C语言是1972 年在美国ATT公司的贝尔实验室的丹尼斯·里奇为了移植与开发 UNIX 操作系统而设计开发的语言其代码的可读性和移植性远远超过汇编语言。C语言也是一种高级语言我们知道高级语言在效率和代码空间上都不敌汇编但一方面C语言具有指针该功能使其能对硬件地址进行直接操作另外C语言通过编译器的优化很大程度提高了执行效率降低了程序空间在对实时性要求较高的场合还可通过对C语言可嵌入汇编代码来实现功能。而对于较大的程序无论从开发的速度、结构的清晰等方面来比较C语言比汇编具有更多的优势。C 语言标准是于 1988 年由美国国家标准协会ANSI全称 American National Standard Institute制定的。至 1973 年起UNIX 操作系统完全使用 C 语言编写。目前C 语言是最广泛使用的系统程序设计语言之一。大多数先进的软件都是使用 C 语言实现的。当今最流行的 Linux 操作系统和 RDBMSRelational Database Management System关系数据库管理系统 MySQL 等都是使用 C 语言编写的。C语言能运用于大多数软件开发场景。甚至后续很多其他高级语言都是使用C语言开发的。以上都是C语言的一些常规优势下面我们再来看看使用C语言进行单片机编程的一些优势作为高级语言可读性强不依赖于机器移植性好。可直接访问物理地址程序执行效率高。可进行位操作可提升寄存器访问效率。拥有复杂的数据类型可增强对程序处理的能力。即使不懂得单片机指令集也能编写单片机程序。具有常用的标准函数库。具有专门针对MCS-51单片机的code、data、idata、pdata、xdata等存储类型满足不同需求并能自动为变量合理分配地址。具有small、compact、large等编译模式可适应不同大小的片上存储器。总之一句可读行强功能先进效率高可移植性好。看明白看吧这里还是在说为何选择C语言开发上一节太长不想看直接看这一节内容就行欲练此功……C51编译器51单片机开发编译有很多现在比较有名的是IAR for 8051编译器和KEIL for C51编译器但这两个软件都不是免费的官网提高的免费版是有使用限制的。另外还有一些编译器是免费的但需要一定基础初学者就不推荐使用了等你翅膀硬了之后在自己配置编译环境吧。简单介绍两个免费编译器可跨平台使用的开源编译器sdcc有空可以自己查资料搭建一下后期如果有时间我再做个教程吧。另外微软公司提供的Visual Studio Code这个免费又强大的代码编辑器配合一些三方插件工具也可以实现各种单片机编译功能效果也不错这个也以后再另说吧。IAR for 8051编译器和KEIL for C51编译器在官网都可以免费下载可自行下载安装我这里后续的内容以KEIL for C51编译器为例。关于KEIL for C51编译器的安装前面的视频里有提到过了不知道的可以点击查看keil MDK与C51共存也算个问题C语言变量类型和数据范围有C语言基础的朋友可以不看或简单看一下。什么是变量变量自然和常量是相对的。常量就是1、2、3、4.5、10.6…等已经确定的数据或字符串而变量则跟中小学阶段方程式中的abc……xyz是一样它可以是1也可以让它是2或者任何其他数字。以前数学里边有的正数、负数、整数和小数可以是无穷的。但在计算机系统中由于内部空间的限制在C语言里除名字和数学里学的不一样外还对数据范围也进行了一定限制。在C语言中数据基本类型分为字符型、整型、长整型以及浮点型它们的数值范围不一。并且C51中的数据范围和常规计算机平台的略有不同以后可能在其他单片机中又会有些不一样这都是单片机硬件属性决定的这点大家不用死记做个了解以后编程时多注意一下就行具体问题具体分析。在我们平时编程的时候也要考虑合理使用数据类型为变量合理分配数据类型一个可以避免数据超限另外也可以节约内存空间。优化程序的时候也应考虑数据类型的合理合规。C51数据类型和范围查看下图C51数据类型和范围C语言基本运算符简介和小学学习数学时的加、减、乘、除等运算符号一样在C语言中也包含这些运算但是有些表达方法不一样并且还有其他额外的一些运算符号。在C语言编程中加、减、乘、除和取余数的符号分别是、-、*、/、%。此外C语言中还有额外的两个运算符和--它们的用法是一样的一个是自加1一个是自减1以上的运算符称为算术运算符它的具体功能如下C语言算术运算符与数学中的关系运算符一样C语言中也有关系运算符只是他们的写法你不一定认识比如!它们的具体使用说明如下C语言关系运算符C语言中还有逻辑运算符比如||!C语言逻辑运算符因为计算机是使用二进制所以C语言中还有位运算符使用说明如下C语言位运算符以上很多运算符你之前可能都只见过符号不认识含义在C语言中未来编程方便还有许多赋值运算符。你可能想到但还有-*/等等更多你没讲过的一起来看看C语言赋值运算符还有一些用的多的又是初学者很容易搞混的运算符如下需要注意的运算符因为内容比较多我们在这一节就先简单了解后面编程具体使用时再详细介绍。和数学中的运算符具有优先顺序一样C语言中的运算符也有优先顺序他和数学中的运算符优先级差不多但因为多了很多我们平时编程时需要记住它们的优先顺序否则结果可能不如你意当然我们在不清楚的情况下使用括号来限定运算范围是很好的习惯现在我们看一下C语言中的运算符优先级C语言运算符优先级小结以上内容都比较容易接受吧和小学数学差不多不过有些符号没见过可能有些人是懵了那就需要多花些时间理解熟练所以这一节先介绍这么多。但是如果对什么的运算符不太理解也没关系毕竟是初学不表达不出的逻辑思想转化为自己熟悉的逻辑也是可以的以后熟练了自然而然就会了。下一篇文章我们再接着把剩下的一些基础内容讲完再接下来我们就要进行编程开发了有趣的才刚开始更多有趣内容还在后头呢所以还没理解的一定要抓紧时间把基础问题消化好。若发现错误欢迎指正