新在哪里?从未接触过。比如之前一直在x86、ARM上写程序,C比较多,汇编也调过。MIPS可能零零星星也看过几篇资料。然后来了个用PowerPC的项目,或者RISC-V的项目,茫茫然无可奈何不知所措。
 
这里介绍CPU相关的概念,需要哪些资料,可以没有概念上的缺口,踏踏实实的开始为一个于己而言全新的CPU编写代码。
 
一. CPU
CPU即中央处理器,执行一系列指令,完成处理任务。CPU即是指令执行器,包含了为执行各种指令所需要的模块,如数学运算单元ALU、指令编译码器、寄存器、移位寄存器、计数器等基础组成部分,还有L1/L2 Cache, MMU等现代CPU而言也算基础的单元。
 
二. SoC
System on Chip: 片上系统,为了提升集成度,降低PCB电路板上的芯片器件数量,把相当一部分芯片和CPU封装到一起,即成为SoC。被封装的器件成为SoC的模块,如USB, Eth MAC/PHY, WIFI(802.11), NFC, Bluetooth, GPS模块, 除了片上内存之外,Flash也可以集成进去,等等。
 
三. ISA
Instruction Set Architecture:指令集架构。规定了每条指令的格式和作用等。基本上,每个指令集都包含数学运算、移位、跳转、内存访问等指令,有一些还包含多媒体处理、压缩解压缩等领域能力增强指令。
 
ISA由以下几个模型组成:
1.Register Model
指令必然用到寄存器,寄存器有多少、如何组织等,属于寄存器模型的内容。
 
2.Intstruction Model
指令的种类、格式、作用等。根据指令格式是否固定,可以分为复杂指令集和精简指令集,即CISC和RISC。
 
3.Interrupt Model
如何响应外部世界变化?有主动和被动两种方式。具体到CPU而言:
a. 主动轮询是否存在外部事件需要响应;
b. 被外部事件中断;
细细思量之下,中断即使在一条指令未执行完成时发生,也无法立即得到响应,而是需要在当前指令执行完毕之后,去查看是否有中断发生,如果有则进行响应。所以中断其实也是轮询,只不过轮询的周期为每执行一条指令轮询一次。外因通过内因起作用,也可以理解。
 
中断模型定义
a. 要处理的内部错误和外部中断的种类;
b. 处理方式是否分为常规和快速处理模式;
c. 中断是否有优先级,是否能够打断,是否能够嵌套等;
 
与CPU的关系
常见的ISA有x86, ARM, MIPS, PowerPC等,其他早期的有Alpha,新生的有RISC-V等。
一般而言,每种CPU只基于某一种特定的ISA,而ISA可以有很多CPU实现。如i386/i586, Core i3/i5/i7都基于x86,AMD的CPU也基于x86。
当然也有例外,比如龙心Loongson主要基于MIPS,同时也实现了x86指令的译码(揣测,未确认)。
 
四. ABI
Application Binary Interface 应用二进制接口。区别于Application Programming Interface(API),ABI规定了如何使用ISA规定的指令集和寄存器进行编程,如哪一个寄存器用作栈指针,哪一个传递函数返回值,哪几个传递函数入参等。
可见,ABI与ISA对应,而非CPU
 
五. 开始编程
需要资料如下:
  1. SoC文档:内存地址空间划分,初始化流程,各个模块的寄存器定义;
  1. CPU文档:包含哪些模块以及如何配置使用:MMU如何配置,Cache怎么刷等;
  1. ISA文档:寄存器模型、指令的作用等;
  1. ISA对应的ABI规范:使用寄存器时有哪些注意事项;如PPCEABI,System V ABI,System V Application Binary Interface - Intel386 Architecture Processor Supplement,System V Application Binary Interface - PowerPC Processor Supplement。
  1. 编译工具链资料:汇编器、编译器、链接器;

CPU-如何开始在新的CPU上编程的更多相关文章

  1. 03 | 基础篇:经常说的 CPU 上下文切换是什么意思?(上)

    上一节,我给你讲了要怎么理解平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法.这其中,多个进程竞争 CPU 就是一个经常被我们忽视的问题. 我想你一定很好奇, ...

  2. 对cpu与load的理解及线上问题处理思路解读

    前言 2019双11还有不到2个月就要到来了,大家也都知道服务器在大促期间由于流量的增加势必导致机器的cpu与load变高.因此趁着这个时机正好再好好学习.巩固一下cpu和load的概念,为双11做准 ...

  3. 对cpu与load的理解及线上问题处理思路

    cpu如何计算 当我们执行top命令的时候,看到里面的值(主要是cpu和load)值是一直在变的,因此有必要简单了解一下Linux系统中cpu的计算方式. cpu分为系统cpu和进程.线程cpu,系统 ...

  4. This kernel requires an x86-64 CPU, but only detected an i686 CPU.

    为了运行一款软件,我也是拼了.彻底的玩了一次,因为A需要B,我去下载B,结果B又需要C,我去下载C,结果……怎一个艰难了得.最关键的是,目前还没有达到目的!!! 先记录下过程,有时间再来一遍,也许我已 ...

  5. 【Linux】查看物理CPU个数、核数、逻辑CPU个数

    ①物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) cat /proc/cpuinfo| grep "physical id ...

  6. Linux查看物理CPU个数、核数、逻辑CPU个数

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...

  7. this kernel requires an x86-64 CPU, but only detected an i686 CPU. unable to boot - please ues a ker

    http://blog.csdn.net/xiao_cs/article/details/7728529 this kernel requires an x86-64 CPU, but only de ...

  8. 【网站开发】在新浪SAE上搭建一个博客

    概述 在新浪SAE上搭建一个博客 1.访问新浪SAE站点 http://sae.sina.com.cn/ 2.注册新浪SAE 3.选择应用仓库 4.选择WordPress 5.安装WordPress ...

  9. [转]Linux查看物理CPU个数、核数、逻辑CPU个数

    From : http://www.cnblogs.com/emanlee/p/3587571.html # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个 ...

  10. Linux查看物理CPU个数、核数、逻辑CPU个数(转载)

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/cpuinfo| g ...

随机推荐

  1. .Net Core WPF之XAML概述

    原文链接,机器翻译,有误处参看原文. XAML overview in WPF 2019/08/08 What is XAML XAML syntax in brief Case and white ...

  2. Java实现栈(链表和线性表两种方法实现)

    一.栈的介绍 任何数据结构都是一种规则 栈就是在最基础的结构--线性结构和链式结构上面定义规则形成的 如果对基本数据结构(线性表和链表)有疑问的同学可以看我之前的博客:https://www.cnbl ...

  3. Vue + Element-ui实现后台管理系统(3)---面包屑 + Tag标签切换功能

    面包屑 + Tag标签切换功能 有关后台管理系统之前写过两遍博客,看这篇之前最好先看下这两篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system 1.V ...

  4. Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)

    通过前面两篇文章,我们已经有了一个"嗷嗷待哺"的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓"纸上 ...

  5. Mysql 常用函数(11)- trim 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html trim 的作用 删除字符串左右两侧的空格 tri ...

  6. unserialize3

    0x01序列化与反序列化 序列化:将变量转换为可保存或传输的字符串的过程. 反序列化:在适当的的时候把这个字符串再转化成原来的变量使用. 优点: 存储和传输数据更方便,使程序维护性更高. 函数: se ...

  7. 【雕爷学编程】MicroPython动手做(03)——零基础学MaixPy之开机测试

    1.几个知识点(1)MicroPython 是 Python 3 语言的精简高效实现 ,包括Python标准库的一小部分,并针对嵌入式微控制器(单片机)和受限制的环境进行了优化,它是Python延伸出 ...

  8. vs2015 cppunit配置及使用

    目录 第一步 第二步 第三步 编译生成lib库 使用 calculator类测试 代码部分 第一步 下载源代码 http://sourceforge.net/projects/cppunit/file ...

  9. drf 生命周期

    1) 根据应用中urls.py,走as_view方法,但是视图类没有该方法,所以请求走的是APIView的as_view方法 2) 在APIView的as_view调用父类(django原生View) ...

  10. myeclipse快捷键代码

    复制来源百度文库http://wenku.baidu.com/link?url=2DLLTMdq4q_ZrK1Zqg34ElzDePSLC3qfKxi7P2et7NO-g7JErrYS4Dl8dbtR ...