新在哪里?从未接触过。比如之前一直在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. 201771010113 李婷华 《面向对象程序设计(Java)》第十七周总结

    一.理论知识部分 Java 的线程调度采用优先级策略:优先级高的先执行,优先级低的后执行:多线程系统会自动为每个线程分配一个优先级,缺省时,继承其父类的优先级: 任务紧急的线程,其优先级较高: 同优先 ...

  2. 使用天祥TX-1C调试DS18B20温度传感器的收获

    翻查DS18B20的DataSheet编写操作函数,其过程遇到了不少坎,记下来备查. 对于单总线的DS18B20芯片,首先严格按照时序图写出正确的“写0”.“写1”和“读0.1”的基础函数,再以此写出 ...

  3. SSM家庭财务管理系统

    包含[项目源码+论文]:http://mp.toutiao.com/preview_article/?pgc_id=6805534721838154254

  4. Blazor入门:ASP.NET Core Razor 组件

    目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留 ...

  5. 软路由OpenWrt(LEDE)2020.4.6编译 UnPnP+NAS+多拨+网盘+DNS优化

    近期更新:2020.04.06编译-基于OpenWrt R2020.3.19版本,源码截止2020.04.06.   2020.04.06更新记录: 以软件包形式提供ServerChan(微信推送) ...

  6. Openwrt:编译固件提示[mktplinkfw] error: images are too big 错误

    在编译mr3420的固件时,添加了luci.jamvm,但是最终编译的固件"openwrt-ar71xx-generic-tl-mr3420-v1-squashfs-factory.bin& ...

  7. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  8. CF#637 C. Nastya and Strange Generator

    C. Nastya and Strange Generator 题意 有一个随机全排列生成器,给出你一个全排列,让判断是否可以通过这个生成器产生. 生成器工作方式: 第i步为数字i寻找位置pos. 首 ...

  9. CF-163A Substring and Subsequence 字符串DP

    Substring and Subsequence 题意 给出两个字符串s,t,求出有多少对s的子串和t的子序列相等. 思路 类似于最长公共子序列的dp数组. dp[i][j]表示s中以i为结尾的子串 ...

  10. DNS注入以获取WebShell -asp_POST_DNS_SQLServer_GetWebShell

    豹子安全-注入工具-asp_POST_DNS_SQLServer_GetWebShell 注意,是 DNS 注入.这种方式的注入会隐藏很多细节, 对于用户来说是透明的. 请看如下视频(该视频会停留15 ...