同步操作将从 勤为本/OpenLoongsonLib1c 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
这是一个封装了龙芯1c各种外设操作的库(类似于STM32的库),不断完善中...
龙芯1b和1c有很多相似和通用的地方,“龙芯1B库”和“龙芯1C库”可以相互借鉴,双击进入龙芯1B库的git
目前龙芯1c能跑linux和RT-Thread,可是点个灯就难倒不少龙芯爱好者,因为对linux和RT-Thread不熟悉。
我认为linux和实时系统RT-Thread属于高级应用,做产品时才会用到。很多在校的童鞋可能连c语言都还不是很熟悉,你叫他去看linux和RT-Thread源码是不是有点太难为他了,呵呵。
回归初心,裸机程序是最合适的。为了进一步降低门槛,将各种外设封装成龙芯1c库。虽说最初是为了方便初学者,其实这个龙芯1c库不仅可以用于裸机编程,也可以用于各种实时系统。
通过将“龙芯1c库”和“最小系统板”开源,来促进推动龙芯1c的推广。让技术不再是“问题”,让大家可以把精力集中在市场推广和优化客户体验上。
实际上,“最小系统板”和“龙芯1c库”类似,“龙芯1c库”是每个软件都需要的,“最小系统板”是每块板子都需要的。是龙芯1c的基础软硬件,每个项目都需要用到。开源后可以避免大家重复“造轮子”。
本来最初只是参考“stm32库”的思想封装“龙芯1c库”,并开源。随着“龙芯1c库”的逐步完善,软件方已不再是限制推广的主要原因,而硬件方面则成为限制推广的主要原因。
初步想法是将“最小系统板”的原理图和pcb完全开源,像其它流行的开源硬件一样,实现真正意义上的开源。即任何人都可以免费下载原理图和pcb源文件,可以修改,可以直接把pcb拿去打样。以此来降低画板子的难度,同时降低成本。
龙芯1c的应用范围还是挺广的,可以跑裸机程序,运行实时系统,跑linux,甚至debian都可以。这里主要讨论跑裸机程序的“最小系统板”,其它的类似。为什么这里主要讨论“跑裸机程序的最小系统板”呢?因为我只能玩点简单的裸机程序啊(呵呵)。
目前(2018年1月)市面上没有专门为裸机程序定制的最小系统板,而跑裸机程序又是入门的首选(相对来说,实时系统和linux门槛较高)。龙芯1c本身的芯片价格相对国外友商的相同性能的芯片很有价格优势。概括来说,市场需要一款价格实惠的龙芯1c的最小系统板,而龙芯1c芯片价格又不贵,完全可以满足市场需求,甚至很有价格优势。目前(2018年1月),龙芯给大众的影响是高大上,敬而远之。希望通过这款跑裸机程序的最小系统板来改变大众对龙芯的认识,龙芯不仅能上得厅堂(卫星,国防军工),下得厨房(大众能买得起的)。
为了改变大众对龙芯的认识,同时便于在大众市场推广,为此特别取了一个草根,土,俗气的名字——“白菜板”
拍脑袋,想了一个价格——99元。(拍脑袋拍出来的,呵呵,仅供参考)
CPU肯定是龙芯1c,
内存可以用ISSI的SDRAM,
SPI NOR FLASH(用于存放固件)可以用兆易的,
编程器可以用最近(2018年1月)比较流行的沁恒的CH341.
这几个厂商都是国产厂商,并且都是得到市场认可的。如果再加上好的国产的电源芯片,就可以实现整块板子全部国产了。
龙芯1C库可以在Linux下与Windows下使用 MIPS.com 提供的 CodeScape MTI Bare Metal Toolchain 进行交叉编译
交叉编译工具链下载地址
windows上搭建龙芯1c开发环境
目前,git上的源码是在白菜板上测试的,如果需要用在其他板子上,可能需要进行一些必要的修改。比如修改SDRAM参数,修改调试串口的串口号和波特率,等。
请参考博文【龙芯1c库】换内存芯片后如何修改SDRAM配置(PMON类似)
一般只需要修改串口基地址和波特率,在上电初始化比较靠前的位置,会初始化串口,方便在汇编中打印调试信息,进入c语言运行环境后,可能会重新初始化调试串口。
具体的源码请查看汇编文件“start.S”和c文件“ls1c_uart.c”。
专门写了一篇博文讲解上电初始化流程,可以去看下【龙芯1c库】上电初始化汇编代码注解(pmon类似)
目前,使用龙芯1c库的裸机程序可以实现自引导,即纯粹的裸机程序,上电后,直接运行裸机程序,不需要pmon引导。如果是这种纯粹的裸机程序,想把它烧写到SPI NOR FLASH中,那么只有EJTAG或者(淘宝上常见的)SPI FLASH编程器
可能大家习惯了,使用仿真器,在线调试,单步调,按一下键盘上的快捷键,程序走一步,这样感觉踏实、直观。我也觉得使用仿真器在线调试很踏实,直观,不过据我了解,目前(2018年4月)市面上还没有比较便宜又好用的仿真器。以后可能会有,想知道最新情况,就在淘宝搜一下
其实,使用printf打印调试信息,也是一种非常常用,并且好用的调试方法。到目前为止(2018年4月)龙芯1c库的全部功能都是使用printf调试出来的。目前(2018年4月),把串口2作为调试串口,只需要把调试串口与电脑的串口相连,就可以在电脑上通过串口软件(比如,secureCRT、串口助手等)查看打印信息。
函数printf()可以打印几乎所有信息(包括寄存器的值),在需要查看某个寄存器值的地方,用printf()打印一下,在执行完到某个流程时,也可以打印一条提示信息。我一般都是在程序的每个流程的关键点上,打印一条信息,这样,可以通过串口打印来判断程序运行情况是否和期望的一样。如果想了解某个流程的更多信息,可以在相应代码中用printf增加一些打印。
我个人是比较喜欢printf这种调试方法的,我认为仿真器单步调试太慢了。我一般在程序中,用printf加好打印,然后上电跑一下,分析打印信息,没问题就收工。
源码目录包括“app”,“example”和“lib”。
目录“app”是用户放源文件的目录,用户把自己新建的文件放在app目录下,本目录下的内容和具体业务相关,不是龙芯1c通用的。
目录“example”是库的测试函数所在目录,同时这些测试函数也初步演示了怎么使用库提供的接口
目录“lib”是“严格意义上的”龙芯1c库,里面的源码将龙芯1c的寄存器信息封装为一个一个的函数,一般情况下,用户不应该修改该目录的文件
目录“include”是标准库(libc和libm)的头文件所在目录。标准库的用法和linux中一样,使用#include <xxx.h>
目录"libc"是标准c库,里面有常用的字符串相关的处理函数,包括printf
目录“libm”是标准数学库,里面是一些常用的数学函数,比如sqrt,sin,cos等
本来龙芯1c只需要文件夹“lib”中的源码即可,为了演示怎么使用和验证龙芯1c库的功能是否正常,增加了文件夹“example”,后面有需要使用printf,而printf内部会调用很多libc中的字符串处理函数,也会调用libm中的函数,同时字符串处理函数和数学函数也是经常使用到的,所以又增加了文件夹“libc”和“libm”,而文件夹“include”中仅仅存放libc和libm的头文件,在Makefile中把文件夹"include"的路径追加到变量VPATH中,即可在代码中使用#include <xxx.h>的方式调用libc和libm的头文件,所以又增加了文件夹“include”,另外还单独新建了一个文件夹“app”,用于存放用户自己的代码,该文件夹中的代码和具体具体业务相关,就这样文件夹越来越多 ^__^
龙芯1c库本身并没有限制,仅仅是把一些常见外设的功能封装为函数而已。所以龙芯1c库即可用于裸机编程,也可以用于实时系统,比如RT-Thread。
目前,已将龙芯1c库中一部分接口移植到了RT-Thread,具体请移步到GitHub上RT-Thread官方git查看。
移植龙芯1c库到RT-Thread的步骤很简单,只需要将龙芯1c库中目录“lib”内相关源文件拷贝到RT-Thread的龙芯1c BSP下的目录“libraries”内。
在RT-Thread中使用龙芯1c库中的函数和裸机编程时类似,在需要调用的地方先包含头文件,再调用
勤为本的博客 以博文的形式分享封装龙芯1c库的各个功能的思路和要点
桃李科技自营店 这是网友李工的淘宝店铺,其中可以买到龙芯1c芯片、套片(cpu、内存、flash等全套主要芯片)、最新的白菜板(在不断迭代中)、定制龙芯1c开发板和有偿技术支持。白菜板得到了很多网友的支持和帮助,其中李工贡献尤为突出。
百度贴吧里面的龙芯吧 可以这百度贴吧发帖交流
龙芯1c库的交流qq群“633262684”,勤为本的微信公众号“qin_wei_ben”,欢迎扫一扫关注微信公众号
Loongson-Community的Github 由航天龙梦创建的龙芯开源社区
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。