bigbat 发表于 2021-1-23 09:56

升级一下嵌入式RISC-V编译器

<p>ch32v103c8t6的板子使用的是MounRiver Studio工具开发,这个工具的集成度还是不错的,但是里面的项目模板有点通过&ldquo;简单&rdquo;了。看来要详细研究芯片的工作原理有点懵逼。所以就花了些时间来研究一下,发现该工具集成的是xpack出品的gnu risc-v工具和OpenOCD。我就花了好长的时间下载了xpack-riscv-none-embed-gcc-10.1.0-1.1-win32-x64.zip这个最新版本的工具。辛辛苦苦的一番配置,结果很是悲剧MounRiver的IDE无法下载程序了,于是只好卸了重装吧,经过几番折腾的成果就是了解到MounRiver的工具的makefile文件在哪里了。</p>

<p></p>

<p>看到了吧就是这里啦。</p>

<p>赶忙把下载的文件xpack-riscv-none-embed-gcc-10.1.0-1.1-win32-x64.zip重新解压,我把文件的主目录命名为F:\RVGCC后面的操作都是这个目录</p>

<p>openocd的目录也考到这个目录下,make工具也是这个目录</p>

<p>好了,这下就可以编译了。</p>

<p>首先,设置目录路径</p>

<pre>
<code class="language-bash">set PATH=%PATH%;F:\RVGCC\bin;F:\RVGCC\BTools\bin;F:\RVGCC\OpenOCD\bin
</code></pre>

<p>二、找到项目目录路径</p>

<pre>
<code class="language-bash">cdF:\MounRiver\MounRiver_Studio\workspace\CH32V103C8T6</code></pre>

<p>三、编译</p>

<pre>
<code class="language-bash">make clean
make -j8 all</code></pre>

<p>先清楚一下原来工具生成的文件。再编译</p>

<p>出现了警告,不用理它。因为不符合c的标准才出现的</p>

<p>找到CH32V103C8T6.hex烧写到开发板测试</p>

<p>谢谢!各位一切正常,已经看到闪烁的led和printf的信息了。可能这次的实验是成功的吧,当然出现的警告需要测试看看对程序有没有上面影响。在给各位一个严肃的结论。这几天访问国外的站实在是慢。很是煎熬。所以后面的实验还是需要莫大的勇气的。</p>

bigbat 发表于 2021-1-23 10:06

<p>基于eclipse的工具链我是很讨厌的。有两个毛病真是受不了!</p>

<p>一、启动比较慢,又吃内存。</p>

<p>二、工程文件都堆在屏幕上看着很是闹心。</p>

<p>当然ide本身的语法提示也比较若,但是能使而已。</p>

<p>我是打算换成vscode的!后面测试顺利的化就是试试弄一下了。</p>

wintonson 发表于 2021-1-23 12:04

<p>我测试的时候用的是Ide,已经习惯了vscode,用这个ide还不是很习惯。</p>

bigbat 发表于 2021-1-23 12:52

<p>最新测试这个版本不能使用!经测试在使用中断的时候不正常,程序进入中断后,只执行一次,下次就无法中断了,目前不知道是什么原因造成的</p>

bigbat 发表于 2021-1-23 12:53

最新测试这个版本不能使用!经测试在使用中断的时候不正常,程序进入中断后,只执行一次,下次就无法中断了,目前不知道是什么原因造成的

bigbat 发表于 2021-1-24 09:45

<p>经过反汇编对比发现不能编译的原因!</p>

<p>机器自带的编译编译的中断程序返回汇编指令是&nbsp; &nbsp; 26:&nbsp;&nbsp; &nbsp;30200073 &nbsp; &nbsp; mret</p>

<p>而新版的编译器因为无法识别void&nbsp;EXTI0_IRQHandler(void)&nbsp;__attribute__((interrupt(&quot;WCH-Interrupt-fast&quot;)));中的属性汇编指令是</p>

<p>32:&nbsp;&nbsp; &nbsp;8082 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;ret</p>

<p>所以造成中断无法返回!</p>

bigbat 发表于 2021-1-24 14:02

<pre>
<code class="language-cpp">void NMI_Handler(void) __attribute__((interrupt("machine")));
void HardFault_Handler(void) __attribute__((interrupt("machine")));
void EXTI0_IRQHandler(void) __attribute__((interrupt("machine")));


//void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
//void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
//void EXTI0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
</code></pre>

<p>现在通过修改程序目前测试已经可以啦。没有出现任何问题</p>

<p>&nbsp;</p>

freebsder 发表于 2021-1-25 22:30

<p>risc-v 前途远大</p>

通途科技 发表于 2024-9-6 11:47

页: [1]
查看完整版本: 升级一下嵌入式RISC-V编译器