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

2024-03-10 23:20

本文主要是介绍振南技术干货集:振南当年入门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 语言的那些技巧与深层理解”,感兴趣的读者可以看一下。)

这篇关于振南技术干货集:振南当年入门C语言和单片机的那些事儿(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/795848

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就