当前位置: 首页 > news >正文

嵌入式基础知识复习(7.28)

前瞻

1、嵌入式产品。特点:低功耗、根据用户需求定制。硬件:arm处理器。软件:Linux操作系统

        arm架构:精简指令集、低功耗(移动/嵌入式)。         x86架构:复杂指令集、高功耗。(PC机/服务器)

        Linux操作系统:开源可裁剪。          windows操作系统:非开源不可裁剪。

2、Linux发行版之一:ubantu。即对Linux内核进行封装和功能完善,形成了一个方便用户交互的完整操作系统。(详细见附录一)

3、C语言:面向过程的编程语言。(详细介绍见附录二)

4、   计算机基本组成:cpu、ram(内存)。

        cpu负责控制与运算、存储器负责数据中转。

        存储器分类:ram(随机存储器,掉电数据丢失)、rom(只读存储器)

        计算机存储最小单元:字节(byte)。1byte = 8bit。每个存储单元对应一个内存地址。

        (详细见附录三)

前瞻结束

1、C语言数据类型:

        1)常量:程序运行过程值不变的量整型常量字符常量

              变量:程序运行过程值改变的量变量可以看成一段内存空间,程序运行结束空间销毁。

        2)整型常量:十进制8、八进制01000、十六进制0x8。

             浮点型常量:1.23、0.123e1 (常量小数默认是双精度,详细见附录四)。

             字符常量(ascll码):'a'、'\n'、'1'、'!',实际上亦可以看成整型,因为每一个字符都可以转化为对应整型数字。

             宏常量:#define  N 10;

        3)整型变量:(无符号)短整型    (unsigned)short:2字节

                                (无符号)整型       (unsigned)int        4字节

                                (无符号)长整型    (unsigned)long     8字节

             浮点型变量  :单精度浮点型        float        4字节

                                     双精度浮点型        double    8字节

             字符变量:      (unsigned)char        1字节

                                字符常量用单引号括起来,当单引号里面有多个字符,默认值是最后一个字符。

        4)整数存储方式:补码存储。

                正数补码是它本身,负数补码是原码取反加一(最高位符号位不变)。

                当存储时数字超过类型范围会发生溢出,存储错误的结果(如unsigned char 256,实际存储0)。

              单精度浮点数存储方式:符号位1位,阶码8位,尾数23位。计算如下:

               x = (-1)^s × (1.M) × 2^(E-偏移值),其中,s是符号位,M是尾数(不包括隐含的1),E是阶码,偏移值对于32位浮点数是127,对于64位浮点数是1023。

        5)十进制转二进制:整数部分:除二取余法。小数部分:乘二取整法。

              二进制转十进制:按位乘2的n次方再加起来。

              二进制转八进制:每三位二进制转一位八进制。

               二进制转十六进制:没四位二进制转一位十六进制

        6)

附录零:ubantu快捷键、终端命令、vim编辑器命令

//ubantu常用快捷键、终端命令、vim编辑器命令
终端命令:
ls                列出当前目录下文件及目录
ls -a             额外列出隐藏内容。 .是目录本身,..是上一层目录,带点文件是隐藏文件。
ls --help         获取命令使用方法
pwd               打印当前路径
cd                回到家目录。
cd ..             退回上一层目录
touch 文件名      创建文件
mkdir 目录名      创建文件夹
rm 文件名         删除文件 
rm 文件夹 -r      删除文件夹
cp 文件 目录      文件拷贝至指定目录 
cp 文件夹 目录 -r 文件夹拷贝 
mv 文件 目录      移动文件
vi/vim 文件名     编辑文件
gcc 文件名(main.c)        c程序编译,生成a.out可执行程序
gcc 文件名 -o 目标名        编译生成指定目标名
./a.out                    可执行程序运行补充:linux@ubantu:@前面是用户名,@后面是主机名相对路径:相对当前路径来说的路径(不包含根目录)。绝对路径:从根路径开始描述(包含根目录)。~/是家目录,扩展开是/home/linux。绝对路径的第一个/就是是linux根目录,后面/是分隔符。命令组成:command [-option] [argument]命令符    选项       参数vim编辑器命令:刚进入默认命令模式,输入i进入编辑模式(INSERT),按ESC回到命令模式(NORMAL).保存退出:  :w保存   :q退出文件   :q!强制退出   :wq保存退出复制粘贴:命令模式下,移动光标到要操作的行:       yy        复制1行数字 yy    复制n行(包含当前行)p         粘贴(以光标下1行为粘贴的第1行)dd        剪切1行数字 dd    剪切n行permission denied    表示权限不足,要在命令前加sudo,输入用户密码。不用随意点击终端、vim界面的窗口关闭(×),容易造成文件内容未保存丢失。快捷键:
ctrl alt t    开启终端
ctrl shift +  终端字体放大
ctrl -        终端字体减小
tab           文件名自动补全
ctrl+alt+fn+f2    回到图形交互界面(默认开机界面)      
ctrl+alt+fn+f3    进入文字交互界面(可用于帧缓冲相关程序运行)

附录一  ubantu与Linux内核

你的笔记基本正确,但表述可以更严谨。以下是综合搜索结果后的修正与补充说明:


Linux发行版与Ubuntu的关系

  1. 核心概念

    • Linux内核:由Linus Torvalds维护的操作系统核心,负责管理硬件资源(CPU、内存、设备驱动等)。
    • 发行版(Distribution):在内核基础上集成图形界面、软件包管理工具、应用程序等,形成完整的操作系统。
    • Ubuntu:是基于Debian的Linux发行版之一,由Canonical公司维护,以用户友好性和稳定性著称。
  2. 你的笔记修正

    • 原句:“对Linux内核进行封装,形成方便用户交互的版本”
    • 更准确表述

      Ubuntu是基于Linux内核的完整操作系统发行版,不仅封装内核,还集成了桌面环境(如GNOME)、软件包管理器(APT/Snap)、系统工具和社区支持,提供开箱即用的用户体验。

  3. 补充说明

    • 封装内容:除内核外,还包括:
      • 桌面环境(如Ubuntu默认的GNOME)
      • 软件仓库(通过APT管理数千个开源软件包)
      • 系统工具(如防火墙、虚拟化支持)
      • 定制优化(如Ubuntu对Debian软件包的兼容性调整)
    • 交互设计:Ubuntu特别注重桌面用户的易用性,如图形化安装界面、Unity/GNOME桌面环境等。

Ubuntu与其他发行版的区别

特性Ubuntu其他发行版(如Fedora、CentOS)
基础基于Debian,但软件包不完全兼容Fedora基于RHEL,CentOS是RHEL的社区版
更新周期每6个月发布新版本,LTS版支持5-10年Fedora更新更快,RHEL/CentOS更注重稳定性
目标用户个人桌面、开发者、云计算Fedora面向技术爱好者,RHEL面向企业

总结与建议

  1. 笔记修正建议
    • 明确Ubuntu是“基于Linux内核的发行版”,而非单纯“封装内核”,强调其完整操作系统属性。
    • 补充Ubuntu的衍生版本(如Kubuntu、Xubuntu)和特色功能(如Snap包管理)。
  2. 扩展学习
    • Linux内核与发行版的关系类似“引擎与整车”,内核提供基础能力,发行版决定用户体验。
    • 其他主流发行版包括Debian(Ubuntu上游)、Red Hat(企业级)、Arch Linux(极简主义)等。

如需更详细的技术对比,可参考Ubuntu官方文档或Linux内核开发资料。

附录二  C语言详细介绍

C语言全面介绍:从历史发展到现代应用

C语言作为计算机科学领域最具影响力的编程语言之一,自1972年诞生以来,一直是系统编程和底层开发的首选工具。本文将全面介绍C语言的发展历程、语言特点、标准演进以及广泛的应用领域。

一、C语言的历史与发展

C语言的起源可以追溯到1960年代的ALGOL 60语言,经过多个阶段的演变才形成今天我们熟知的C语言。

  1. 前身语言

    • ALGOL 60(1960年):面向问题的高级语言,但离硬件较远
    • CPL语言(1963年):剑桥大学在ALGOL 60基础上开发,更接近硬件但过于复杂
    • BCPL语言(1967年):Martin Richards简化CPL而来
    • B语言(1970年):Ken Thompson在BCPL基础上进一步简化,用于编写第一个UNIX操作系统
  2. C语言的诞生

    • 1972年,贝尔实验室的Dennis Ritchie在B语言基础上设计出C语言(取BCPL的第二个字母)
    • 1973年,C语言主体完成,并用它重写了UNIX操作系统(90%以上代码)
    • 1978年,AT&T贝尔实验室正式发表C语言,同时Kernighan和Ritchie合著《The C Programming Language》(简称K&R)
  3. 标准化进程

    • K&R C:1978-1989年间事实上的标准
    • ANSI C(C89):1989年美国国家标准学会制定,1990年被ISO采纳为ISO C(C90)
    • C99:1999年ISO发布,增加新特性
    • C11:2011年发布,支持汉字函数名和标识符
    • C18:2018年发布,主要是对C11的修正
    • C23:最新的C语言标准(2023年发布)

二、C语言的核心特点

C语言之所以能经久不衰,得益于其独特的设计理念和语言特性:

  1. 高效性与低级控制

    • 直接访问内存物理地址,进行位一级操作
    • 代码效率高,通常只比汇编语言低10%-20%
    • 不需要运行环境支持,编译后可直接运行
  2. 结构化与模块化

    • 层次清晰,便于按模块化方式组织程序
    • 易于调试和维护
    • 丰富的运算符和数据类型,便于实现复杂数据结构
  3. 可移植性强

    • 标准规格写的程序可在多种平台编译运行
    • 从嵌入式处理器到超级计算机都支持
    • 与特定硬件架构解耦
  4. 兼具高级与低级语言特性

    • 具有高级语言的抽象能力
    • 保留低级语言的硬件操作能力
    • 既适合系统软件开发,也适合应用软件开发
  5. 丰富的表达能力

    • 处理能力极强,可处理各类复杂问题
    • 绘图能力强,适合图形和动画开发
    • 支持多重编程范式(过程式、数据抽象等)

三、C语言的版本与编译器

  1. 主要版本

    • Microsoft C(MS C)
    • Borland Turbo C
    • AT&T C
    • GNU C(GCC)
  2. 现代常用编译器

    • GCC:GNU组织开发的开源免费编译器,支持多平台
    • Clang:基于LLVM的开源编译器,BSD协议
    • Visual C++:微软开发的Windows平台编译器
    • MinGW:Windows下的GCC移植版
    • Xcode:macOS上的开发环境,使用Clang
  3. 集成开发环境(IDE)

    • Windows:Visual Studio、Dev-C++、Code::Blocks
    • Linux:Eclipse CDT、KDevelop
    • 跨平台:CLion、VS Code(配合插件)

四、C语言的应用领域

C语言因其独特的优势,在计算机科学的多个领域都有广泛应用:

  1. 系统软件开发

    • 操作系统内核(UNIX、Linux、Windows)
    • 编译器(如GCC)、解释器
    • 设备驱动程序
    • 文件系统和存储管理
  2. 嵌入式系统

    • 单片机开发(裸机或RTOS)
    • 智能家居设备(空调、洗衣机控制器)
    • 汽车电子(ECU、BCU)
    • 医疗设备(监护仪、血糖仪)
  3. 高性能计算

    • 游戏引擎开发(Unity、Unreal)
    • 图形渲染和3D建模
    • 科学计算和数值分析
    • 信号处理(DSP)
  4. 网络与安全

    • 网络协议栈实现(TCP/IP)
    • Web服务器(Apache)
    • 加密算法和安全系统
    • 防火墙和入侵检测
  5. 数据库系统

    • MySQL
    • SQLite
    • PostgreSQL
    • Oracle和SQL Server的核心组件
  6. 工具链开发

    • 开发其他编程语言(Python、PHP等的解释器)
    • 构建系统和版本控制工具
    • 性能分析工具
  7. 多媒体处理

    • 音视频编解码(FFmpeg)
    • 图像处理(OpenCV)
    • 语音识别和合成

五、C语言的职业方向

掌握C语言可开启多种职业路径:

  1. 系统软件工程师:开发操作系统、编译器、工具链等系统软件
  2. 嵌入式系统工程师:设计嵌入式软件,应用于智能设备、汽车电子等领域
  3. 游戏引擎开发工程师:开发高性能游戏引擎和图形渲染系统
  4. 网络安全工程师:开发安全系统和加密算法,保护系统安全
  5. 数据库开发工程师:设计和优化数据库管理系统
  6. 物联网(IoT)开发工程师:开发智能设备和物联网解决方案
  7. 自动化测试工程师:开发底层测试框架和工具

六、C语言的影响与未来

  1. 对后续语言的影响

    • 直接催生了C++、Objective-C、C#等语言
    • 影响了Java、JavaScript、Python等语言的语法设计
    • 成为许多新语言的学习参考
  2. 在现代开发中的地位

    • 仍然是系统编程和性能敏感领域的首选
    • 在物联网和边缘计算时代获得新的应用场景
    • 作为计算机科学教育的基石语言
  3. 未来展望

    • 随着C23标准的发布,语言持续现代化
    • 在安全性和并发支持方面不断改进
    • 仍将是底层开发和系统编程的核心工具

七、学习C语言的建议

  1. 从基础开始:掌握数据类型、控制结构、函数等基本概念
  2. 深入理解指针:这是C语言最强大也最容易出错的部分
  3. 实践项目驱动:通过实际项目(如小型操作系统、游戏等)巩固知识
  4. 阅读优秀代码:学习Linux内核等开源项目的代码风格和设计
  5. 关注现代特性:了解C11、C17和C23引入的新特性

C语言作为一门接近50年历史的语言,依然活跃在技术前沿,其设计理念和哲学影响了几代程序员。无论是想深入理解计算机系统,还是从事底层开发工作,C语言都是不可或缺的核心技能。

附录三   计算机基本组成

你的笔记基本正确,但部分表述可以更严谨,以下是补充和修正后的版本,结合了搜索结果中的权威信息:


计算机基本组成

  1. CPU(中央处理器)

    • 功能
      • 控制:作为计算机的"指挥中心",通过控制器(CU)从内存取指令、译码并生成控制信号。
      • 运算:通过算术逻辑单元(ALU)执行算术(如加减乘除)和逻辑运算(如与、或、非)。
    • 组成
      • 运算器(ALU) + 控制器(CU) = CPU核心。
      • 寄存器:高速暂存指令和数据(如程序计数器PC、指令寄存器IR)。
      • 缓存(Cache):分L1/L2/L3三级,缓解CPU与内存速度差异。
  2. RAM(随机存储器)

    • 功能:临时存储CPU正在处理的程序和数据,断电后丢失(易失性)。
    • 分类
      • DRAM:动态RAM,需刷新(如内存条),成本低但速度较慢。
      • SRAM:静态RAM,无需刷新(如CPU缓存),速度快但成本高。

存储器分类与特性

类型特性用途
RAM- 可读写,速度快
- 易失性(断电数据丢失)
临时存储运行中的程序和数据
ROM- 通常只读,写入需特殊操作(如固件升级)
- 非易失性(断电保留数据)
存储BIOS、嵌入式系统固件

:ROM演进类型包括PROM(一次性写入)、EPROM(紫外线擦除)、EEPROM(电擦除)和闪存(如SSD)。


存储单元与寻址

  1. 最小单元
    • 字节(Byte) = 8 比特(bit),是数据存储的基本单位。
    • 内存地址:每个字节对应唯一地址,CPU通过地址访问数据。
  2. 扩展概念
    • 字(Word):CPU一次处理的数据长度(如32位系统为4字节)。
    • 存储字长:存储单元中二进制代码的位数(如64位系统的字长为64bit)。

修正建议

  1. CPU部分
    • 补充控制器(CU)和运算器(ALU)的协同关系。
    • 增加寄存器组的作用(如PC、IR)。
  2. 存储器分类
    • 明确ROM的"只读"是历史名称,现代ROM(如EEPROM)支持有限写入。
  3. 存储单元
    • 区分"字节"与"字"的概念,避免混淆。

冯·诺依曼体系结构

计算机硬件五大核心组件:控制器运算器(合为CPU)、存储器输入设备输出设备,通过总线连接。你的笔记中"存储器负责数据中转"可更精确为"存储器(内存+外存)存储程序和数据,供CPU直接访问"。

附录四  小数在C语言默认双精度类型。

在Linux系统中,浮点数常量的默认类型是双精度浮点数(double。这一规则不仅适用于Linux系统,也是C/C++语言标准的通用规范。以下是具体分析:


1. 语言标准与默认类型

  • C/C++标准规定:根据C语言标准(如C18)和C++标准,未添加后缀的浮点数常量(如3.141.23e-5)默认类型为double

    • 若需指定为单精度(float),需显式添加后缀fF(如3.14f)。
    • 后缀lL表示long double(更高精度)。
  • 示例代码

    double a = 3.14;   // 默认double类型
    float b = 3.14f;   // 显式声明为float
    

2. 硬件与系统实现

  • IEEE 754标准:Linux系统遵循IEEE 754浮点数标准,double类型通常占用64位(8字节),提供约15-17位有效数字,而float为32位(4字节),仅6-7位有效数字。
  • 性能与精度权衡:现代处理器(如x86、ARM)对双精度运算有硬件优化,默认使用double可减少精度损失,但可能增加内存和计算开销。

3. 实际应用中的注意事项

  • 隐式转换风险:将double常量赋给float变量时,编译器会自动截断,可能导致精度损失或警告。
  • 科学计算与嵌入式场景
    • 科学计算优先使用double以保证精度。
    • 嵌入式系统(如ARM Cortex-M)可能因资源限制选择float,需显式加后缀。

4. 为什么默认是double而非float

  • 历史与兼容性:早期C语言设计时,double因其更高的精度和范围被选为默认类型,延续至今。
  • 避免意外截断:默认double可减少因隐式转换导致的精度问题,尤其在复杂表达式中。

总结

在Linux系统中,浮点数常量默认类型为double,这是由语言标准、硬件支持及精度需求共同决定的。开发者应根据场景选择是否显式指定类型(如floatlong double),以平衡性能与精度需求。

http://www.xdnf.cn/news/1202887.html

相关文章:

  • 未授权访问
  • C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
  • window显示驱动开发—Direct3D 11 视频设备驱动程序接口 (DDI)
  • OpenLayers 综合案例-信息窗体-弹窗
  • 对于ui=f(state)的理解(react)
  • python毕业设计案例:基于python django的抖音数据分析与可视化系统,可视化有echarts,算法包括lstm+朴素贝叶斯算法
  • 【Datawhale夏令营】端侧Agent开发实践
  • 【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升
  • [机缘参悟-236]:通过AI人工神经网络理解人的思维特征:惯性思维、路径依赖、适应性、不同场合不同言行、经验、概率、常规与特殊情形(正态分布)、环境适应性
  • 【linux】md5文件相似校验介绍与实战示例
  • 零基础学习性能测试第九章:全链路追踪-项目实操
  • 设计模式(十七)行为型:迭代器模式详解
  • react前端样式如何给元素设置高度自适应
  • debian系统分卷是不会影响系统启动速度?
  • 内存分页机制分析在海外VPS系统的测试流程
  • C语言:20250728学习(指针)
  • 如何给电脑换个ip地址?电脑换ip几种方法
  • 从零开始的云计算生活——第三十七天,跬步千里,ansible之playbook
  • linux_centos7安装jdk8_采用jdk安装包安装
  • 电脑出现英文字母开不了机怎么办 原因与修复方法
  • 【Java EE】多线程-初阶-线程的状态
  • 云原生作业(haproxy)
  • 设计模式十二:门面模式 (FaçadePattern)
  • C++11之lambda及包装器
  • java设计模式 -【责任链模式】
  • 【智慧物联网平台】编译jar环境 Linux 系统Maven 安装——仙盟创梦IDE
  • RK3568基于mpp实现硬解码(二):FFmpeg + mpp实现ipc摄像头图像解码
  • C++---初始化列表(initializer_list)
  • maven 打包报错 process terminated
  • 数据库原理