振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)

简介: 振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)

目录

第一章《振南当年入门 C 语言和单片机的那些事儿》

1、注定堕入单片机

1.1 懵懂好奇的我

(小时候好奇的性格经常让我屁股开花。初中开始对计算机产生兴趣,并一发不可收拾。)

1.2 我的 C 语言学习经历

(上大学后自学 C 语言。遇到“能人”加入 ACM 竞赛。感觉 C 语言乐趣多多,程序如人生。)

1.3 C 语言的顶级赛事

ACM 国际程序设计竞赛在东北被我们发扬光大。ACM 竞赛浙大的一段传奇佳话。振南在关注的 IOCCC 国际混乱 C 代码大赛。网吧包宿学 C 语言惊呆室友。)

1.4 岔路口上选择单片机

(搞纯软件还是搞单片机,这是一个抉择。鬼才杜撰拉我进入单片机快车道。)

1.5 窗户纸破了

(入门阶段的困惑,看破 C 语言与单片机之间的鸿沟。)

2 、看穿单片机

2.1 CPU 模型

(CISC 与 RISC 指令集。CPU 如何执行指令。汇编不是第一代编程语言,打孔纸带才是。)

2.2 存储器模型

(存储器就是一个指令和数据的容器。)

2.3 总线模型

(地址、数据和控制三大总线。贯穿整个单片机芯片的通路。)

2.4 外设模型

3、单片机跑起来

3.1 时钟系统

(时钟是单片机激励和血液。时钟频率不能无限提高。)

3.2 二进制

(为什么单片机采用二进制?振南告诉你如果单片机使用十进制会怎样?)

3.3 中断机制

(中断不是在给 CPU 捣乱。中断对于单片机为什么如何重要?)

振南当年入门 C语言和 单片机的那些事儿

致广大单片机学习者和工程师:

你们所经历的,振南也一样不落的都经历过。起初对于C语言和单片机学习上的迷茫困感可能比你们更甚,但是一切都过来了,没什么能够真正难倒我们,相信自己!谨以此文,向大家讲述我十多年前入门阶段的往事和感悟,以及告诉大家:单片机到底是什么?

为什么很多初学者都被困在C语言与单片机本门基础的山脚下止步不前,彷徨徘徊?为什么大家在学习上花费了如此大的精力,却收效甚微?为什么C语言中的指针就那么难于理解,始终让人们摸不着头脑? 又为什么看似些无问题的代码,烧录到单片机中运行就是不对?这一切的一切都归结于一个根源:对C语言的本质和单片机的体系结构与运作机制认识不清!

通过本章,我希望能让你看穿一切,升华你的整体认知。

此时,你会发现作单片机和嵌入式开发是如此简单,单片机也变得“乖巧”了很多,仿佛一切都变得顺畅了,和谐了!

注定堕入单片机

2005 年开始接触单片机和嵌入式技术,从此随入其中,直至今日。这十几年里经历了很多项目,遇到了无数技术点。从一个涉世不深的初学者,成长为了现在还算称得上是“资深”的工程师。这期间我还扮演着另一个角色一技术和知识的传授者和解惑者。我热衷于这种工程师之间的交流,它时常会带给我反思、领悟和动力,让我一直保持追求新技术新高度的热情和信念。

在交流中,我无数次地被问到一个问题:“如何才能学好嵌入式 C语言和单片机?”我也确实深深感觉到:C 语言的掌握程度亚重制约着单片机和嵌入式工程师的研发水平。其实,我在硬件方面的研发水平很大程度上得益于我 C 语言的扎实基础和对其深入细致的理解。下面,我结合我较早期的学习经历和感悟来讲一下嵌入式 C 语言应该如何学好(年代可能会有些久远)。也许,我的经历不易复制,但它作为一种学习方式,大家多少可以借鉴。

引用我启蒙老师的一句话:“C语言,学得多精都不为过!要学单片机,先学C 语言。”

1.1懵懂好奇的我

性格决定你所能从事的事业,也决定了你的命运。

我的性格是对新鲜事物有极大的好奇,而且这种好奇会发展为兴趣,并最终狂热。当我脑子里出现一个新想法,我就会迫不及待地去实现它,而且不看到它最后的样子,不会轻易放弃,不论成败都要试试。在我记忆里,我小时候就是这样的。

有一次我看到一根铁丝,正好我衣兜里有一个皮筋,于是我就作了一个弹弓。后来一发不可收拾,我迷上了作弹弓,各种各样,大大小小。还不乏创新和发挥,我想到在电影里见过的誓(其实我当时还不知道它叫警),于是接下来的很长时间我一直在研究如何用铁丝制造一把弩最终,弩出现了。原来玩弹弓时的纸子弹被我换成了石子,随着扳机的扣动,我的屁股也开花了。

上初中的时候,我通过学校开设的兴趣班第一次接触到计算机,第一次知道了 DOS、Win-dows98、WPS、输入法这些东西,迅速燃起了对计算机的好奇和兴趣。当时我渴望拥有自己的计算机。于是开始天天缠着我爸妈给我买一台计算机。碍于当时的经济条件,最后家里给我买了一台学习机。用它可以模拟 DOS 环境、练习指法,还有一些简单的编程,如 LOGO,BAS-IC 等。从此,我开始有了最基本的编程意识:程序就是一行行顺序执行的语句。但是对循环条件判断等比较复杂的东西还不够熟练,只能说有一个概念。

对计算机的兴趣没有像以往一样,热乎一段时间就放下了。我发现计算机要学的东西非常多,而且它好像一直都在变化出新,这些新的东西又会再一次掀起我的兴趣。对计算机的狂热从上了高中就开始了。长期基子学习机的练习,我的指法已经足够熟练,但是用拼音输人入文字速度太慢,所以我报班学了五笔,一直沿用至今(现在每当有人知道我用五笔的时候都会对我投来钦佩的目光)。在一顿软磨硬泡之下,我拥有了第一台自己的奔IV电脑,从此我的“折腾”开始了。

1.2 我的C语言学习经历

基于我对计算机的浓厚兴趣,高考报志愿的时候,我四个志愿全部报了计算机专业,从那时起,注定了我将以计算机为伴、为业。

原以为进了大学就能马上接受正统的计算机教育了,其实并不是。计算机专业一开始并不直接学编程,而是学数学。我当时比较迷茫,觉得学计算机不教编程,上学有什么用?其实我知道专业课程安排的用意,计算机科学的基础是数学,应该先打基础。但是又有多少学生真正去好好学习这些基础而枯燥的东西。导致很多人整个大一的宝贵时间都浪费在打游戏上,估计他们已经忘了自己为什么要学计算机了。我也怕会变成这样。我开始自学很多计算机方面的知识,但是又漫无目的,直到我碰到一个“能人”。据说他小学开始学计算机,初中已经可以独立开发软件,高中时因为开发了一个网络软件,被某软件平台收录,并评为五星软件,而被免试特招。他智商高,但似乎情商不是太高,经常容易得罪人.有一些让别人不太舒服的做事风格。有一次我们偶然聊天,他提到国际 ACM 程序设计竞赛的事情,问我有没有兴趣参加,说已经集结了五六个人,组成小组参加比赛。从此我开始有了动力,开始自学 C 语言和算法,参加团队集训,下载往年竞赛题目模拟竞技,相互交流经验。当时专业课还没有开 C语言,但是我们已经都是 C 语言高手了。也许,应该在这里放一道ACM竞赛的试题给大家解解闷(这是一道陈年老题,感兴趣的话可以百度)。对!ACM试题是全英文的(见图 1.1)。

大二下学期,C 语言专业课开了。很多人并不知道 C语言有什么用,带着迷茫上课、考试通过,最后忘掉。我开始慢慢深刻感觉到 C语言的精妙,它有自己严格的语法规则,但是又不作过多限定,这让它非常灵活而实用。同一个逻辑功能,可以有很多种 C 语言的表达方式,它-定程度上体现出了编程者自身的习惯和素养。代码可以写得很乱,也可以写得很优雅;可以写得冗长罗嗦,也可以写得如蜻蜒点水,几行了事。但是乱也可以错落有致,寥寥几行也可以大显功底。我意识到 C 语言没那么简单,不仅仅是一门语言而已,它会伴随我一生,正如后来有人所说的“程序如人生”。

我的性格仍然在发挥着巨大的作用。随着不断的学 C 语言,用 C 语言,我开始觉得 C 语言真的是乐趣多多,如同挖矿,永远都有那些未曾遍及的角落,永远都有没有见过的另类技巧.永远都有富含创意的智慧的流露。(关于 C语言的技巧,振南专门整理成了一章“C 语言的那些技巧与深层理解”,感兴趣的读者可以看一下。)

相关文章
|
2月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
62 2
|
2月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
30 1
|
2月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
4月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
5月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
69 4
【C语言入门】初识C语言:掌握编程的基石
|
4月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
60 1
|
5月前
|
编译器 C语言 C++
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
C++从遗忘到入门问题之C++持从C语言的过渡问题如何解决
|
2月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
36 3
|
18天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
31 6
|
1天前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
19 6