新在哪里?从未接触过。比如之前一直在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. vs每次生成都全部编译的问题

    最近vs每次生成都会编译整个工程,经查找为.qrc中的资源路径不存在导致,删除路径后问题解决. 原文来自微信公众号"程序员成长日志",已经工作的程序员朋友可以关注下,分享日常工作中 ...

  2. ssh暴力破解解决方案(Centos7更改端口)

    服务器默认ssh远程连接端口为22端口,通常通过22远程连接的话,容易有ssh暴力破解的风险,给我们造成一定的损失.下面是更换ssh端口过程: 1.添加ssh端口 vim /etc/ssh/sshd_ ...

  3. STM32 Bootloader基于ymodem传输协议串口IAP升级详解

    硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...

  4. MOS管和三极管开关特性

    不知道对不对? 待续!!!

  5. quartus II Warning 好的时序是设计出来的,不是约束出来的

    一.Warning (15714): Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings r ...

  6. 设计模式之GOF23观察者模式

    观察者模式Observer 广播机制 场景:多个观察者--被通知改变 CS的时候,人物移动坐标变化,更新每个人地图上的坐标 核心:当目标对象(Subject)的状态值改变时,需要及时告知所有观察者(O ...

  7. [hdu3644 A Chocolate Manufacturer's Problem]模拟退火,简单多边形内最大圆

    题意:判断简单多边形内是否可以放一个半径为R的圆 思路:如果这个多边形是正多边形,令r(x,y)为圆心在(x,y)处多边形内最大圆的半径,不难发现,f(x,y)越靠近正多边形的中心,r越大,所以可以利 ...

  8. 简单mysql存储过程

    直接上代码: CREATE DEFINER=`root`@`localhost` PROCEDURE `sos`( ) BEGIN -- 创建一个临时表 DROP TABLE IF EXISTS fi ...

  9. Navicat for MySQL数据库管理工具安装和破解

    Navicat for MySQL官方下载地址:https://www.navicat.com/en/download/navicat-for-mysql 1.下载后安装 navicat110_mys ...

  10. 关于键盘事件-查询:有多个input框,任意一个支持enter键查询

    应用场景:同一个界面有多个input框支持任意一个Enter查询. 实现:在input框中添加onkeypress="函数名()". 函数里面编写对应键盘code值,在里面直接调用 ...