量产工具——复习及改进(后附百问网课程视频链接)

news2024/11/27 2:23:41

目录

一、函数的使用

1.显示系统

 1.1 mmap函数

2.输入系统 

2.1 ts_setup()函数

2.2 ts_read()函数

2.3 socket()函数

2.4 bind()函数

2.5 recvfrom()函数

2.6 inet_aton()函数

2.7 sendto()函数

 2.8 pthread_create()函数

  2.9 pthread_cond_signal()函数

 2.10 pthread_mutex_lockl()函数

 3.文字系统

3.1 笛卡尔坐标系转换为LCD坐标系

3.2 atol()函数

二、错误记录

三、改进

3.1 按钮文字

3.2 支持配置文件的command

课程链接


一、函数的使用

1.显示系统

 1.1 mmap函数

void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
  • 入参
    • addr: 入参,如果这个地址为null那么内核将自己为你指定一个地址,如果不为null,将使用这个地址作为映射区的起始地址;
    • length: 映射区的大小(<=文件的大小);
    • prot: 访问属性,一般用PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE;
    • flags:这个参数是确定映射的更新是否对映射相同区域的其他进程可见,以及是否对基础文件进行更新;
    • MAP_SHARED: 共享此映射,映射的更新对映射相同区域的其他进程可见;
    • MAP_PRIVATE: 创建写时专用拷贝映射,映射的更新对映射的其他进程不可见,相同的文件,并且不会传递到基 础文件。 我们一般用MAP_SHARED,这两个权限是限制内存的,而不限制文件;
    • fd: 被映射的文件句柄;
    • offset: 默认为0,表示映射文件全部。偏移未知,需要时4K的整数倍。
  • 返回值
    • 成功:被映射的首地址;
    • 失败:MAP_FAILED (void *)-1。

2.输入系统 

2.1 ts_setup()函数


struct tsdev *ts_setup(const char *dev_name, int nonblock)
  • 入参
    • dev_name:指定了触摸屏的设备节点,当 dev_name 设置为 NULL 时, ts_setup()函数内部会读取TSLIB_TSDEVICE 环境变量, 获取该环境变量的内容以得知触摸屏的设备节点;

    • nonblock:表示是否以非阻塞方式打开触摸屏设备。

  • 返回值
    • 成功,返回一个 struct tsdev *指针, 指向触摸屏设备句柄;
    • 失败,将返回 NULL。

2.2 ts_read()函数

struct ts_sample {
    int x; //X 坐标
    int y; //Y 坐标
    unsigned int pressure; //按压力大小
    struct timeval tv; //时间
};
int ts_read(struct tsdev *ts, struct ts_sample *samp, int nr);
  • 入参
    • ts :指向一个触摸屏设备句柄;

    • samp:指向一个 struct ts_sample 对象;

    • nr :表示对一个触摸点的采样数

2.3 socket()函数

int socket(int domain, int type, int protocol);
  • 入参
    • domin : 用于指定一个通信域,这将选择将用于通信的协议族;

    • type:参数 type 指定套接字的类型;

    • protocol :参数 protocol 通常设置为 0,表示为给定的通信域和套接字类型选择默认协议。

  • 返回值
    • 成功,返回用于文件 I/O 的文件描述符;
    • 失败,会返回-1

2.4 bind()函数

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 入参
    • sockfd : 一个已打开的套接字的描述符;

    • addr:是一个指针,指向一个 struct sockaddr 类型变量,但是一般使用下面结构体;

      struct sockaddr_in {
       sa_family_t sin_family; /* 协议族 */
       in_port_t sin_port; /* 端口号 */
       struct in_addr sin_addr; /* IP 地址 */
       unsigned char sin_zero[8];
      };
      
      
    • addrlen:指定了 addr 所指向的结构体对应的字节长度。

  • 返回值
    • 成功,返回0;
    • 失败,返回-1

2.5 recvfrom()函数

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                 struct sockaddr *src_addr, socklen_t *addrlen);

  • 入参
    • sockfd:一个已打开的套接字的描述符;

    • buf:一个指针,指向用于存放接收到的数据的缓冲区;

    • len:缓冲区的大小(以字节为单位)。

    • flags:控制接收行为的标志,通常可以设置为0;

    • src_addr:一个指针,指向一个 sockaddr 结构,用于保存发送数据的源地址。

    • addrlen:一个值-结果参数。开始时,它应该设置为 src_addr 缓冲区的大小。当 recvfrom() 返回时,该值会被修改为实际地址的长度(以字节为单位)。

  • 返回值
    • 在成功的情况下,recvfrom() 返回接收到的字节数。
    • 如果没有数据可读或套接字已经关闭,那么返回值为0。
    • 出错时,返回 -1,并设置全局变量 errno 以指示错误类型。

2.6 inet_aton()函数

int inet_aton(const char *cp, struct in_addr *inp);
  • 入参
    • cp:网络主机地址ip(如192.168.1.10)为二进制数值;

    • inp:存储在struct in_addr结构中;

  • 返回值
    • 成功,返回非0;
    • 出错时,返回0。

2.7 sendto()函数

1 int sendto(int s, const void *buf, int len, unsigned int flags, 
2         const struct sockaddr *to, int tolen);
  • 入参
    • s:     socket描述符;

    • buf:UDP数据报缓存区(包含待发送数据);

    • len:  UDP数据报的长度;

    • flags:调用方式标志位(一般设置为0);

    • to:  指向接收数据的主机地址信息的结构体(sockaddr_in需类型转换);

    • tolen:to所指结构体的长度;

  • 返回值
    • 成功则返回实际传送出去的字符数;
    • 失败返回-1,错误原因会存于errno 中。

 2.8 pthread_create()函数

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);
  • 入参
    • thread:用于存储新线程标识符的变量;

    • attr:用于设置新线程属性的指针,通常可以传入NULL以使用默认属性;

    • start_routine:  新线程的入口函数,是线程执行的起点;

    • arg:传递给入口函数start_routine的参数.

  • 返回值
    • 若线程创建成功,返回0。
    • 若线程创建失败,返回非0的错误码。

  2.9 pthread_cond_signal()函数

int pthread_cond_signal(pthread_cond_t *cond);
  • 入参
    • cond:条件变量

  • 返回值
    • 成功:返回0;
    • 失败:返回非0。

 2.10 pthread_mutex_lockl()函数

int pthread_mutex_lock(pthread_mutex_t *mutex);
  • 入参
    •  mutex :是一个指向互斥锁变量的指针。

  • 返回值
    • 成功:返回0;
    • 失败:返回非0。

 3.文字系统

3.1 笛卡尔坐标系转换为LCD坐标系:

LCD_y = LCD垂直高 - 笛卡尔_y;
LCD_x = LCDx;

3.2 atol()函数

long atol(const char *nptr);

函数说明

atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。

返回值

返回转换后的长整型数。

附加说明

atol()与使用strtol(nptr,(char**)NULL,10);结果相同。

二、错误记录

对于while循环中的赋值要谨慎,不然就会出现段错误

上面的代码中

g_DispDevs = pTmp;

应该为

g_DispDefault = pTmp;

三、改进

3.1 按钮文字

        计算文字大小

1.找出name最长的Button

1.以font_size = 100,算出它的外框

1.把文字的外框缩放为Button的外框

1.反算出font_size,只取0.80,避免文字过于接近边界

        计算文字外框

static int FreetypeGetStringRegionCar(char *str, PRegionCartesian ptRegionCartesian)

         算出第一个字符的origin

 

3.2 支持配置文件的command

        sprintf()函数:用来作格式化的输出。

#include <stdio.h> //头文件
int sprintf(char* str, const char* format, ...);
  • 入参
    •  str:指向要写入的字符串的指针。

    • format:包含格式控制符的字符串,用于指定输出的格式。

    • ...:可变参数列表,根据格式化字符串中指定的格式进行输出

 

 system()函数

        在Linux系统中,system()是一个标准C库函数,用于执行一个系统命令或者shell脚本。调用该函数之后,程序将启动一个新的Shell进程来运行指定的命令,并且等待命令执行完毕返回结果。

int system(const char *command)
  • 入参
    •  command:要执行的命令

课程链接

8-3_改进_支持配置文件的command_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1it4y1Q75z/?p=33&vd_source=3a9afee9fda50350a1c881b4325e007d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思科路由器的基本配置1

#路由技术基础# #路由器的基本配置1# #1调整超级终端的参数 #2退出配置向导&#xff0c;输入“NO”即可进入正常配置方式 #3路由器的模式切换 Router> &#xff01;进入用户模式 Router>enable &#xff01;进入特权模…

opencv-python实战项目一:获取鼠标框选区域的颜色

文章目录 一&#xff1a;简介二&#xff1a;框选区域选择颜色方案三、算法实现步骤3.1 按鼠标事件截取图像3.2将图像模糊后转化为hsv并求均值3.3 判断hsv处于何种颜色 四&#xff1a;整体代码实现五&#xff0c;效果: 一&#xff1a;简介 在计算机视觉领域&#xff0c;颜色检测…

19-ESP32-C3加大固件储存区

1默认编译情况。 2、改flash4M。ESP-IDF Partition Table Editor修改。 3、设置输入Partition Table 改自定义.CSV。保存。 4、查看命令输入Partition Table Editor打开-分区表编辑器UI。按图片增加。 nvs,data,nvs,0x9000,0x6000,, phy_init,data,phy,0xF000,0x1000,, factory…

计算机毕业设计Hadoop+Hive居民用电量分析 居民用电量可视化 电量爬虫 机器学习 深度学习 大数据毕业设计 Spark

《Hadoop居民用电量分析》开题报告 一、研究背景与意义 能源问题在全球范围内一直是热点议题&#xff0c;尤其是随着居民生活水平的提高和城市化进程的加快&#xff0c;居民用电量急剧增长&#xff0c;对电力系统的稳定运行和能源管理提出了更高要求。如何科学合理地管理和分…

Hive3:识别内部表、外部表及相互转换

一、识别方法 查看内部表信息 desc formatted stu;查看外部表信息 desc formatted test_ext1;通过Table Type对应的值&#xff0c;我们可以区分外部表和内部表。 二、相互转换 内部表转外部表 alter table stu set tblproperties(EXTERNALTRUE);外部表转内部表 alter ta…

PCIe学习笔记(21)

读请求的数据返回&#xff08;Data Return for Read Requests&#xff09; •针对内存读取请求的单个完成可能提供少于请求的全部数据量&#xff0c;只要对于给定请求的所有完成在组合起来时返回了读取请求中请求的数据量。 ◦不同请求的完成不能合并。 ◦I/O和Configuratio…

Qt QCustomPlot 图形库详解

文章目录 原文1. 下载qcustomplot.h与qcustomplot.cpp后,将代码文件拷贝到本地工程,并添加到工程项目2. 看到文件后就是添加成功了3. 在界面中拖拽一个Widget控件,选中并右键选中“提升为”,将原来的Widget控件已成为一个带坐标的 CustomPlot 控件4. 添加printsupport原文 …

【Ai学习】一个技巧,解决99%Comfyui报错!

前言 comfyui以极高灵活度及节点化工作流&#xff0c;深受AI绘画者追捧&#xff0c;每当新的模型开源&#xff0c;comfyui都是最先进行适配。 comfyui高度兼容性及灵活性带来丰富强大的扩展&#xff08;插件&#xff09;生态&#xff0c;同时也带来一系列插件安装的问题&…

Python程序结构

模块 Module 定义&#xff1a;包含一系列数据、函数、类的文件&#xff0c;通常以.py结尾。 作用&#xff1a;让一些相关的数据&#xff0c;函数&#xff0c;类有逻辑的组织在一起&#xff0c;使逻辑结构更加清晰。 有利于多人合作开发。 导入 import 语法&#xff1a; im…

【目标检测实验系列】YOLOv5/YOLOv8改进:CARAFE轻量级上采样算子,聚合上下文信息,助力模型涨点(文内附源码)

1. 文章主要内容 本篇博客主要涉及轻量级上采样算子CARAFE&#xff0c;将YOLOv5/YOLOv8模型中最近邻上采样算子改为CARAFE算子&#xff0c;使模型聚合上下文信息&#xff0c;助力模型涨点。 2. 简要概括 论文地址&#xff1a;CARAFE论文地址 论文Github代码&#xff1a…

Go语言 Defer(延迟)

本文主要内容为Go语言中defer(延迟)介绍及应用文件读取使用defer的示例。 目录 定义 应用场景 代码示例 改为匿名函数 总结 定义 延迟&#xff1a;关键字&#xff0c;可以用于修饰语句、函数&#xff0c; 确保这条语句可以在当前栈退出的时候执行。 应用场景 1.一般用于…

【leetcode】特殊数组I【(炒鸡)简单】

好像这题没啥子好说的欸&#xff0c;那就祝点进来的友友今天有好事发生叭~ AC代码见下&#xff1a; class Solution { public:bool isArraySpecial(vector<int>& nums) {for(int i1; i<nums.size(); i)if(nums[i]%2 nums[i-1]%2) return false;return true;} }…

如何妙用哈希表来优化遍历查找过程?刷题感悟总结,c++实现

先上题目 题目链接&#xff1a;题目链接 这题我最先想到的就是前缀和a&#xff0c;构造好了以后就遍历每一个[l,r]数组&#xff08;满足题目要求的连续区间数组&#xff09;&#xff0c;奈何倒数第二个样例时间超限 先给出原思路代码 class Solution { public:int subarray…

网络如何发送一个数据包

网络如何发送一个数据包 网络消息发送就是点一点屏幕。 骚瑞&#xff0c;这一点都不好笑。&#xff08;小品就是我的本质惹&#xff09; 之前我就是会被这个问题搞的不安宁。是怎么知道对方的IP地址的呢&#xff1f;怎么知道对方的MAC呢&#xff1f;世界上计算机有那么多&…

top250的电影

本次的电影排行来源于豆瓣。材料仅用于自身学习和记录自己学习过程 使用python中的requests、BeautifulSoup、xlwt&#xff0c;三者需要提前下载好。。 预处理&#xff1a; url&#xff1a;反应网页变化 其中start后面的数字变化每次加25&#xff0c;对应一页&#xff0c;故…

用exceljs和file-saver插件实现纯前端表格导出Excel(支持样式配置,多级表头)

exceljs在Jquery&#xff08;HTML&#xff09;和vue项目中实现导出功能 前言Jquery&#xff08;HTML&#xff09;中实现导出第一步&#xff0c;先在项目本地中导入exceljs和file-saver包第二步&#xff0c;封装导出Excel方法&#xff08;可直接复制粘贴使用&#xff09;第三步&…

JJ音乐,听歌自由!

林俊杰&#xff0c;这位才华横溢的音乐才子&#xff0c;用他的音符编织了一个又一个令人陶醉的梦幻世界。作为他的音乐爱好者&#xff0c;每一次倾听都是一次心灵的旅程。 他的歌声仿佛有一种魔力&#xff0c;能够穿透灵魂。从《江南》的诗意浪漫&#xff0c;到《不为谁而作的歌…

探索树莓派Pico 2:新一代RP2350芯片引领的微型开发革命

Raspberry Pi Pico 2 是由树莓派基金会推出的微处理器开发板&#xff0c;作为Pico系列的最新成员&#xff0c;它在原有的基础上进行了多项改进和扩展。这款开发板搭载了全新的RP2350芯片&#xff0c;具有更强大的处理能力和更多的功能特性。 1. Raspberry Pi Pico 2的特性和规格…

使用CUbeMX配置STM32F103C8T6 CRC校验

一、CubeMX配置 1.配置RCC 2.配置SYS 3.启用CRC校验 二、Keil添加程序 1.main.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body*******…

LVGL——(4)标签控件

文章目录 一、介绍二、用法1、创建2、显示文本2.1 直接设置要显示的文本2.2 格式化给定要显示的文本2.3 在 label 中进行换行 3、改变字体大小4、长模式5、文本选择6、文本对齐方式7、非常长的文本8、显示内置图标字体9、事件处理 三、拓展1、修改文本颜色1.1 Palette&#xff…