- 博客(81)
- 资源 (18)
- 收藏
- 关注
原创 Windows安装Linux子系统(WSL)ubuntu,应用总结
4.将 /etc/resolv.conf 文件设置为只读属性的命令(避免被系统修改,不然每次开机都会改变)sudo chattr +i /etc/resolv.conf。删除sources.list文件中的官方源(Tips:将光标移动到最后一行,esc进入一般模式,依次按dgg,即可全文删除)2.备份当前的DNS配置:sudo mv /etc/resolv.conf /etc/resolv.conf.bak。3.创建resolv.conf文件并编辑内容:sudo vim /etc/resolv.conf。
2023-04-24 12:37:26
1954
1
原创 win10 两台电脑之间共享桌面及共享文件(手把手教学)
概述使用两台主机同时办公时,在两台电脑之间搭建共享桌面,可以在一台电脑上同时对两台电脑进行桌面操作,避免了两个鼠标不断切换的麻烦。搭建一个文件共享,方便两个电脑之间互传文件。网络环境搭建第一步:网络连接。两台电脑之间可以选择通过网线直连,也可以把两台电脑连接到同一个路由器上。第二步:为了确保两台电脑之间能够互ping,需要先关闭防火墙。在window10中搜索”控制面板”—选择”Windows Defender 防火墙”—选择”启用或关闭Windows Defender防火墙”—选择“关闭Windo
2021-11-10 09:23:36
55380
3
原创 linux环境下libcurl应用总结,实现FTP文件上传
目录概述libcurl的移植libcurl实现FTP上传FTP服务器搭建ftpupload.c编译验证API使用常见问题概述libcurl是一个免费的C语言开发库,支持HTTP、FTP、Telnet、SFTP等URL传输。例如实现FTP文件上传,使用该库函数来开发非常的便捷可靠。libcurl的移植libcurl库源码下载官网地址:https://curl.se/download.html下载源码:curl-7.79.1.tar.gz1.解压源码:tar -xzvf curl-7.79.1.ta
2021-10-21 11:41:26
1553
原创 Linux CAN应用编程
目录概述Linux can常用操作命令Linux CAN 应用编程CAN发送程序示例CAN接收程序示例CAN过滤器的使用概述CAN 协议通信技术在自动化领域,嵌入式器件编程,和汽车领域等具有广泛的应用。Socketcan 套接字是 Linux 下 CAN 协议的实现方法,使用socket API将CAN器件驱动程序实现为网络接口,最终以套接字接口呈现给用户。Linux can常用操作命令可以使用ip命令来查看或设置CAN,使用ifconfig或ip命令来开启/关闭CAN,canconfig工具来配置
2021-10-11 14:08:00
7177
2
原创 C语言常用字符串操作应用总结
字符串操作strcpy(p, p1) 复制字符串原型:strcpy(char destination[], const char source[]);功能:将字符串source拷贝到字符串destination中例程:#include <stdio.h>#include <string.h>int main(){ char str1[10] = { "ABC "}; char str2[10] = { "ab"}; printf("%s",strcpy(str1
2021-10-08 14:39:10
988
原创 sqlite3内存数据库与文件数据库的应用总结
概述使用sqlite3进行数据库写操作,每插入一条数据都会回写到磁盘上,这样会导致写数据库的效率低,而且增加磁盘的擦写次数。为了解决该问题,我们可以将数据写入内存数据库中,定时把内存数据库的数据保存到文件数据库中,较少磁盘的操作次数。C代码1.创建文件数据库;2.创建内存数据库;3.创建文件数据库表格;4.创建内存数据库表格(和文件数据表格一致);5.内存数据库中attach文件数据库,这样可以保证文件数据库中的内容在内存数据库中可见;6.将数据写入内存数据表格中;7.定时将内存数据中的内
2021-10-07 16:13:14
1699
原创 嵌入式Linux sqlite3移植与使用
这里写目录标题概述sqlite3 移植sqlite3 常用命令sqlite3 API使用sqlite3 编程实例sqlite3 测试验证概述sqlite3是一个小型数据库,代码量少,运行占内存也比较少,采用C 编写,所以天生适合嵌入式系统中,尤其是嵌入式linux,相当支持,sqlite3可以直接通过shell运行,不过这个也只限于测试使用,在实际的项目编程中,我们还是要使用sqlite3提供的C/C++接口函数,也就是API接口。sqlite3 移植sqlite官网下载C源码:https://ww
2021-10-06 16:31:28
2433
原创 Linux 进程间通信之信号量
概述进程通信的概念请参考上一篇文章:Linux进程间通信之共享内存。信号量作用:用于进程/线程同步或互斥的机制。信号量主要用于控制多个进程间或一个进程内的多个线程间对共享资源的访问, 相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志,除了用于共享资源的访问控制外,还可用于进程同步。信号量接口函数包含头文件:#include <sys/sem.h>semget ()创建信号量:int semget(key_t key, int num_se
2021-08-13 16:18:26
619
原创 Linux 进程间通信之共享内存
概述进程间通信(interprocess communication,简称 IPC) 指两个进程之间的通信。系统中的每一个进程都有各自的地址空间,并且相互独立、隔离, 每个进程都处于自己的地址空间中。 所以同一个进程的不同模块(譬如不同的函数)之间进行通信都是很简单的,譬如使用全局变量等。但是,两个不同的进程之间要进行通信通常是比较难的,因为这两个进程处于不同的地址空间中。Linux内核提供多种IPC机制,管道和FIFO、共享内存、信号量、消息队列、socket。在实际项目中经常使用的是共享内存,即多个
2021-08-11 17:19:34
503
原创 Linux shell脚本编程
概述shell脚本是用C语言编写的程序,有变量也有流程控制语句,可直接执行不需要编译。常见的shell脚本解释器有bash、sh、csh等,一般放在文件系统根目录/bin目录下。可用任意文本编译器编写。基本语法第一行#! 用来告诉系统它后面的参数是用来执行该脚本的程序。例如我们的shell脚本解释器是/bin/sh,那么脚本的第一句话为:#!/bin/sh注释#号开头语句表示注释,直到这一行结束。使用变量变量名=变量(注意:等号两边不能有空格)取出变量名,可以在变量值前加一个美元符号($)
2021-08-04 14:22:12
232
原创 Linux安装配置NFS服务器
NFS简介NFS(network file system)即网络文件系统,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的DDR 上。安装NFS服务在ubuntu终端执行以下指令:安装NFS服务:sudo apt-get install nfs-kernel-server新建NFS共享目录:sudo mkdir /home/ boyee/nfs设置NFS共享目录权限:sudo c
2021-07-30 13:57:06
1167
原创 Linux 串口驱动与使用
目录概述实验目的配置设备树编译设备树串口收发测试移植minicom工具概述串口驱动和IIC/SPI驱动不同,它没有什么主机端和设备端之分,就只有一个串口驱动。官网会已经把串口驱动编写好了,我们真正要做的就是在设备树中添加所要使用的串口节点信息。当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttyx节点。移植minicom串口工具,可以很方便的对串口进行读写操作。虽然串口驱动不需要我们去写,但是串口驱动框架我们还是需要了解的。实验目的配置设备树,使能Atm
2021-07-29 14:49:27
3106
原创 Linux I2C总线驱动调试之i2c-tools工具使用
目录概述i2c-tools移植扫描I2C设备读I2C寄存器写I2C寄存器概述调试I2C总线之前,我们可以i2c-tools工具,扫描I2C总线上的所有I2C设备、读写I2C寄存器,该工具使得I2C设备的调试非常方便。如果嵌入式Linux环境中不带有i2c-tools,需要自行移植到文件系统中。i2c-tools移植1.获取源码:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.1.tar.xz2.解压
2021-07-28 17:41:57
5908
1
原创 vmware下ubuntu和电脑不能ping通、不能上网、如何固定IP
windows和ubuntu互ping环境设置我们经常使用ssh登录虚拟机进行调试,如果每次系统启动都分配一个动态IP,使用起来会很不方便,所以需要设置一个静态IP,且让windows和vmware下的ubuntu能够ping通。设置如下:虚拟机—设置—网络连接—选择为桥接模式。设置为固定IP:如下图所示。ubuntu上网环境设置设置成桥接和固定IP,但是不能上网,上网时需重新配置。配置如下:网络连接设置成NAT模式,IP设置为自动模式,重启网卡过后,主要windows能上网,则vmwa
2021-07-28 16:19:46
712
原创 Linux下对GPIO的操作控制(基于GPIO子系统)
目录概述GIPO子系统介绍示例:通过GPIO子系统控制LED(GPIOA29)概述以前学习了LED和按键驱动,实际上,在Linux中实现这些设备驱动,有一种更为推荐的方法,就是GPIO子系统和Input子系统。GPIO子系统可以控制IO的初始化、输出高低电平值,读取IO的输入电平;Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互。例如控制LED、读取按键、触摸屏、鼠标都可以通过这些子系统接口实现。GIPO子系统
2021-07-27 19:04:25
13478
原创 Linux内核移植之DM9000网卡驱动
简介DM9000是一款低成本的以太网MAC控制器,集成MAC和PHY功能,内部有16K的SRAM,像访问存储芯片一样对DM9000进行操作读写。Linux3.x内核自带有DM9000驱动,我们需要将DM9000编译进入内核,配置好对应设备树。除此之外,使用到的硬件资源也需要进行相应的初始化。添加dm9000网卡设备驱动在根目录下执行make menuconfig,进入配置界面。输入’/’进入搜索界面,可以查找到DM9000的配置位置。使能DM9000,使其编译进入内核。(按空格键选中)在设备
2021-07-13 09:26:38
1248
3
原创 Linux 基于buildroot移植根文件系统
目录简介buildroot简介移植目标编译构建根文件系统增加自启动脚本常见问题简介rootfs(root file system根文件系统),是一个文件系统,内核启动过后第一个挂载它,kernel会引导程序加载一些文件系统中的脚本和服务进行初始化。Linux支持多种文件系统:ext3(extended file system)、nfs(network file system)、jffs、romfs(只读文件系统,可通过ramdisk访问)。VFS(虚拟文件系统):对不同的文件系统做一个抽象,提供统一
2021-07-02 17:58:41
1264
1
原创 Linux内核移植
目录移植目标设置环境变量下载解压内核配置并编译内核移植目标获取Linux内核源码;修改内核,使内核启动能正确挂载根文件系统rootfs(即选择内核支持的文件系统格式);修改驱动,裁剪内核;编译生成uImage,下载体验。设置环境变量配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。方法一:通过修改根目录下的Makefile中ARCH和CROSS_COMPILE值。方法二:修改环境变量。修改/etc/profile文件,对所有用户生效,执行source /etc/p
2021-06-30 17:24:14
824
9
原创 u-boot移植
目录(一)移植uboot目标:(二)u-boot下载编译(三)uboot的使用(四)修改环境变量参数(五)修改uboot,启动运行(一)移植uboot目标:将linux内核和dtb设备树加载到RAM;将文件系统加载到RAM;引导Linux运行;执行文件系统中的linuxrx程序,对linux系统初始化。(二)u-boot下载编译1.在官网(https://ftp.denx.de/pub/u-boot/)下载u-boot。2.在ubuntu下面解压:tar -jxvf u-boot-201
2021-06-28 19:28:45
445
2
原创 嵌入式QNX开发环境搭建
安装QNX Momentics IDE 4.7在QNX官网上下载安装包:双击安装,过程中除了License和同意条款外,全部点击Next,直到Finish工程创建选择File-New-QNX C Project,填写工程名,点击下一步,选择编译方式(如果应用程序在电脑上的虚拟机上运行,则选择X86,在ARM上运行,选择ARM v7)执行工程编译,生成可执行文件;新建目标链接(即IDE与开发板或虚拟机链接)。进入开发板,可以看到可执行程序,进行运行测试。...
2021-06-17 16:16:45
2580
5
原创 正点原子 Linux imx6ull学习开始 Action~
从事嵌入式开发有好多年了,一直都以MCU为主,工作期间也接触过Linux,都是断断续续的。既然嵌入式是我干饭的工具,那Linux也应该有一个扎实的基础,从今天开始,准备系统的学些一遍Linux知识,我会利用优快云记录学习的过程,每天更新一篇,供同道中人查阅,佛光普照、只渡有缘人。选择imx6ull开发板,为什么选择学习imx6ull开发板,因为资料多啊,现在各大开发板厂商都出了imx6ull的开发板和教程。包括正点原子、韦东山、野火、迅为等等。① 正点原子 imx6资料,,资料全面,简单易懂,完全开
2021-06-17 13:59:51
3082
原创 嵌入式Linux GDB调试环境搭建与使用
这里写目录标题简介在Ubuntu下简单体验GDB嵌入式GDB移植GDB 常用命令参考网络通信设置注意事项简介Linux系统常用GDB调试C代码,类似单片机的IDE。可以使用GDB命令单步执行、跳入/跳出函数、设置断点、查看变量等等。Ubuntu资源充足,可以直接用gdb调试程序。嵌入式Linux性能弱,一般PC上运行源码和GDB工具,可执行文件在开发板上运行。PC上通过gdb调试嵌入式程序,需要gdb和gdbServer两个工具,gdb运行PC上,gdbServer运行于开发板,通过网络进行连
2021-06-07 14:18:22
1282
原创 嵌入式linux运行程序 -sh ./xxx: not found 解决办法
问题分析在嵌入式Linux环境下,运行应用程序,提示”-sh: ./xxx : not fount”出现该问题是因为缺少动态链接库,通过”ldd xxx”指令查看缺少的库。库文件从哪里来,需要拷贝在哪里?找到我们搭建的交叉编译环境目录,我安装在“/usr/local/arm/”目录中。进入目录中可以查找到所需要的动态库,拷贝的嵌入式Linux环境的/lib目录下。测试当库具备完全后,程序正常运行,完美。...
2021-06-07 13:20:37
10094
原创 QNX实时操作系统简介
目录什么是QNX?QNX的特点什么是QNX?QNX是一种实时操作系统;QNX是微内核架构;其核心仅提供4种服务(大部分功能都剥离了出去),分别为:进程调度、进程间通信、底层网络通信和中断处理。驱动程序、协议栈、文件系统、应用程序等都在微内核之外内存受保护的安全的用户空间内运行,组件之间能避免相互影响,在遇到故障时也能重启。QNX的特点高效率:内核小巧,运行极快;可任意裁剪成适合自己的最小方案;易操作:应用程序接口完全符合 POSIX 标准,Linux用户可快速上手QNX。实时性:多种基于优先
2021-05-21 11:13:40
4881
2
原创 Linux互斥锁的理解和使用
目录互斥的理解使用场景使用方法使用原则互斥失败的例子互斥的理解一句话理解互斥: 等我用完厕所,你再用厕所。什么是互斥?你我早起都要用厕所,谁先抢到谁先用,中途不被打扰。伪代码如下:void 抢厕所(void){if (有人在用) 我眯一会;用厕所;喂,醒醒,有人要用厕所吗;}假设有 A、 B 两人早起抢厕所, A 先行一步占用了; B 慢了一步,于是就眯一会;当 A 用完后叫醒 B, B也就愉快地上厕所了。在这个过程中, A、 B 是互斥地访问“厕所”,“厕所”被称之为临界资源。我们
2021-05-20 13:47:54
1184
1
原创 QT快速入门学习总结
QT简介QT是什么:QT是一个跨平台的C++应用程序开发框架。最大特点:只需编写一次代码就可以跨桌面、手机、嵌入式等多种平台。支持所有主流平台:Windows、Linux/X11、macOS、NQX、Android、iOS、WinRT等。开源QT:轻松获得QT源代码,众多开源社区支持。学习方法(一)入门推荐一个QT的开源社区http://www.qter.org/forum.php。在这个社区里面,你能下载到QT的安装包、QT的电子书籍、QT的开源软件、QT嵌入式开发的相关资料。假设你已经
2021-02-09 14:19:05
2012
原创 二级建造师学习心得总结
前言二建考完了,写一篇总结来告别这段时间的学习,虽然不知道考试成绩如何,但是我觉得应该能过,别说了,谋事在人成事在天,要是没有过,明年再战。为什么考二建,我并不是做建筑行业,而是一个标标准准的程序员。或许是因为看到身边很多都考了二建、或许是报名那段时间工作闲余时间太多、或许想要找点事情充实自己,反正我也没有搞明白,既然报了名,就去学,学了就去考,干就完了!!二建报名直接在网上进行资审(没有现场审核环节),理论上只要你的专业相关、工作年限达到,报名都能审核通过。以下内容,大概是我的学习步骤。学习准
2020-11-02 09:40:05
1031
1
原创 全屋wifi覆盖方案 应用经验
概述路由器能覆盖的面积,根据房子的格局不同而不同。市面上的路由器信号都差不多(那些看上去很牛逼,很多天线的路由器,信号也好不到哪里去!),一个路由器想要覆盖整个房子,很难!于是乎,我有了做全屋wifi的想法。全屋wifi方案选择(一)POE+AP面板组网方案描述:布线方案去下图所示,购买一个POE路由器(注意是POE路由器,不是一般的路由器),然后每个房间放一个AP面板。方案结论:这个方案适用于在装修之前就已经规划好所有网线和面板的位置。该方案应用于酒店等大型场合,并且POE路由器也比较贵和AP面
2020-09-08 19:23:48
20444
原创 TCNOpen实现TRDP通信协议(源码编译运行测试)
概述本文介绍了通过TCNOpen开源源码实现TRDP通信,包括源码下载,开发环境搭建,编译运行,测试。Linux环境下编译运行TRDP(一) 下载CANOpen源码。下载地址:https://sourceforge.net/p/tcnopen/trdp/HEAD/tree/(二) 源码编译下载源码解压过后,在根目录文件readme-makefile.txt有介绍源码的配置和编译方法。在trdp/config目录下可以看到包含在linux环境下的编译配置文件LINUX_config;执行”m
2020-08-07 17:07:01
7695
8
原创 CC2640R1学习经验总结
概述对于CC2640、CC26xx系列的BLE单片机,官网提供有丰富的例程和使用文档,如果你对BLE有一定的了解,完全可以直接上手。开发的步骤:学习资料收集–开发环境的搭建–例程的使用–应用编程学习资料收集软件SDK/IDE下载:TI官网产品–无线连接–低功耗蓝牙产品–设计和开发–SimpleLink软件–找到与之对应的SDK进行下载–开发工具–选择IDE开发工具(支持CCS和IAR两种编译器)–技术文档–下载你所需要的技术文档。开发环境搭建对于芯片的开发,官方提供了完整的文档,包括环境的安装
2020-08-04 10:39:31
404
原创 PDF英文文档免费翻译成中文
概述对于PDF的英文文档,如何免费转换成中文文档。网上有很多方法,我试了很多,几乎都要收费,免费的只能预留一部分。比如:迅捷PDF翻译中文,只给免费翻译文档前几页!现在的浏览器,几乎都支持网页翻译,那么利用这个功能,我们把pdf转化成html,用浏览器打开,且不是翻译成中文文献了。具有翻译功能浏览器(一)Google Chrome,打开英文的html过后直接翻译成了中文网页。google翻译,很吊。(二)360极速浏览器:安装一个插件,则可以翻译网页。PDF转HTML网上很多PDF转HT
2020-07-30 11:22:08
11798
原创 Wireshark找不到捕获接口的解决方法
安装完wireshark过后,在捕获选项里面一个捕获接口都没有。问题原因Win10兼容性问题导致。需要卸载软件自带的Winpcap,重新安装Win10Pcap解决方法下载并安装win10Pcap:http://www.win10pcap.org/download/注意:下载下来Win10Pcap后,在安装前先将Wireshark关掉,要不然安装过程中会报错。使用360软件卸载wir...
2020-04-14 13:37:02
4733
原创 嵌入式C语言面试总结
简介面试C语言嵌入式开发岗位,无论你是面试华为、美团、还是别的小公司,围绕的问题都差不多,只要做好准备,绝对心有成竹(问一句:成竹是谁?)。第一部分:C语言关键词的使用static作用:修饰函数和全局变量:限制作用域;修饰局部变量:数据放在静态数据区,类似于全局变量,但作用域仅为局部。volatile作用:volatile意为易变的,说明这个变量可能会意想不到的改变,优化器用到这个变量...
2020-03-25 12:26:45
1184
原创 Makefile基础
Makefile规则格式目标…:依赖文件集合命令1命令2…举例一将main.c input.c calu.c编译成目标文件main#Makefile举例objects = main.o input.o calu.omain:$(objects) gcc –o main $(objects)%.o:%.c gcc –c $<.PHONY:cleanclean: r...
2020-02-05 10:47:16
497
原创 linux驱动之platform设备驱动实验
概述platform机制:把硬件相关的代码(固定的,如板子的网卡、中断地址)和驱动(会根据程序作变动,如点哪一个灯)分离开来,即要编写两个文件:dev.c和drv.c(platform设备和platform驱动)platform会存在/sys/bus/里面,如下图所示, platform目录下会有两个文件,分别就是platform设备和platform驱动驱动的分离,引出了总线(bus)、...
2019-11-23 15:37:39
486
原创 linux驱动之ADC实验
概述ADC使用的是SOC自带的功能,一般SOC厂家已经把相应的驱动代码写好,我们只需要在设备树中使能该功能则可。在进行ADC读操作时,只需要了解对IIO子系统的使用操作,即可完成ADC的读取。基础知识(一) IIO子系统IIO(industrial I/O )子系统是专门用于ADC/DAC的内核子系统,Linux内核通过IIO框架把模数转换的功能集合在一起。加速度计、陀螺仪、电压测量、广电...
2019-11-23 12:46:18
3826
原创 Linux驱动之IIC实验(基于设备树编程)
概述I2C驱动分为两个部分:主机驱动(SOC的I2C控制器驱动),设备驱动(针对具体设备编写的驱动)。—和platform驱动相似。一般i2c控制器驱动SOC厂商已经写好了,我们只需要编写设备驱动。本实验基于IIC2端口读取温度芯片TMP1075(设备地址0x48,温度寄存器地址0x00,2字节)。基础知识(一)IIC读时序IIC读时序分为4大步,第一步时发送设备地址,第二步时发送...
2019-11-19 20:22:16
3543
2
原创 Linux驱动之中断实验(基于设备树编程)
概述Linux内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要像单片机那样进行复杂的寄存器配置。#基础知识(一) 中断号每个中断都有一个中断号,通过中断号区分不同的中断。中断号可以在芯片datasheet中查找到,比如GPIO的中断号,一般会在GPIO章节或者interrupt章节会有介绍, 搜索” Interrupt Sources”,或许你就...
2019-11-07 10:51:03
2071
原创 linux驱动之按键输入实验(基于系统自带gpio-keys.c驱动)
概述采用Linux自带的按键驱动gpio-keys.c,实现按键输入读取。与上一章实现led-gpio类似。修改设备树文件在根节点‘/’下创建key节点,节点名称为keys。节点内容如下(可参考别的平台的key节点编写):keys:{compatible = “gpio-keys”;key1{label = “volume-up”linux,code = <114>;...
2019-10-28 14:50:34
5215
1
原创 linux驱动之LED实验(基于系统自带leds-gpio.c驱动)
概述上一章中编写的设备树LED驱动,都是配置LED灯的GPIO寄存器,驱动方式和裸机没有区别。Linux是一个庞大而完善的系统,尤其是驱动框架,像GPIO这种最基本的驱动不可能采用“原始”的裸机驱动方式,否则就相当你买了一辆车,结果每天推着车去上班。基础知识(一)pinctrl子系统Linux内核提供了pinctrl和gpio子系统用于GPIO驱动,可以在leds-gpio.c中可以看到相...
2019-10-25 15:57:13
10851
嵌入式软件笔试面试题目大汇总.zip
2021-06-03
udpTest.zip
2019-09-03
FileZilla Server
2019-08-08
HDC1080DMBR.pdf.zip
2019-05-18
libjpeg实现YUV转JPEG源码(VS2013运行环境)
2019-02-23
Unix时间戳转北京时间 UTC时间转北京时间 C代码实现
2019-02-23
TDM软件及使用说明(结合notepad++)
2019-02-22
STM32音乐播放,把音频文件放入代码中,无需外部flash
2017-02-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人