《ARM 嵌入式系统编程与优化》之 Linux/ARM 嵌入式平台

Linux/ARM 嵌入式平台是《ARM 嵌入式系统编程与优化》的第一章。

好好学学硬件,然后深入一下 Linux,修炼好自己的内功。

ARM 处理器不是独立芯片产品,而是具有多样性和异质性嵌入式片上系统(SOC)的集成部件,是可以针对各种特定产品实现定制化的部件。

除了处理器内核外,典型的片上系统还包含:

  • 一系列不同的存储接口(例如同步动态随机存储器、闪存等)
  • 通信接口(USB、蓝牙、WiFi 等)
  • 图形、视频专用处理器(例如图形处理单元,GPU)

ARM 处理器包含了片上系统的“计算”部分。

Linux 大大促进了不同嵌入式平台间的代码开发和代码重用,成为了一个标准的嵌入式操作系统。

程序员必须编写低抽象水平的代码,只有这样,程序才能知道是底层处理器技术。这通常被称为性能优化或代码优化,在高性能计算领域是很常见的。

本书将用到几个应用程序的例子,其中包括:

  • 图像变换
  • 分形生成
  • 图像卷积
  • 以及一些计算机视觉任务

解释 ARM 和 RISC 的字面含义?

ARM 代表“高级精简指令集机器”,RISC 代表“精简指令集计算机”。

RISC 的优势是什么?

RISC 是一门设计哲学,它将处理器原生语言或者说指令集设计成极简指令表,这就要求处理器通过执行大量简单指令来执行一个程序。

这种方法的优势是:相对于处理器具有独立的指令来执行更多工作,既是一个程序需要执行 N 次更简单指令,简单指令的执行速度也比复杂指令平均快 N 倍,并提供了更好的整体性能。

RISC 的指令类型有哪些?

RISC 指令一般严格分为三种主要类型:

  • 算术运算指令:执行任何实际数据计算的唯一指令类型
  • 存储指令
  • 控制指令

存储指令和控制指令需要必要开销来实现与外部存储器交换数据以及实现有数据依赖的行为。

存储器指令和控制指令平均会比算术运算指令花更多的时间。

虽然取决于程序的存储访问模式和处理器存储层次结构的性能,但是,特别的是存储指令,算术运算指令的执行速度一般比它快 10~20 倍。

ARM 编程

可以用各种高级语言编写 ARM 处理器。

一些 ARM 处理器本身还可以执行 Java 字节码。

如果讲究代码性能,一般采用 C 语言编程。

ARM 体系架构

ARM 通用寄存器

状态寄存器

内存寻址模式

GNU ARM 汇编

性能受影响的因素,包括:

  • 执行的指令数
  • 数据依赖和分支预测失误导致的延迟
  • 防止多个问题的数据依赖和资源约束
  • 缓存失效导致的延迟

包括缓存失效率在内的所有这些因素是可以改变的——通过修改算法的汇编代码来改善性能。

代码优化目标

减少执行指令数

降低平均 CPI

性能界限

受计算限制的,意味着性能受到可以被分派到处理器的内部功能单元的操作数量限制;存储器界限,意味着性能受到存储器带宽限制。

基本指令集

  • 整型算术指令
  • 按位逻辑指令
  • 移位指令
  • 移动指令
  • 加载和存储指令
  • 比较指令
  • 分支指令
  • 浮点指令

原文地址:https://www.cnblogs.com/tuhooo/p/11154722.html

时间: 2024-08-11 03:38:28

《ARM 嵌入式系统编程与优化》之 Linux/ARM 嵌入式平台的相关文章

C语言嵌入式系统编程修炼

C语言嵌入式系统编程修炼 ?? 2008-08-19 作者:宋宝华 来源:天极网 ?? C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系

嵌入式系统编程和调试技巧

嵌入式系统的开发,软件的运行稳定可靠是非常重要的.在芯片中,软件是没有质量的,但软件的质量可以决定一颗芯片的成败.芯片设计中,性能能否满足设计要求,除了硬件设计.软硬件配合的设计技巧,对于软件来说,编程的一些技术和技巧同样重要. 本文讲述我在芯片固件开发过程中使用的一些编程调试技巧.针对在嵌入式系统开发中常见的问题,如实时系统下的同步问题,动态内存分配的内存泄漏问题,如何在编程阶段预防BUG出现,调试阶段如何及时发现问题和定位问题.总结下经验,目的是开发一个稳定运行的固件,提高开发效率,提高运行

浅谈C语言嵌入式系统编程注意事项

C语言嵌入式系统编程注意事项之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择.笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉

C语言嵌入式系统编程修炼之(一):背景篇

C语言嵌入式系统编程修炼之背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择.笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉醉于C语言给嵌入式开发带来的便利. 图1给出了本文的讨论所基于的硬件平台,实际上,这也是大多数嵌入式

C语言嵌入式系统编程修炼之道

C语言嵌入式系统编程修炼之道——背景篇... 1 C语言嵌入式系统编程修炼之道——软件架构篇... 4 1.模块划分... 4 2.多任务还是单任务... 5 3.单任务程序典型架构... 6 4.中断服务程序... 7 5.硬件驱动模块... 9 6.C的面向对象化... 10 总结... 10 C语言嵌入式系统编程修炼之道——内存操作篇... 12 1.数据指针... 12 2.函数指针... 13 3.数组vs.动态申请... 14 4.关键字const 15 5.关键字volatile.

基于FS4412嵌入式系统移植(8) linux内核调试之printk

以下内容主要摘录自<Linux安全体系分析与编程> 1.基本原理 (1)在UBOOT里设置console=ttySAC0或者console=tty1 这里是设置控制终端,tySAC0 表示串口, tty1 表示lcd (2)内核用printk打印 内核就会根据命令行参数来找到对应的硬件操作函数,并将信息通过对应的硬件终端打印出来! 2.printk及控制台的日志级别 函数printk的使用方法和printf相似,用于内核打印消息.printk根据日志级别(loglevel)对消息进行分类. 相

嵌入式系统最小驱动框架(类似linux驱动程序架构)

2010年就打算把linux里的驱动框架核心代码抠出来的,但是由于懒而且linux代码量大,一直下不了手.最近调试的intel curie里驱动架构也类似linux,代码就少多了,由于工作需要不得不梳理一下这一堆代码,今天花了一下午,把整个BSP部分的驱动核心抽离出来了,并且做了几个小sample. 最小驱动框架核心代码 1.设备管理 device.c #include <stdio.h> #include <stddef.h> #include <stdlib.h>

嵌入式系统常用单词(Include Linux) updating...

A (65) 65001: B(66) 66001: C(67) 67001:Caveat 附注 67002:Colon 冒号 I(73) 73001:Invoke 调用 S(83) 83001:Synopsis (用法)简述 83002: Slash 斜杆("/") U(85) 85001:Underscore:下划线 原文地址:http://blog.51cto.com/13559660/2056924

嵌入式(linux+ARM)线路图

ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目. 从事嵌入式软件开发的好处是: (1)目前国内外这方面的人都很稀缺.这一领域入门门槛较高,所以非专业IT人员很难切入这一领域:另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触. (2)与企业计算等