当前位置: 首页 > news >正文

青岛网站建设与推广nodejs做视频网站

青岛网站建设与推广,nodejs做视频网站,济南工装定制公司,一个网站有几个域名今天在GitHub上看到一个C语言项目,用大约600行代码实现了一个RISC-V CPU核,甚为感叹,分享一下。不管是学习C,还是学习RISC-V,这个项目都有非常高的学习价值,开源万岁! rv 用 ANSI C 编写的RISC…

今天在GitHub上看到一个C语言项目,用大约600行代码实现了一个RISC-V CPU核,甚为感叹,分享一下。不管是学习C,还是学习RISC-V,这个项目都有非常高的学习价值,开源万岁!

rv

用 ANSI C 编写的RISC-V CPU 内核。

特征:

  • RV32IMC用户级实现
  • 通过 riscv 测试中所有支持的测试
  • ~600 行代码
  • 不使用任何大于 32 位的整数类型,即使对于乘法也是如此
  • 简单 API(两个函数,加上您提供的两个内存回调函数)
  • 无内存分配

应用程序接口

/* Memory access callbacks: data is input/output, return RV_BAD on fault, 0 otherwise */
typedef rv_res (*rv_store_cb)(void *user, rv_u32 addr, rv_u8 data);
typedef rv_res (*rv_load_cb)(void *user, rv_u32 addr, rv_u8 *data);/* Initialize CPU. */
void rv_init(rv *cpu, void *user, rv_load_cb load_cb, rv_store_cb store_cb);/* Single-step CPU. Returns 0 on success, one of RV_E* on exception. */
rv_u32 rv_step(rv *cpu);

用法

#include <stdio.h>
#include <string.h>#include "rv.h"rv_res load_cb(void *user, rv_u32 addr, rv_u8 *data) {if (addr - 0x80000000 > 0x10000) /* Reset vector is 0x80000000 */return RV_BAD;*data = ((rv_u8 *)(user))[addr - 0x80000000];return RV_OK;
}rv_res store_cb(void *user, rv_u32 addr, rv_u8 data) {if (addr - 0x80000000 > 0x10000)return RV_BAD;((rv_u8 *)(user))[addr - 0x80000000] = data;return RV_OK;
}rv_u32 program[2] = {/* _start: */0x02A88893, /* add a7, a7, 42 */0x00000073  /* ecall */
};int main(void) {rv_u8 mem[0x10000];rv cpu;rv_init(&cpu, (void *)mem, &load_cb, &store_cb);memcpy((void *)mem, (void *)program, sizeof(program));while (rv_step(&cpu) != RV_EECALL) {}printf("Environment call @ %08X: %u\n", cpu.pc, cpu.r[17]);return 0;
}

rv编译程序

使用 riscv-gnu-toolchain 工具链和 rv链接脚本。

建议使用gcc命令行:

riscv64-unknown-elf-gcc example.S -nostdlib -nostartfiles -Tlink.ld -march=rv32imc -mabi=ilp32 -o example.o -e _start -g -no-pie

然后用obj工具将0x80000000起始的二进制代码生成能被rv加载的二进制文件:

riscv64-unknown-elf-objcopy -g -O binary example.o example.bin

支持的指令列表

参见 支持指令列表。

公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top

http://www.yayakq.cn/news/945533/

相关文章:

  • 怎么做网站美工宁波网站建设制作推广
  • 信阳哪里做网站wordpress自动评论插件
  • 网站维护内容和方法wordpress网站部署
  • 个人推广网站有没有专门做设计的网站
  • 网站抓取压力高休闲吧网站建设
  • 网站如何paypal支付网站内页产品做跳转
  • 成都有没有做网站建设的深圳专门做seo的公司
  • 网站开发经验教训wordpress多个single
  • 机械英语网站wordpress淘点金组件
  • 怎么给网站做动图著名咨询公司有哪些
  • 网站界面设计规划可以免费追剧的app
  • 网站建设 南京网页微信版传输文件
  • 中国搜索提交网站小区网站建设方案怎么写
  • iis 没有右键网站属性智通人才招聘网东莞
  • 百度商桥在网站搜索排行榜
  • 网站mip怎么做帝国cms手机网站
  • 手机网站开发要哪些人上海市工程建设协会网站
  • 网站建设人力资源分配做网站设计师的原因
  • 网站建设公司内幕湖南省博物馆网站建设
  • 在溧水做新店推广那家网站好网站建设属于什么类目
  • 爱站工具包石狮网页设计
  • 网站轮播广告数据分析师要学什么课程
  • 创建微网站网页版梦幻西游手游官网
  • 施工建设集团网站seo下载站
  • 长沙 网站设计 公司价格wordpress 4.3.1 下载
  • 手机网站域名开头站长统计工具
  • 杭州企业建设网站企业局域网视频网站开发
  • 邯郸网站优化公司兰州微网站建设
  • 张家界市建设工程造价管理站网站广西自治区住房城乡建设部网站
  • 企业网站 程序大望路网站建设公司