本文将pmon中的libc移植到龙芯1c库中,用于龙芯1c的纯裸机编程。实际上标准的c库libc不应该属于龙芯1c库,狭义的“龙芯1c库”应该是像“STM32库”那样只封装了各个外设的功能,这里说的“龙芯1c库”我认为应该是“广义的”,泛指裸机编程需要的各种常用功能的集合。先不咬文嚼字了,暂且这样理解吧。
除了libc外,标准数学库libm的移植也是类似的。
龙芯1c库的git地址是https://gitee.com/caogos/OpenLoongsonLib1c
为什么需要移植libc
为什么需要移植libc?因为需要用到libc中的一些函数啊。比如printf,strcpy,strcat,strstr等等。
Libc中包括两类函数:字符串处理相关的函数(比如strcpy, strcat, strstr等等)和文件相关的函数(比如fopen, fclose, fgetc, fputc, fread, fwrite, printf等等)。对于单片机的裸机编程来说,只需要字符串处理相关的函数和printf就够了,其中printf是个特例,是我们移植的唯一一个文件相关的函数。
使用printf()函数打印调试信息时非常实用、非常常见的。而printf()函数的作用就是将字符串格式化,即在字符串中携带一些变量的值,比如用printf()函数打印“当前温度值=xxx”。
Printf()在格式化字符串的时候就需要使用各种字符串处理函数。除此之外,在解析或组建一些协议时,可能也需要使用字符串相关的一些函数。
怎样移植libc
字符串处理相关的函数
参考pmon,Pmon本身就是一个纯粹的裸机程序,里面也包含了libc、libm。先来看下pmon里面的libc目录长什么样。如下
细心的读者可能已经注意到了,libc文件夹中的文件名好像有点熟悉也,对不对?^__^,对,就是在常用的strcpy, strcat, strcmp, strlen等函数后面加了“.c”。难倒每个函数单独放一个c文件吗?经过验证,是的,同一个源文件中,要么只有一个函数,要么就是功能相似的多个函数。比如:strcpy()和strlcpy()