![](https://img-blog.csdnimg.cn/cb8d077fc88445ea85905ed2216aa56f.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
校园期间项目
文章平均质量分 89
只为成为一名优秀的嵌入式软件工程师,paranoid-up-up-up
苦梨甜
嵌入式全栈ing
展开
-
libjpeg库使用实例细节分析
这段代码是一个使用libjpeg库进行JPEG文件解析的模块。以下是代码的主要功能和结构:MyErrorMgr结构体定义了自定义的错误管理器,用于处理libjpeg库的错误。isJPGFormat函数用于判断给定的文件是否为JPEG格式。它使用libjpeg库的函数来读取文件头并检查是否为有效的JPEG文件。CovertOneLine函数用于将从JPEG文件中提取的一行像素数据转换为可以在显示设备上使用的格式。根据输入和输出的像素位数,它将像素数据转换为24位、16位或32位的格式。原创 2023-06-27 16:08:42 · 838 阅读 · 0 评论 -
标准输入stdin与屏幕输入tslib实例细节分析
其他线程通过调用GetInputEvent函数获取输入数据,线程会在没有输入数据时进入休眠状态,直到输入模块的子线程读取到数据并唤醒它们。总结来说,该函数的作用是从标准输入中读取一个字符,并将输入事件的类型设置为标准输入,时间戳设置为当前时间。此外,还定义了一个名为 g_tTouchScreenOpr 的触摸屏输入模块结构体,并初始化了其中的成员,包括模块名称、设备初始化函数和获取输入数据函数等。GetInputEvent函数用于获取输入数据,它会使当前线程休眠,等待输入模块的子线程读取到数据后唤醒它。原创 2023-06-23 11:31:06 · 336 阅读 · 0 评论 -
FreeType使用实例细节分析
然后,函数计算 GBK 编码值的区位码。该函数的作用是利用 FreeType 库加载指定字符的字形图像,并提取其中的位图信息,包括位置、尺寸、像素位数、行间距和数据缓冲区。这段代码实现了字体管理器的功能,包括注册字体模块、显示支持的字体模块、获取指定字体模块、设置字符尺寸、获取字符尺寸、获取字符位图、设置字体模块信息和初始化字体模块等操作。然后定义了一些静态变量,包括文件描述符 g_iFdHZK,指向字库文件的内存映射指针 g_pucHZKMem,以及指向字库文件结尾的指针 g_pucHZKMemEnd。原创 2023-06-23 11:10:42 · 639 阅读 · 0 评论 -
socket编程应用案例详细分析
pthread_mutex_lock 和 pthread_mutex_unlock 函数用于获取和释放互斥锁,确保在访问共享资源之前和之后的临界区域被正确保护。g_tNetDbgSendConVar 是一个静态变量,被声明为 pthread_cond_t 类型,用于在发送线程和其他线程之间实现等待和唤醒的操作。g_tNetDbgSendMutex 是一个静态变量,被声明为 pthread_mutex_t 类型,用于在发送线程和其他线程之间实现互斥访问。线程首先进入休眠状态,等待被唤醒。原创 2023-06-20 21:33:02 · 630 阅读 · 0 评论 -
Linux下实现自己的printf函数
在函数内部,我们首先使用 va_start 宏初始化一个 va_list 对象,然后使用 vprintf 函数和该对象来输出格式化字符串和参数列表中的值。iNum = vsprintf(strTmpBuf, pcFormat, tArg):使用格式化字符串和可变参数列表将数据格式化到临时缓冲区strTmpBuf中,并返回格式化后的字符串长度。如果当前结构体的isCanUse标志为1,表示该结构体可用,则调用该结构体的DebugPrint函数打印调试信息,传入的参数为pcTmp。原创 2023-06-16 14:33:55 · 981 阅读 · 0 评论 -
POSIX文件I/O编程
POSIX是可移植操作系统接口的简写,英文全程是Portable Operating System Interface。最初由IEEE(Institute of Electrical and Electronics Engineers,IEEE)开发,目的是为了提高UNIX环境下的应用程序可移植性。实际上POSIX并不局限于UNIX,只要符合此标准的操作系统的系统调用是一致的,例如Linux和Microsoft Windows NT。POSIX是一组操作系统调用的规范,本节介绍其中的文件I/O编程规范。原创 2023-03-11 20:57:49 · 944 阅读 · 0 评论 -
ANSI C文件管理
本节重点讲解ANSI C文件库。包括文件指针的概念;文件和流之间的关系;文本和二进制文件;和文件的基本操作。ANSI的C标准文件库封装了文件的系统调用,为了提高效率还加入了文件缓冲机制,提供记录的方式读写文件,并且具有良好的可移植性和健壮性,是Linux C语言最基本的文件编程。原创 2023-03-11 20:51:26 · 405 阅读 · 0 评论 -
文件IO常用函数
在LINUX下,有着 一切皆文件的定义,所谓文件IO就是指文件的 输入和 输出。原创 2023-03-11 20:46:39 · 341 阅读 · 0 评论 -
xawtv涉及的vivid系统调用分析
/ 在队列里获得有数据的缓冲区 ret = __vb2_get_done_vb(q, &vb, b, nonblocking);// 获取已完成的缓冲区 // 把它从队列中删掉 list_del(&vb->queued_entry);15.for()ioctl(4, VIDIOC_QUERYCTRL查询属性,如亮度最大,最小值,默认值,对比度等。4.for(){ioctl(4, VIDIOC_ENUM_FMT列举出摄像头支持的格式}// 有那么多缓冲区,APP如何知道哪一个缓冲区有数据?原创 2023-05-07 18:53:17 · 703 阅读 · 0 评论 -
测试虚拟驱动vivi
安装自带vivid及依赖,这里先使用modprobr加载vivid,会将其依赖一并加载,然后再卸载vivid,最后加载上我们编译的vivid.ko。但是在正则表达式去搜索文件定义的时候发现vivid目录下所有文件都没有定义过,所以我直接选择进行出问题的地方进行注释。修改Makefile,也就是加入vivid-cec.o,因为如果不加入的话,会提示缺少符号。1.让VMWAER处于前台,接上USB摄像头,可以看到生成了/dev/video0。在这个网站创建新的sources.list。原创 2023-05-07 18:35:51 · 526 阅读 · 0 评论 -
vivid源码分析
/ 根据次设备号从数组中得到video_device。下面调用到vivid_fops中的v4l2_fh_open函数(硬件相关层的函数)在ctrl_handler里找到v4l2_ctrl,返回它的值。该数组在__video_register_device中设置。根据次设备号从数组中得到video_device。根据APP传入的cmd来获得、设置"某些属性"// 调用驱动程序的ioctl函数。以次设备号为下标存起来。原创 2023-05-04 22:34:57 · 503 阅读 · 0 评论 -
v4l2框架
vivid_create_instance创建设备实例。匹配后调用vivid_probe。原创 2023-05-04 22:27:42 · 703 阅读 · 0 评论 -
freetype用法
/ FreeType 库 FT_Face face;// 字体 int error;// 错误码 FT_Vector pen;// 绘制笔 FT_GlyphSlot slot;// 字形插槽 int i;// 循环计数器 FT_BBox bbox;// 字符串边界框 int line_box_ymin = 10000;// 行边界框最小 y 坐标 int line_box_ymax = 0;// 行边界框最大 y 坐标 int line_box_width;原创 2023-05-03 22:31:59 · 1360 阅读 · 0 评论 -
移植Zlib,Libpng,FreeType详细步骤
进入到 zlib 库的安装目录:头文件目录 include 以及库文件目录 lib。至此, zlib 库就已经编译好了,接下来我们需要把编译得到的库文件拷贝到开发板。进入到 libpng 安装目录同样包含了 bin、 include、 lib 这些目录。原创 2023-05-03 22:24:18 · 1108 阅读 · 1 评论 -
文字的显示
数字=>代表什么->显示为什么GBK国标拓展下列代码用不同编码方式保存utf-8.c ansi.cutf-8ansi源文件用不同的编码方式编写,会导致执行结果不一样。怎么解决?编译程序时,要指定字符集font_8x16.cinclude/uapi/linux/fb.h3.显示中文“中”和“A”show_font.c结果原创 2023-05-03 22:13:06 · 720 阅读 · 0 评论 -
手把手移植物联网项目到arm开发板笔记
首先我使用的交叉编译器为。原创 2023-03-27 20:37:20 · 756 阅读 · 0 评论 -
搭建Samba服务器
搭建Samba服务器是为了实现Linux共享目录之后,在Windows可以直接访问该共享目录。原创 2023-03-08 16:42:20 · 628 阅读 · 2 评论 -
进程系统调用
fork()执行后当前进程会被克隆一遍,克隆之后子进程会有一个与原来相同的代码,父进程与子进程之间是独立调度的,即操作系统独立调度父进程和子进程,先调度谁,后调度谁有一定随机性,此处先调度了父进程,父进程看到的是子进程的pid,3518,然后父进程打印自己的pid和ppid,父进程运行完之后进程结束了,操作系统接着调度子进程,调度子进程的时候,也从fork()返回,但子进程看到的pid是0,所以子进程打印else内容,然后打印自己的pid和ppid。在子进程中,这两个变量的值和地址与父进程相同。原创 2023-03-11 21:10:49 · 345 阅读 · 0 评论 -
正点原子阿尔法IMX6ULL开发板移植mjpg_streamer
mjpg-streamer 是一个命令行应用程序, 可通过网络将 JPEG 文件从网络摄像头流传输到各种类型的查看器, 例如浏览器, mplayer 等其他能够接收 MJPG 流的软件。–prefix=/home/alientek/tools/mjpg/install/: 为上步创建的文件夹路径, 根据实际填写。将.so 文件拷贝到开发板的/lib/目录下, mjpg_streamer 文件夹拷贝到开发板的/bin/目录下, www 拷贝。更据1中安装的MJPG 库目录来,自行修改,下同。原创 2023-03-14 15:14:11 · 559 阅读 · 0 评论 -
进程间通信IPC(共享内存,消息队列,信号灯)和信号的具体实现
常用的进程间通信方式• 传统的进程间通信方式无名管道(pipe)、有名管道(fifo)和信号(signal)• System V IPC对象共享内存(share memory)、消息队列(message queue)和信号量(semaphore)• BSD套接字(socket)当前目录下路径指定要加上“.”ftok (“./app”, ‘i’)才可以“./”才是当前路径,“/“根目录路径。原创 2023-03-14 15:32:55 · 208 阅读 · 0 评论 -
多线程具体实现
修改文件夹下所有文件的权限filename为要修改的文件夹名字。-R应该是表示递归修改filename文件夹下所有文件的权限。其实整个命令的形式是。原创 2023-03-14 20:12:52 · 426 阅读 · 0 评论 -
目录的操作
说明: readlink()会将参数 path 的符号连接内容存到参数 buf 所指的内存空间, 返回的内容不是以 NULL 作字符串结尾, 但会将字符串的字符数返回. 若参数 bufsiz 小于符号连接的内容长度,过长的内容会被截断. 执行成功则传符号连接所指的文件路径字符串, 失败则返回-1, 错误代码存于 errno.它包含以下字段:d_ino 是文件序列号,d_off 是目录文件开头到此目录项的偏移量,d_reclen 是此记录的长度,d_name 是以空字符结尾的文件名组件。原创 2023-03-21 10:44:50 · 205 阅读 · 0 评论 -
移植mjpg_streamer使其支持拍照功能
如果出现make: Nothing to be done for ‘all’.那么先清理掉之前编译的内容,然后再编译。拍照成功,连拍时,由于我的电脑性能,及其网络环境,连拍太卡,实际连拍一次拍10多张,我这因配置没能体现。拍照保存的照片位于/www/pice。重新打开一个终端来实现拍照功能。执行脚本文件start.sh。下面是修改之后的完整代码。原创 2023-03-18 13:20:06 · 233 阅读 · 1 评论 -
服务器boa移植
• ServerName:指定服务器的名称,当客户端使用gethostname + gethostbyname时返回给客户端。注意文件www,我的为根目录下,其中为网址界面的html文件,需要自行修改或编写。• DocumentRoot:HTML文件的根目录(也就是网站的目录)。• Group表示连接到服务器的客户端的组,可以是组名或GID。• User:连接到服务器的客户端的身份,可以是用户名或UID。• ScriptAlias:指定脚本路径的虚拟路径(cgi)。打开Ubuntu内的浏览器。原创 2023-03-22 10:27:40 · 501 阅读 · 0 评论 -
socket聊天室--socket的建立
这个套接字与 socket()函数返回的套接字并不同, socket()函数返回的是服务器的套接字(以服务器为例),而accept()函数返回的套接字连接到调用 connect()的客户端,服务器通过该套接字与客户端进行数据交互,譬如向客户端发送数据、或从客户端接收数据。所以,理解 accept()函数的关键点在于它会创建一个新的套接字,其实这个新的套接字就是与执行connect()(客户端调用 connect()向服务器发起连接请求)的客户端之间建立了连接,这个套接字代表了服务器与客户端的一个连接。原创 2023-03-06 21:27:50 · 413 阅读 · 0 评论 -
socket聊天室---sqlite3的简单使用
回调函数方法实现的代码,需要实现一个回调函数:callback。函数sqlite3_exec()在解析命令"select * from student" ,每获取到一行数据就会调用一次回调函数。准备sql语句,执行select语句或者要使用parameter bind时,用这个函数(封装 了sqlite3_exec)这个相当于ODBC的Command对象,用于保存编译好的SQL语句。在调用sqlite3_prepare后,使用这个函数在记录集中移动。取text类型的数据。取blob类型的数据。原创 2023-03-06 21:13:19 · 513 阅读 · 0 评论 -
电话号码管理--链表的简单使用
需要注意的是,该函数在释放内存时,必须保证链表中至少有一个节点。注意,该函数删除的是第一个匹配的节点,如果有多个节点匹配,则只删除第一个匹配的节点。删除操作首先将指针 ptr 指向需要删除的节点,然后将链表中该节点的前一个节点的 next 指针指向该节点的后一个节点,即删除该节点。接下来的代码是在链表的尾部插入新节点,它使用一个循环将指针 head 移动到链表的末尾,即指向最后一个节点。这段代码是一个函数,名称为 init,它接收一个指向 PHONE 指针的指针,用于指向一个链表的头节点。原创 2023-03-05 13:46:22 · 470 阅读 · 0 评论 -
使用git进行项目管理--git使用及其常用命令
git config --global user.name “lfp”git config --global user.email xxxxxxxxxx@qq.comgit init提交一个commitgit remote add origin https://gitee.com/qqparanoid/xxxxx-processing.gitgit push -u origin “master”git checkout commit61014620313577016c5cbc4b7ceb5f2ad8b006原创 2023-03-05 11:30:24 · 729 阅读 · 0 评论