嵌入式【朱有鹏每日精选】

嵌入式编程语言

  • 主要使用C语言,中间层开发用C++多一些,应用层C++、Java、python、tcl/tk、perl等

嵌入式系统特点

  • 专用、软硬件可裁剪可配置
  • 低功耗、高可靠性、高稳定性
  • 软件代码短小精悍
  • 代码可固化
  • 实时性
  • 弱交互性
  • 专用开发工具及开发环境

嵌入式系统组成

硬件
  • 微处理器
  • 存储器
  • I/O接口、输入输出设备等
软件
  • 底层 嵌入式操作系统
  • 底层 BSP 板级支持包
  • 上层 应用软件
    在这里插入图片描述
为何使用交叉编译
  • 嵌入式开发的cpu比较简单,本身无法搭建开发环境,有些甚至都没有操作系统
  • 交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)
地址总线和数据总线
  • 地址总线用以寻址,只传输地址;数据总线与外部设备交换信息。

  • 地址总线的位数决定寻址范围,数据总线的位数决定单次通信能交换的信息量。

  • 总线的速度决定CPU和外设互换信息的速度、

  • CPU的位数表示数据总线的位数

  • 嵌入式系统需要bootloader来启动,而bootloader必须首先存在于可启动介质,需要专用工具。

  • Jlink 下载可执行程序到目标机,在目标机上实现单步调试,便于开发bootloader

  • 从源代码到CPU执行过程 *
    在这里插入图片描述
    CISC复杂指令集CPU,设计理念:用最少得指令来完成任务。比如英特尔X86系列:AMD
    缺点:CPU设计复杂,功耗大
    CPU
  • CISC年代——CPU的功能扩展依赖于指令集的扩展,实质是~内部组合逻辑电路的扩展;
  • RISC——~仅提供基础功能指令(譬如内存与寄存器通信指令,基本运算与判断指令等),功能扩展由使用CPU的人利用基础架构来灵活实现。

IO一般指 与CPU连接的各种外设
CPU访问外设的2种方式:一种是类似于访问内存的方式,即把外设的寄存器当作一个内存地址来读写,从而以访问内存相同的方式来操作外设,叫IO与内存统一编址方式;另一种是使用专用的CPU指令来访问某种特定外设,叫IO与内存独立编址。

  • 冯诺依曼结构——程序和数据都放在内存中,如Intel的CPU
  • 哈佛结构——程序和数据分开独立放在不同内存块种,彼此完全分离,如大部分单片机

在这里插入图片描述
SRAM DRAM

  • SRAM 静态内存 容量小、价格高;不需要软件初始化直接上电就能用;

  • DRAM 动态内存 容量大、价格低;需要软件初始化

  • 单片机:内存需求量小,而且希望开发尽可能简单,适合全部用SRAM

  • 嵌入式系统:内存需求量大,可能没有NorFlash等可启动介质

  • PC机:内存需求量大,而且软件复杂,不在乎DRAM初始化开销,适合全部用DRAM

外存

  • NorFlash:容量小,价格高,优点是可以和CPU直接总线式相连,CPU上电后可直接读取,所以一般用作启动介质
  • NandFlash:(跟硬盘一样):容量大,价格低,缺点即上面优点,需要CPU先运行一些初始化软件,然后通过时序接口读写

ARM处理器工作模式

在这里插入图片描述
在这里插入图片描述
为什么设计这些模式

  • cpu是硬件,OS是软件,软件的设计依赖硬件的特性,硬件的设计要考虑软件需要,便于实现软件特性;
  • 操作系统有安全级别要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全等级需要。

CPSR程序状态寄存器
在这里插入图片描述
在这里插入图片描述
同步
异步 靠中断(一种特殊的异常)

(汇编)伪指令本质上不是指令,它是编译器环境提供的,目的是用来指导编译过程,经编译后伪指令最终不会生成机器码。

  • 为增加处理器指令流的速度,ARM使用多级流水线

四种栈

空栈 满栈
增栈 减栈

Makefile

管理工程
在一个正式的软件项目中,有很多个.c .h文件构成,如果直接在命令行编译,就会:gcc a.c b.c c.c… -o exe很麻烦
目标:顶格写,后面是冒号(冒号后面是依赖)
依赖:用来产生目标的原材料
命令:前面一定是Tab,不能是定格,也不能是多个空格。命令就是要生成那个目标需要做的动作

GPIO

general purpose input output,GPIO就是芯片的引脚(芯片上的引脚只有一部分是GPIO),作为GPIO的这类引脚,它的功能和特性是可以被编程控制工作模式、电压高低等。

看门狗

现实中因为一些外部因素(极端恶劣的环境等),电子设备经常会跑飞或者死机。在这种情况下,我们希望设备自动复位而不需要人工干预(无人值守)。看门狗用来完成这个工作,它其实是SOC内部的一个定时器,定好时间后看门狗定时器回去计时,时间到之前(狗饿了之前),必须重新置位看门狗定时器(喂狗),如果没有喂狗系统则会被强制复位。

系统正常工作时,系统软件会自己去喂狗,所以看门狗定时器不会复位。但是系统一旦故障跑飞啥的,没喂狗,下一个周期就会自动复位,打到我们预期的效果。

  • 为何关看门狗?
    一般CPU设计,在CPU启动后看门狗是默认工作的(可能是因为启动代码前就死机了或者跑飞了没人管),好处是没有空挡和漏洞,坏处是启动代码段我们不方便喂狗(或者懒得喂狗)时看门狗会复位,所以为了偷懒我们在启动代码前段先关闭看门狗,然后在后面系统启动起来之后再根据需要决定是否要打开看门狗(一旦打开就必须同时提供喂狗)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
朱有鹏是一位熟悉嵌入式驱动开发的专家。他精通U-Boot、Linux kernel移植及驱动程序开发,并且具备高级语言(如C、C++、Java、C#)和汇编语言(如80C51、PIC、ARM等平台)的技能。他熟悉三星平台(如S3C2440、S3C6410、S5PV210)和全志平台(如A10、A20、A31)下的开发流程,包括Linux和WinCE平台的应用开发。此外,他还具备Windows下C# Winform界面开发和WinCE嵌入式操作系统驱动及应用程序开发的经验。他还熟悉编译技术,是一位全面的嵌入式开发专家。 关于朱有鹏嵌入式驱动开发的具体课程资源,根据引用的内容,视频课程需要转存到自己的网盘后再进行下载。在引用中提到,朱有鹏嵌入式核心课程由6个部分组成,每个部分又分为若干模块,以构建整个知识体系网络。所以,如果您对朱有鹏嵌入式驱动开发感兴趣,建议您转存相关课程资源并按照部分和模块的顺序学习,以便全面掌握相关知识。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [朱有鹏嵌入式单片机免费课程](https://blog.csdn.net/weixin_33572836/article/details/116813988)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值