1.1、RISCV mcu
近日半导体供应商兆易创新推出了一款基于开源指令集架构 RISC-V 的通用单片机,据称这是全球首个基于 RISC-V 内核的 32 位通用单片机。该 GD32VF103 MCU 工作主频达108M。GD32V 采用的 RISC-V内核,支持标准 JTAG 接口及 RISC-V 调试,支持 RISC-V 标准的编译工具链,以及 Linux/Windows 下开发工具,支持FreeRTOS等主流嵌入式系统;RISC-V或将未来可期。
1.2、FreeRTOS
我们先来看一下2019嵌入式市场分析报告(RTOS部分)


可以明显看到,不管是当前使用还是接下来一年要使用的,FreeRTOS都是名列前茅的。且现在的ARM上使用也是非常多,各种介绍也是遍地都是这里不过多介绍,开源免费,怎么用都香~~~~,现在的微控制器这么强大不上系统或许不好发挥应有的性能。
2、FreeRTOS移植系统(1)
常规情况下,我们都是去FreeRTOS官网danger个源码包下来,移植最重要的Source文件夹,根据官方Demo 文件夹里面的对应例程移植修改。具体看看这个。
而这时候,我也去danger了两个下来,发现在旧的版本中没有支持RISCV的内容;而在FreeRTOS V10.2.0发布里增加RISC-V和M33内核芯片支持,在系统文件包下也有了RISC-V的文件夹身影。这时候再去找找Demo文件,发现确实有:

但当前的支持还不够完善,看了这三个文件的demo内容跟我使用的板子差距还是大了一些,不想麻烦就只能另外寻找看还有没有合适的。在谷歌、GitHub、百度搜搜了几下,还真发现了一个大佬移植的源码包直接挂在了21IC那里,简单粗暴只有一个标题和附件(原址:gd32vf103在NucleiStudio上的freertos工程),非常感谢这位无私奉献的大佬,全网只找到这一个。三下五除二把它danger下来再说。。。
3、FreeRTOS移植系统(2)
由于下载的这个包刚好是基于NucleiStudio的,在我的电脑上装的是NS 2019版的可以直接导入并编译,(NS IDE的快速入门请看官网:下载、安装、新建工程、导入工程、编译等)。结果编译: Build Failed. 16 errors, 0 warnings. (took 173ms)
事情总是那么不尽人意,看来还是我太年轻了。出错一堆,估计是自己的某些配置上出问题,让我想起了Error 154:~~~what? 我的代码只有50行怎么出错在154,真是让人想得掉头发。经过各种修改添加头文件路径后又出现了“三无”。无警告无错误无响应~~~~飘了
4、FreeRTOS移植系统(3)
算了 不去浪费那个时间,还是按照惯例去移植一次看看;
4.1、新建一个完整可用的工程,越简单越好。新建的教程挺多这里就不在细说,一个完整可用的工程界面如下:

4.2、在现有工程的基础之上添加相应的文件,拷贝FreeRTOS到根目录下,可以利用右上角的搜索,搜一下FreeRTOSConfig.h文件在不在里面,这个文件重要,不然编译出错推挤成山。步骤如下:

4.3、回到NucleiStudio编程界面,更新添加的文件

4.4、点击编译,一般会出错~~~~,系统移植常见的文件,其实大部分是找不到头文件,找不到宏定义这些,接下来就添加头文件,为了方便,直接把FreeRTOS相关的目录都添加了,方便日后不用编译一次出错又去改。

点击project ---> porperties出现如下配置页面。配置添加好头文件路径后点击Apply and close保存退出即可

4.5、继续编译,又出错~~~

这时候得回原来下载的包去找宏定义在哪里了,经过一翻搜寻,发现定义在\RISCV\drivers路径下的n200_eclic.h文件中,如下:

4.6、将这三个文件宏 复制到 我们的工程相应的目录下 的 相应H文件里,继续编译。终于0警告0错误。看来离成功不远了
4.7、在main.c中引入头文件开始写测试代码,如下:


5、自此:在官方评估板:GD32VF103VBT6-EVAL 的 FreeRTOS移植体验完成。
注:由于从21ic下载的这份代码,这位大佬应该是验证过了才发的,只是我的工程搞不定需要重新移一下,所以FreeRTOSConfig.h这个已经配好不用配置了,有就可以了。其它跟平台无关的文件也不用动。本次只是在RISCV上的体验,不过多介绍配置方面的,有兴趣的同学可以深入研究,配置自己需要的RTOS功能。

全部回复 3