我的学习开始及历程

news/2025/10/19 16:53:52/文章来源:https://www.cnblogs.com/juezhong/p/19150838

第一篇的随笔中我写到:「带来更多的体会和收获,就不会是毫无意义的普通文字了。」
所以就当作重新梳理自己来写这个随笔了。

嵌入式的开始接触

大约是大一的时候,比较疯狂的「迷恋」C++(实际也是优雅又写起来很语义清晰的语言),我还是觉得自己有些笨笨的,学习的速度比较慢,总之花了挺多的时间学习完了 《C Primer Plus》 这本入门级别的 C 语言教程,这花的时间不能算作是什么证明,可能只是浪费了这么多时间的痕迹罢了。

接着就是读约一千页左右的 《C++ Primer Plus》 了,也不知道自己是如何读完的,总之也是读了很久的时间,牺牲了很多的时间,但还是觉得速度很慢了,也可能是自己的动力本来就不足,懒懒的

由于国内普遍的都是 C 语言的入门学习,这也让我在另一方面有了更多的时间,可以从一些课堂课程中抽出其他的时间来学习,但我还是懒懒的,还是一样玩过去了,好在整体而言的进度没有丢,也算还行了。
过完 C 语言之后就是让我个人觉得冗长又繁琐,又笨重的 Java 了,实际一点也提不起兴趣,当然在某些过渡期还是感觉到了迷茫,就想的是 “学完了,学什么呢?”
之后就开始找一些基础课程看,也只不过是看完了一点数据结构,之后又补了一些计算机组成原理,计算机网络的视频,大部分也只是囫囵吞枣了,实际还是没有一些想法和思维的养成。

人和人最根本的差别是什么呢? —— 由我一位老师提问,但我深深共鸣的问题,我随即脱口而出答案,我很欣赏他,实在是不可多得的好老师。

在某个阶段的时候,由于运气比较好,通过了学校某竞赛的挑选,进入了另外的环境学习(熟悉我的朋友肯定知道的),之后就是几乎每天的跑学习场地了,和几个小伙伴一起,几乎算的上是无忧无虑的时光了,不仅是精进了自己,也是没有什么烦恼了,不可多得的好时候。
每天就是白天进房子,黑天回宿舍,实际最后直接睡在那了,宿舍也懒得回了。(贴上以前还发的 pyq 动态)

我必须再贴一个令人非常佩服的室友,我是真的觉得他非常的努力,超过我太多了。这里的某位可惜的是现在交流会比较少了,但我觉得情谊不少,至少他亲口说过还是很感谢我的,我也非常庆幸他能够越来越好。

当时有一个初选的题目是使用多线程交替输出一些字符,记不太清了应该是这样,由于运气比较好,刚好看了 生产者-消费者模型 也算是还可以的通过了,当然我还是觉得其他人一样有这个实力,因为其他人一样通过了,说不定是比我更好(实际这些伙伴们是真的很不错!!每个都非常的认真!努力!有干劲!)。
所以这时候也是遇到了一位特别负责和认真的老师,我觉得和我特别的契合,因为他也说: “别人会的,我肯定也能学会,不就是多学了几年,多花了点时间,我也一定能学会。”

此和翁凯老师在 MOOC 的 C 语言课程说的:“学计算机一定要有一个非常强大的心理状态,计算机的所有东西都是人做出来的,别人能想的出来,我也一定能想得出来,在计算机的世界里没有任何的黑魔法,所有的东西只不过是我现在不知道而已,总有一天我会把所有的细节、所有的内部的东西全搞明白的。“
(但实际可能会非常难,经常放弃了)

我也正是在这个时候第一次接触了一个叫做 STM32F407 的芯片,只不过我当时 完全,完全,完全不懂 这是什么东西,代码也只是之前使用的代码,我将它摸熟悉了而已,连一些什么基础的什么叫 高电平低电平 都搞不明白,
什么是 时钟定时器GPIOIIC 统统都不知道,更别提什么烧录芯片等基本操作了,完全不懂,只是闷头学了,但是也完全不懂,但因为整体的团的要求也只能是这样了,后面结束之后有机会才是开始了自己的学习。

至此算是第一次的接触,后来才知道 STM32F407 算是一个性能不错的芯片了。

漫长的学习

由于并不是从一开始就是学习嵌入式,也并非电子科技等专业,所以对于一些电子特性完全不熟悉,甚至还想着是否要将模电,数电两门课程学习,后来也是因为时间不允许加上特别的懒就没有学。
期间也是搜索了特别多的资源,在 STM32 不是特别火的时候,大部分帖子还是比较旧,学习的还是 C518bit 的单片机,由于有了前面的 C 语言的基础,学习起来并不算困难,但也不算轻松。
之前在学习的伙伴买了一块板子,我根本不懂,只觉得这比我牛逼多了,他给我展示了什么不太清楚了,好像是一个点灯,但是也是让我震惊不已,
可惜他现在似乎并没有坚持学习嵌入式了,还是在 Java 中了。(很可惜现在也看不到他这个 pyq 动态了

实际上我的 C51 的学习也是在此后几年(升本后)的事情了,期间是再次补全了一下基础的课程,有了更多的一点印象。(说的好听,实际是浪费时间了,纯玩)
对于 C51 也是大量的在找视频观看,试图去理解和揣摩那些晦涩难懂的名词概念,好歹是让我慢慢清楚了之前 接触的但是不懂的 东西了,这个时候其实已经花费了特别多的时间,
包括做其他的事情,也贴上来一个图片吧,实际这个图片是让我非常伤心的一个时间拍摄的。

此时还是学习这个叫啥来着我已经忘记了,然后又浪费时间,费了一番力气弄出来个时间,又拍照记录了下来。

至此大部分基础的嵌入式的概念算是基本弄清楚了,但这个时候还是没有开启 STM32 的学习。

继续的学习

在用完 C51 学习后随即就应该也是进入 STM32 的学习,但是我那是还是不懂这是个什么东西,也不知道买什么好,所以看到其他的同学购买了一个 野火STM32F1 系列的产品,
我也是跟着购买了,但发现也没有什么好学的,可能也是过了那一段激情的时刻了,总结来说算是看了一些新的函数,新的使用方式,打开了新的窍门,知道了 居然 可以用 结构体 来封装这些参数使用,
确实很无知,也确实有点笨,感叹还是不太懂 OOP 的使用和思想。

这继续学习的 STM32 也只是重新走了一遍原来的学习路线,哦我连最基础的方式 寄存器编程 我也搞不懂是什么东西,还觉得这他妈是为啥,这样就能输出了吗?这样为什么它就亮了呢?
很长一段时间我也搞懂寄存器到底是个什么东西,但大概理解了我也就算了,这重走一遍只是换了新的编程方式,用了 STM32标准库、HAL 库 这样别人封装好的函数,
更多的也是在了解如何使用,至于原理部分已经没太大需要了,所以这算是一个性价比较低的一次购入,花费的时间金钱挺多的。(因为一块板子还他妈几百块又没啥用

又玩了一段时间后(我是说我有点懒懒的),开始自己捣鼓一些,试着不看教学视频,不看文字教程,只从一些器件手册以及现阶段掌握的知识来动手做点什么,
点亮了一个 LCD 的屏幕,和实际又是很长一段时间后(期间又偷懒了)捣鼓的 0.96 inc OLED(IIC) 屏幕。

Do u remember me?

回顾学习

也跳过了 RTOS 的内容没有讲,由于这个和单片机开发的关联性较大,使用 Linux 的部分完全不会用到直接略过
目前的一些异构双核,或是 ARM + FPGA 的实现可以支持 Linux + RTOS (Xilinx提出的 Linux + zephyr)同时运行,但专业的东西由专业的人干,所以直接略过,反正我也不是特别清楚

至于为什么没有提到 Linux 的内容,因为我几乎所有的操作下都是在 Linux 中进行的,所以所有的 Linux 算是比较的得心应手,没有什么难度了,但这并不代表着它不重要,
不过基础的日常使用也够了,除非需要否则不必太多的深入和研究,因为很多的基础编译命令的操作(gcc, make)都是在 Linux 中使用的,特别是对其的如 交叉编译工具链Make file 等,
同时还有其他的日常使用的工具(grep, find, vim)等,现代有更好的性能更好的不再指出,如果你会用,自然就会找到它们。 (ripgrep, fd, neovim...) 所以这部分的内容也令我有了一定的基础,后续对于 Linux 内的调试手段不至于那么的吃力。

接下来的是内核的学习,这部分实际是非常,非常,非常繁琐和系统的,庞大的东西,如果是没有人教,可能会像无头苍蝇的到处找资料,但又好像不知道从哪里入手,至少我是这样的,而且找到了也都看不懂。
进入这部分的内容一定是需要更多的信心,耐心和勇气了,有一次想看的 MTD子系统 甚至都找不到资料,只找到一些年代久远的视频,和一些质量不高的文章。
上句提到的子系统我刚接触时也是十分的懵,根本搞不清楚这是什么东西,后来才慢慢知道,原来内核除了关键的部分组件,其他实现的功能可以叫做 子系统
所以 Linux 内核中的子系统非常的多,且函数调用十分的多,十分的深,系统架构十分的好,学习一个可能就要花费非常多的时间,并且可能都有些难度。(至少对我目前来说)

有些时候比如 BSP 的工程师,更多可能是专注在这些子系统的工作中,为新生产的芯片添加对应的驱动,或维护原有的代码,或给新的芯片适配原有的设备使其能正常运行,
或给新的设备适配原有的芯片使其能正常运行,并提供出一套简单易用的 API 函数,这时候可能做的就是一个芯片,一块评估板的 bring-up 的工作。

对于内核大概可以分成两大部分,核心组件 ,核心可以说是内核具有的,操作系统的特性:内存管理,进程管理等等,组件可以说是各种子系统了,因为没有子系统内核也是能运行。(注意这部分的内核可意指操作系统,因为 Linux 本来就是一个操作系统)
所以大致可以从两方面开始入手,一是基础的操作系统核心的部分,这部分其实在编写驱动程序的时候也是十分必要的,不可以小看,要编写一个可用的好的程序,有很多东西需要考虑,
可以是时序,互斥和锁的时机,睡眠调度的问题等等;二就是必要的一些子系统了,这部分在编写驱动也是十分必要的,但是没有的话也是能写驱动,
只是没法用罢了,诸如 IIC 子系统SPI 子系统时钟子系统GPIO 子系统Flash 子系统DMA 子系统(我到现在也有挺多没有掌握的
没有这些子系统也没法和外部的设备(外设 peripherals)通信。

至于其他的如何编译内核?如何裁剪内核?等等诸如此类的问题,太简单了,其是基础的东西应该非常容易可以查到,只要想找,以及信息检索能力在线,不可能找不到,
不赘述也不一定是忽略的内容,很多时候存在知识的壁垒(还是叫知识的陷阱忘了)的,如果有幸被看到此篇,再可能有引发一些思考和帮助就更好了。

写下来其实要花挺多时间的,也可能后面就乱发一些碎碎念了

其实我到现在连 DMA 驱动都不会写.. 甚至之前连 MMU 是什么都不知道,也没有内存管理的概念..
所以说来我确实是有些笨笨的。(还有其他方面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超微磨粉机,高压磨粉机公司推荐!

2025年磨粉机厂家推荐排行榜:雷蒙磨粉机、环辊磨粉机、摆式磨粉机、矿石磨粉机、超微磨粉机、高压磨粉机公司推荐!随着工业技术的不断进步,磨粉机在矿业、化工、建材等多个领域发挥着越来越重要的作用。为了帮助企业…

Java基础语法与面向对象

什么是重载(Overload)和重写(Override)?有什么区别?重载(Overload):同一类中,方法名相同但参数列表不同(参数类型、个数、顺序不同),与返回值无关。重写(Override):子类继承父类后,对父类的方法进行重…

从汇编角度看C++优化:编译器真正做了什么 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【从零开始学习RabbitMQ】

实用指南:【从零开始学习RabbitMQ】pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

Godot-C#处理节点关系

Godot C#处理节点关系 简介 我们知道在游戏中,任何事物都可以看做一个节点,而节点之间的关系可以帮助我们更好的管理游戏世界。Godot中,节点之间的关系可以分为两种:父子关系和兄弟关系。godot已经提供了现成的方法…

2025信息流代运营推荐:线尚网络精准投放,效果显著!

2025信息流代运营推荐:线尚网络精准投放,效果显著!随着互联网技术的飞速发展,信息流广告已成为企业营销的重要手段。然而,信息流代运营领域也面临着诸多技术挑战和数据问题。本文将深入探讨当前信息流代运营领域的…

零售行业绩效流程推行难点及 Tita 目标绩效一体化管理方案

在零售行业,市场环境瞬息万变,顾客需求日益多样化,使得绩效流程的推行充满挑战。要想在激烈竞争中脱颖而出,企业需借助高效工具实现目标绩效一体化管理,Tita 平台便是有力助手,能有效攻克常见难点。 零售行业绩效…

CTFHub 信息泄露通关笔记4:备份文件下载 bak文件 - 教程

CTFHub 信息泄露通关笔记4:备份文件下载 bak文件 - 教程2025-10-19 16:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

软件工程-结队项目

软件工程-结队项目软件工程结队项目 项目参与成员 计科三班 3123006072 郭涛 计科三班 3123004548 袁智燊这个作业属于哪个课程 <https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024>这个作业要求在哪…

go 并发赋值安全性

go 并发赋值安全性32/64位机器读写占用空间小于或等于32/64位的变量是原子操作,超过时属于非原子操作。 安全的赋值类型基本数据类型:字节型、布尔型、整型、浮点型、字符型其他数据类型:指针、函数 不安全的赋值类…

《探索C语言中数组的奥秘(下)》 - 教程

《探索C语言中数组的奥秘(下)》 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

Vue中keep-alive实现原理解析

Vue中keep-alive的实现原理 什么是keep-alive keep-alive是Vue内置的一个抽象组件,用于保留组件状态或避免重新渲染。它不会在DOM树中渲染成任何实际的标签,只是将其包裹的组件实例缓存起来。 核心实现原理 1. 基于L…

2025 年防撞钢护栏厂家推荐聊城市泰锌金属材料有限公司,桥梁,不锈钢,复合管,景观,灯光,热镀锌,河道,铝合金,绳索防撞钢护栏公司推荐

行业背景随着城市化进程加速和基础设施建设持续推进,交通安全设施市场迎来稳步增长期。据行业报告显示,2025 年全球栏杆围栏市场规模有望持续扩大,其中防撞护栏作为道路安全的核心保障设施,需求尤为旺盛。在高速公…

[转]学习指南 - PL-600:Microsoft Power Platform 解决方案架构师

[转]学习指南 - PL-600:Microsoft Power Platform 解决方案架构师exam ref MICROSOFT PL-600 - Microsoft Power Platform Solution Architect : Free Premium Exam Material | CertyIQ PL-600 Exam - Free Actual …

2025年聚氨酯制品厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,液体聚氨酯,专业品质与创新技术之选

2025年聚氨酯制品厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,液体聚氨酯,专业品质与创新技术之选随着工业和制造业的快速发展,聚氨酯制品在各个领域的应用越来越广泛。从浇注型聚氨酯…

Java异步编程难题拆解

在当今高并发、大数据量的应用场景下,同步编程模式常常会致使线程阻塞,对系统性能和响应速度造成严重影响。Java异步编程借助非阻塞方式执行任务,能显著提升系统的吞吐量和资源利用率。不过,异步编程牵涉复杂的线程…

三场比赛(二)

0.前言 最近三场比赛不止有三场。 1.正文 比赛 如果每场单独写再加上杂题等等的话就有点太多了,而且比赛间能看出一些共同的东西,所以就一起写了。 优点发挥较为稳定。该想出来的简单题都能想出来,该会做的原题都能…

深入学习Spring Boot框架

一、引言 Spring Boot是一个基于Spring框架的快速应用开发框架,它极大地简化了新Spring应用的初始搭建及开发过程。通过“约定优于配置”的理念,Spring Boot减少了大量样板代码和繁琐配置,让开发者能够更专注于业务…

2025年水产养殖设备厂家推荐排行榜,PP鱼池/微滤机/不锈钢微滤机/锦鲤池微滤机一体机/全自动污水过滤器/生物过滤器/循环水养殖系统公司推荐!

2025年水产养殖设备厂家推荐排行榜:PP鱼池、微滤机、不锈钢微滤机、锦鲤池微滤机一体机、全自动污水过滤器、生物过滤器、循环水养殖系统公司推荐随着水产养殖行业的快速发展,高效、环保的养殖设备成为提升养殖效益的…

预测不可预测之物的校准学习技术

本文探讨了校准学习在供应链预测中的应用,介绍了Dean Foster与Rakesh Vohra获得时间检验奖的研究成果,阐述了校准技术如何提高预测准确性,以及在机器学习和博弈论中的重要意义。“你正在尝试预测不可预测的事物” 某…