使用gnu 编译picoRV32 c/asm 代码

小提示:

1,大家本身了解eclipse使用,也已经安装了gnu+eclipse环境,参考: http://blog.csdn.net/kuankuan02/article/details/79233442

2,同时下载了 picoRV32的 open source code:

https://github.com/cliffordwolf/picorv32

3,你要有硬件环境可以跑bin,我是有数字工程师提供了FPGA平台。

正文:

1,eclipse新建一个工程,选择RISC-V c project创建。

2,然后加入你所下载的picoRV32_master/fireware里的c code,我下面简单介绍下ASM部分

start.s是启动代码以及trap处理代码,reset_vec 是开始,摆在0地址;后面.balign 16 对齐,因为picoRV32 trap地址在0x10,所以后面是trap处理代码。记住picoRV32 ASM 不要使用CSRs读写指令,CPU不认的。它的trap上下文切换所要用的stack是irq_regs定义的数据块,因为我的bin都是下载到flash中,所以给它加个.bss section属性,把它移到ram去。正好再提一下,系统stack是在ld脚本里申请的section,这个code是把系统stack和trap stack分开了,很多情况下都是用的同一个。它的技巧是自定义指令getq和setq来交换自定义寄存器q0~q3,每次trap都重新获取trap stack 指针,这是个很笨的上下文保存方法,大家只拿来先跑起来bin就好。启动代码还要注意的是.bss 必须清0,以及.data 必须搬入ram中,sp 赋值以后就可以开始进入c code了,输出个hello world。我的系统是uart输出,所以uart初始化也加到start.s中。

irq_regs:
	// registers are saved to this memory region during interrupt handling
	// the program counter is saved as register 0
	.fill 32,4

	// stack for the interrupt handler
	.fill 256,4
irq_stack:
3, picoRV32额外实现了一些指令,getqsetqretirq等等,具体内容可以到
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值