嵌入式C语言自我修养:从芯片、编译器到操作系统(附送书籍)

article/2025/8/22 19:20:08

关注+星标公众,不错过精彩内容

来源 | 宅学部落

最近,阅读了王工(王利涛)赠送的一本由他编著的书籍《嵌入式C语言自我修养》,感觉写的挺不错。今天分享一下这本书籍《嵌入式C语言自我修养》:从芯片、编译器到操作系统。

然后,再送15本《嵌入式C语言自我修养》纸质书籍作为粉丝福利;

1从芯片、编译器到操作系统

嵌入式是一门交叉学科。一个嵌入式电子产品(比如手机)从底层到上层,一般会涉及半导体芯片、电子电路、计算机、操作系统、多媒体等不同专业领域的知识。很多从事嵌入式开发的朋友,通常来自不同的专业(电子、电气、计算机、机械、自动化、物理,甚至一些文科专业),在实际学习和开发中,由于专业背景的限制,经常会遇到各种技术壁垒:搞硬件的不懂软件,搞软件的不懂硬件,搞底层芯片的不懂上层软件,搞上层软件的不懂底层芯片。嵌入式技术栈太深,除了极少数人,一般人很难实现“技术破圈”,将整个技术栈从上到下捋一遍,彻底打通。

相对于桌面开发,嵌入式开发还具有碎片化特点:不同架构(如ARM、MIPS、RISC-V等)、不同厂家的SoC处理器(如Cortex-M系列、cortex-A系列、AI芯片等),不同的操作系统(Linux、uC/OS、FreeRTOS、Android等),一般都需要对应的编译开发环境与之匹配,然后工程师才能基于这个编译环境做应用开发。如果把软件开发比作开饭馆卖饺子,对于桌面软件开发,锅碗瓢盆、水电煤气,甚至饺子(超市里的速冻饺子)都准备好了,统一的标准,就等着你下锅,根据顾客不同的需求,做成一道道不同的美食:猪肉芹菜的、三鲜的、蒸的、煮的、煎的。而对于嵌入式开发,可能情况就不太一样了:没有现成的饺子成品可以用,擀饺子皮、剁馅、锅碗瓢盆都需要自己动手准备,开发环境需要自己搭建。遇到问题,不能仅仅局限于当前的软件业务逻辑,可能还要从芯片、硬件电路、操作系统、底层驱动,甚至编译器等不同的维度去分析,去定位出现问题的原因。

随着半导体行业趋势的变化,以及国内对芯片行业的大力投入,国产芯片越来越多,未来嵌入式软件工程师的工作岗位和工作内容也会随之发生一些变化:嵌入式开发人员不再仅仅是基于芯片厂家提供的现成的开发板、BSP软件包、产品方案去开发产品,而是有越来越多的工程师直接进入芯片原厂工作,参与芯片底层软件的开发和维护工作:芯片测试、操作系统移植、驱动开发与维护、以及基于自家芯片产品方案的推广和技术支持等工作。在芯片设计前期,嵌入式软件工程师有时候还需要和IC工程师一起去测试芯片,编写相应的测试代码和测试案例。

工作职责和工作内容的变化,需要嵌入式软件开发人员不断扩充自己的知识体系,不断学习和解锁新的技能:C语言编程技能、软件工程、编译原理、计算机体系结构、操作系统、汇编语言、硬件电路,有时甚至还需要了解一些芯片设计、芯片制造、CPU内部结构等“圈外”知识。每一个新的知识点,每一门新的技能,市面上都有大量的经典书籍可以参考阅读,但每一本书都很厚,都有自己偏向的领域和侧重点,和我们的实际工程需求往往有一定偏差,都需要花大量的时间和精力去阅读和消化,然后才能提炼出我们在嵌入式开发中所需要的一些核心知识点和关键技能。有了这些核心知识点和关键技能作为理论支撑,我们就可以在嵌入式开发中更好、更快地解决各种工程问题。

工程师都很忙,没有大片的时间和精力去通读各种经典书籍,或者说很少有人能坚持读完。嵌入式开发人员的专业背景各不相同,每个人的知识储备和点亮的技能树也参差不齐,知识体系的不完善和基础技能的储备不足,往往会影响实际工作的输出效率,在工作和学习中会遇到各种各样的问题无法解决,学习陷入困境,或者工作陷入卡壳。

那有没有更好的方法,快速掌握这些嵌入式开发所需要的核心知识点和关键技能呢?答案是:有。

基于这个现实需求,《嵌入式C语言自我修养:从芯片、编译器到操作系统》出版了。

作者基于自己的嵌入式学习经历和工作经验总结,从最底层的一堆沙子开始,一步一步,带领大家学习CPU芯片是如何设计和制造出来的,CPU内部结构是什么样的,CPU是如何工作的,编译器和指令集的作用是什么,一个程序的编译、链接、安装和运行的过程是怎么样的,程序运行时的内存世界是什么样的?为什么会有内存错误?栈溢出攻击是怎么回事?如何才能真正地理解和掌握C语言?为什么很多人在阅读Linux内核源码时感到很吃力,看不懂?非计算机科班的朋友如何快速掌握操作系统的核心原理和概念?如何快速理解多任务编程思想?进程、线程和协程有什么区别?这些疑问在书中都会一一讲解。

本书的写作初衷,主要是为不同专业背景的嵌入式学员弥补理论短板:以C语言为切入点,从最底层的芯片开始,到编译器、操作系统、软件工程、系统框架、进程、线程、协程,搭建一个嵌入式开发所需要的完整知识体系和认知框架。不会像经典书籍那样面面俱到,深入每一个细节,而是有的放矢,在理论和工程之间做一个平衡,一切都刚刚好:一切以满足实际工程需要为参考点,所有学习的知识点满足实际项目所需要的理论支撑即可,不会深入到学院派关注的各种细节和性能指标,以免深入其中无法自拔,耗费太多的时间。掌握了这些实际开发中需要的核心知识点和关键技能,也就补齐了理论短板,此时,相信大家也会对嵌入式开发有了一个更加清晰的整体认识,在工作中遇到各种问题,都可以尝试用这个知识体系和认知框架去分析和解决,分析问题有了着力点,也就有了思路,也就不再迷茫。

相比其他书籍,本书坚持使用大白话写作,通俗易懂,不怕学不会,就怕你不学。使用风趣幽默的写作风格,以增强阅读体验,无论读多久都不会觉得枯燥。

在本书内容安排上,做了很多尝试性创新,比如独家讲解GNU C编译器扩展语法,帮你破解阅读Linux内核源码时遇到的各种稀奇古怪的语法难题。

首家在ARM平台下,通过反汇编,带你理解C语言背后的底层运行机制,深度讲解程序的编译、链接、安装和运行原理,深度讲解程序运行时的动态内存管理、内存泄漏、栈溢出攻击示例等。

结合嵌入式开发常用的三种场景:裸机环境、RTOS、Linux,帮助大家去分析和总结这三种场景下的内存管理,让你一览整个嵌入式开发环境概貌。

针对当前火热的人工智能、AIoT、异构计算等热门技术,从一堆沙子开始,一步一步带你了解整个CPU芯片设计、制造、封装流程,CPU内部结构及工作原理:流水线、cache、单发射、多发射、乱序执行,SIMD、NEON、多核、异构...

针对Linux内核驱动阅读难题,在本书中也分享了C语言的OOP编程思想,教你如何使用C语言来实现OOP编程,如何利用OOP思想去分析Linux内核中复杂的驱动和子系统。

针对电子类、自动化类等跨行进入嵌入式专业的朋友,零基础入门操作系统的核心概念,教你如何在裸机环境下使用多任务思想编程,如何使用状态机进行任务分解,以及RTOS任务调度的核心数据结构。让你不需要去啃大块头的《操作系统》书籍,直接切入操作系统最核心的知识点。

重点分享C语言的模块化编程思想,从零开始,从一个单文件开始,一步一步教你如何去封装一个模块,如何去使用一个模块,如何模块间通信,如何建立模块依赖,软件如何分层,模块如何解耦,如何将你的软件迭代为框架,帮你树立软件工程的意识,框架编程思想,让你写的代码更加容易扩展和维护。

ARM架构越来越流行,在手机、平板、桌面PC和服务器领域攻城拔地,市场份额越来越大,而目前很多编译原理都是基于X86架构来分析的。本书打破惯例,首次在ARM平台上,通过反汇编手段,剔除编译过程中各种语法分析等对嵌入式工程师无关紧要的技术,给大家分享ARM平台下程序的编译、链接、安装、运行全景图,尤其是动态链接过程、多进程如何共享动态库、内核模块是如何动态加载和运行的、U-boot是如何自举并重定位的,这些嵌入式开发中经常遇到的核心知识点和难点,会带领大家逐一分析。

本书的大部分内容基于作者几年前录制的、专门为嵌入式工程师打造的C语言视频教程:C语言嵌入式Linux高级编程改编。结合几千名学员的中肯评价和不断反馈,几经修改,不断优化结构和内容安排,纸质版如今才得以和大家见面。全书正文560+页,加上目录、前言等,差不多600页,握在手上,沉甸甸的,全是干货。写书是枯燥的,耗时的,几经拖延,几经修改,最后还是跟大家见面了,用口碑和信念做编程教育,致力于分享最原汁原味的技术和干货知识,几千名学员的中肯反馈和积极评价是最让人欣慰的,也是这本书质量的保障。

愿这本书也能为你的嵌入式学习尽一份力,为你的嵌入式职场生涯增砖添瓦。

2送15本纸质书籍

这本书的作者和电子工业出版社,为了感谢大家的支持,这次拿出15本书,送给公众号的粉丝作为福利。

1.抽奖助手 送10本

在我公众号『嵌入式专栏』,后台回复关键字“书籍”参与抽奖。

开奖时间:2021-5-20 20:00

2.留言集赞 送5本

为了照顾那部分“中奖绝缘体”,这次依然采用另外一种中奖方式,在本文留言区:走心留言+集赞,前10名将有机会获得书籍。

截止集赞时间:2021-5-20 20:00

公布中奖:2021-5-20推文留言区公布中奖名单。

提示:开奖24小时之内填写中奖信息(集赞中奖者,微信联系我),否则视为放弃。

最后,感谢王工、电子工业出版社的赞助,同时,这本书已经在各大网店售卖,欢迎大家买买买!


http://chatgpt.dhexx.cn/article/hDyybIfc.shtml

相关文章

进行嵌入式C语言编程调试的通用办法

总结了一下调试我们嵌入式C程序的一些基本的办法和思想,供大家学习参考: 打印日志:在代码中添加打印语句,输出变量值、函数调用等信息,以便在程序运行时观察程序执行情况。 断点调试:在代码中添加断点&…

linux c与c语言的区别吗,嵌入式c语言与c语言的区别

原标题:嵌入式c语言与c语言的区别 最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件,那么二者之间究竟有什么差异呢? 一、启动过程 1. 通用c…

嵌入式C语言——常见面试题

1、描述一下gcc编译过程? gcc编译过程分为4步骤:预处理、编译、汇编、链接。 预处理:头文件包含、宏替换、条件编译、删除注释。编译:主要进行词法、语法、语义分析等等,检查无误后把预处理好的文件编译成汇编文件。…

c语言对嵌入式的作用是什么,关于嵌入式C语言它有些什么意义

描述 首先,在当前产业结构升级的大背景下,机械行业未来的自动化、智能化程度会越来越高,所以机械类相关专业的知识结构必然会不断得到丰富和发展,而学习编程语言对于机械类专业来说具有较为实际的意义,尤其是C语言。 机…

总结嵌入式C语言难点(2部分)

结构类型和对齐 C语言提供自定义数据类型来描述一类具有相同特征点的事务,主要支持的有结构体,枚举和联合体。其中枚举通过别名限制数据的访问,可以让数据更直观,易读,实现如下: 联合体的是能在同一个存储…

嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程

嵌入式C语言培训-01C语言概述-01C语言概念-发展历史-特点.mp4 嵌入式C语言培训-01C语言概述-02C基本程序结构-第一个helloworld程序-Linux下编辑编译执行.mp4 嵌入式C语言培训-01C语言概述-03C语言第2个程序第3个程序.mp4 嵌入式C语言培训-01C语言概述-04C程序开发过程.mp4 嵌入…

《嵌入式C语言》C语言介绍及环境搭建

--最具价值的嵌入式C语言1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年, D.M.Ritchie 在B语言的基础…

嵌入式C语言深入篇之 —— 变量

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648 CUT 变量 可执行程序存储区 当一个C/C原码文件被编译链(比如gcc/g)编译及链接成为可执行程序后,由4个段组成,分别是:代码段&#xff…

嵌入式C语言编程技巧

基础语法编程技巧 变量 (1)变量名需见名知意,用英文单词命名,尽可能避免出现 a b 等单一字母的变量 (2)变量在定义同时进行初始化,防止乱码数据 (3)变量序号尽可能用英语…

嵌入式C语言强化学习——(嵌入式学习路线1)

前言 从零开始记录自己学习嵌入式,之前看稚晖君的视频,里面的费曼学习法觉得对自己很有帮助,所以准备把自己学习到的东西分享出来,便于学的更深(符合费曼学习法) 众所周知,嵌入式编一般是使用C…

嵌入式C语言开发

这是我的第一篇对ARM有有疑问并展开调查的文档总结,以备之后查阅。 首先的疑惑是发现之前的源码中都是在对寄存器做操作,所以对寄存器的地址是怎么被确定的就很疑惑。 搜索引擎关键词:嵌入式 寄存器 基地址 使用 参考《嵌入式15——HAL 库中…

嵌入式C语言编译过程

1.预处理 gcc -E -o a.i 001.c 把001.c输出为a.s文件。预处理的本质是把宏定义替换处理。#define ABC 123 2.编译 gcc -S -o a.s 001.c 3.汇编 gcc -c -i a.s 001.c 把c文件生成汇编文件 4.链接 gcc -o build 001.c把001.c生成build.exe可执行文件,从预处理开始。

嵌入式C语言自我修养分享课件

一.异构计算 1.背景: 随着物联网、大数据、人工智能时代的到来,海量的数据分析和大量复杂的运算对CPU 的算力要求越来越高,CPU 的大部分资源用于缓存和逻辑控制,适合运行各种复杂的串行程序,但是单核或者多核CPU处理性…

标准c语言与嵌入式,嵌入式C语言与C语言的区别

嵌入式C语言与C语言的区别:最常用的系统编程语言是C,它是在汇编语言中使用的一种简单的编程语言,源代码采用自由格式。Embeddedc是c语言用于编写嵌入式软件的扩展,这两者有什么区别? 首先是启动过程 1.普通C语言程序的…

嵌入式 C 语言(上)

目录 基础知识数据类型const 用法作用域与 static 用法extern 用法 基础知识 嵌入式C语言和普通C语言在语法上几乎没有差别,其主要差别在于普通C语言的运行环境是OS之上,有很多的标准库函数支撑调用,分配的内存是电脑的内存,其处…

嵌入式C语言

文章目录 一、学会使用char/short/int关键字二、学会使用 if & switch三、学会使用 for & while四、学会使用static关键字五、学会使用define关键字六、学会使用typedef关键字七、学会使用enum关键字八、学会使用struct类型九、学会使用指针类型十、学会使用回调函数十…

嵌入式开发之C语言基础(一)

目前是一名大二升大三的学生,早就有想法写博文了,但是因为自己的拖延一直到现在才开始着手。关于博文,我有以下打算:把C语言再重新过一遍,毕竟嵌入式开发C语言的重要性不言而喻;接下来我还会有一些关于单片…

极简嵌入式C语言教程——从入门到入土(1)

文章目录 第一章&#xff1a;入门1.Hello World!2.C语言标识符与关键字(1)标识符&#xff1a;(2)关键字 3.数据类型与运算符(1)变量与常量<1>变量<2>变量的定义<3>常量 (2)运算符<1>算术运算符<2>自增、自减运算符<3>赋值与赋值组合运算符…

STM32中常用的C语言知识点,开始复习!

要学嵌入式&#xff0c;关注我要学嵌入式&#xff0c;嵌入式猛男的加油站。 C语言是单片机开发中的必备基础知识&#xff0c;这里就列举部分STM32学习中会遇见的C 语言基础知识点。 01 位操作 下面我们先讲解几种位操作符&#xff0c;然后讲解位操作使用技巧。C语言支持如下6中…

嵌入式C语言(入门必看)

目录 STM32的数据类型 const关键字 static 关键字 volatile关键字 extern关键字 struct结构体 enum typedef #define 回调函数 #ifdef 、#ifndef、#else 、#if 嵌入式开发中既有底层硬件的开发又涉及上层应用的开发,即涉及系统的硬件和软件,C语言既具有汇编语言操…