小提示:
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额外实现了一些指令,getq、setq、retirq等等,具体内容可以到