- 博客(59)
- 资源 (2)
- 收藏
- 关注
原创 电子量产工具——5.UI系统
电子量产工具——5.UI系统文章目录电子量产工具——5.UI系统软件总框架一、数据结构抽象1.1 框架1.2 代码 ui.h二、按键编程2.1 框架2.2 代码 botton.c2.3 代码 在disp_manager.c增加函数2.4 计算在LCD中 设计的按钮且 如何将文字显示在按钮正中间三、测试代码 ui_test.c四、总结软件总框架一、数据结构抽象1.1 框架1.2 代码 ui.hui.h#ifndef _UI_H#define _UI_H#include <
2022-04-07 15:39:30 480
原创 电子量产工具——4.文字系统
电子量产工具——4.文字系统文章目录电子量产工具——4.文字系统软件总框架一、数据结构抽象1.1 文字系统:数据结构抽象1.2 能支持复杂的Freetype,就能支持其他字1.3 文字系统:描述一个文字的位图1.4 文字系统:描述一个字库操作1.5 代码 font_manager.h二、实现freetype1.框架2.代码freetype.c三、文字管理1. 框架2.代码 font_manager.c四、测试代码 font_test.c总结软件总框架一、数据结构抽象1.1 文字系统:数据结构抽
2022-04-06 00:27:32 611
原创 3输入系统_环形缓冲区的实现
可参考http://blog.csdn.net/wanxiao009/article/details/5519514 环形缓冲区是嵌入式系统中十分重要的一种数据结构,比如在一个视频处理的机制中,环形缓冲区就可以理解为数据码流的通道,每一个通道都对应着一个环形缓冲区,这样数据在读取和写入的时候都可以在这个缓冲区里循环进行,程序员可以根据自己需要的数据大小来决定自己使用的缓冲区大小。 环形缓冲区,顾名思义这个缓冲区是环形的,那么何谓环形这个意思也很好理解,就是用一个指针去访问该缓冲区的...
2022-04-03 23:12:31 361
原创 电子量产工具——3-6~~~8输入系统_输入管理
电子量产工具——3-6~~~8输入系统_输入管理框架——环形缓冲区——代码测试文章目录电子量产工具——3-6~~~8输入系统_输入管理框架总软件一、输入管理框架二、增加input模块代码(input_manager.c)2.1各个功能2.2各个模块简单讲解三、引出 环形缓冲区 概念3.1增加环形缓冲区代码四、对输入管理框架 进行测试 (input_test.c)五、总结框架总软件一、输入管理框架在input模块增加一个 input_manager.c 进行管理二、增加input模块代码
2022-04-03 22:51:34 1275
原创 电子量产工具——3-5输入系统_网络输入编程单元测试
电子量产工具——3-3输入系统_触摸屏单元测试文章目录电子量产工具——3-3输入系统_触摸屏单元测试框架总软件一、触摸屏单元测试二、触摸屏单元测试1.在netinput.c内增加测试代码 main函数2.增加客户端测试client.c三、总结框架总软件一、触摸屏单元测试二、触摸屏单元测试1.在netinput.c内增加测试代码 main函数#if 1int main(int argc, char **argv){ InputEvent event; int ret; g_t
2022-04-02 16:14:47 1303
原创 电子量产工具——3-4输入系统_网络输入编程
电子量产工具——3-4输入系统_网络输入编程文章目录电子量产工具——3-4输入系统_网络输入编程框架总软件一、网络输入编程二、增加input文件内代码1.netinput.c三、总结框架总软件一、网络输入编程二、增加input文件内代码1.netinput.cnetinput.c#include <input_manager.h>#include <sys/types.h> /* See NOTES */#include <sy
2022-04-02 15:21:36 379
原创 电子量产工具——3-3输入系统_触摸屏单元测试
电子量产工具——3-3.输入系统_触摸屏单元测试文章目录电子量产工具——3-3.输入系统_触摸屏单元测试框架总软件一、触摸屏单元测试二、touchscreen.c三、增加 main函数测试代码框架总软件一、触摸屏单元测试二、touchscreen.ctouchscreen.c#include <input_manager.h>#include <tslib.h>#include <stdio.h>static struct tsdev *g_t
2022-04-02 14:36:56 634
原创 电子量产工具——3-2输入系统_触摸屏编程
电子量产工具——3-2输入系统_触摸屏编程文章目录电子量产工具——3-2输入系统_触摸屏编程框架总软件一、触摸屏编程二、增加input代码1.touchscreen.c总结框架总软件一、触摸屏编程二、增加input代码1.touchscreen.ctouchscreen.c#include <input_manager.h>#include <tslib.h>static struct tsdev *g_ts;static int Touchsc
2022-04-01 17:13:21 375
原创 电子量产工具——3-1输入系统_数据结构抽象
电子量产工具——3-1输入系统_数据结构抽象文章目录电子量产工具——3-1输入系统_数据结构抽象软件总框架一、输入系统:1.数据结构抽象2.input_manage.h总结软件总框架一、输入系统:1.数据结构抽象2.input_manage.hinput_manage.h#ifndef _INPUT_MANAGER_H#define _INPUT_MANAGER_H#define INPUT_TYPE_TOUCH 1#define INPUT_TYPE_NET 2t
2022-04-01 16:04:14 578
原创 电子量产工具——2-4显示系统_单元测试
电子量产工具——2-4显示系统_单元测试文章目录电子量产工具——2-4显示系统_单元测试软件总框架一、单元测试:规范代码结构、添加测试程序二、代码1.display(有两个 disp_manager.c和framebuffer.c)2.include(disp_manager.h)3.unittest(测试文件disp_test.c)总结软件总框架一、单元测试:规范代码结构、添加测试程序二、代码1.display(有两个 disp_manager.c和framebuffer.c)disp
2022-03-31 23:12:01 1248
原创 电子量产工具——2-3显示系统_显示管理
电子量产工具——2-3显示系统_显示管理文章目录电子量产工具——2-3显示系统_显示管理软件总框架一、显示管理二、1.framebuffer.c2.disp_manager.h3.disp_manager.c总结软件总框架一、显示管理disp_manager.c的作用////////////////////////////1.承上启下2.下面各个模块把DispOpr注册进来3.上面选择某个模块4.还提供一些函数,比如PutPixel二、1.framebuffer.cfra
2022-03-31 17:00:57 1068
原创 电子量产工具——2-2显示部分_Framebuffer编程
电子量产工具——2-2显示部分_Framebuffer编程文章目录电子量产工具——2-2显示部分_Framebuffer编程软件总框架一、使用场景二、显示系统编程1.数据结构抽象2.Framebuffer编程三、总结软件总框架一、使用场景二、显示系统编程1.数据结构抽象抽象出两个结构体:一个显示结构体一个更新结构体disp_manager.h#ifndef _DISP_MANAGER_H#define _DISP_MANAGER_Htypedef struct Regio
2022-03-31 00:04:12 1061
原创 电子量产工具——2-1显示部分_数据结构抽象
电子量产工具——2-1显示部分_数据结构抽象软件总框架一、使用场景1.上层APP在这个buffer中绘制图片2.可以更新某个区域,比如“按钮2”然后把该区域Flush到LCD或者WEB上二、代码disp_manager.h#ifndef __DISP_MANAGER_H#define __DISP_MANAGER_Htypedef struct Region{ int iLeftUpX; int iLeftUpY; int iWidth; int iHeigh;}Regi
2022-03-30 23:10:09 208
原创 线程(一) 对线程自身API相关的使用
线程概念等等示例1:创建一个简单的线程pThdemo1.c#include <stdio.h>#include <pthread.h>void *func1(void *arg){ printf("t1:%ld thread is create\n",(unsigned long)pthread_self()); printf("t1:param is %d\n",*((int *)arg));}int main()
2021-04-05 15:21:21 144
转载 进程间通信(五)信号量
信号量信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。1、特点 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。 支持信号量组。 2、原型最简单的信号量是只能取 0 和 1 的变量,这也是信号量最.
2021-04-05 13:59:22 378
转载 进程间通信(四)信号 入门signal&kill 高级sigaction&sigqueqe
Linux 信号(signal)对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了 ctrl+c 来中断程序,会通过信号机制停止一个程序。信号概述 信号的名字和编号: 每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。 信号定义在signal.h头文件中,信号名都定义为正整数。 具体的信号名称可以使用kill -l来查看信号的名字以及序号,信号是
2021-04-05 12:12:40 360
原创 进程间通信(三)共享内存 shm系列函数
共享内存共享内存(Shared Memory),指两个或多个进程共享一个给定的存储区。1、特点1. 共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。2. 因为多个进程可以同时操作,所以需要进行同步。3. 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。2.原型1 #include <sys/shm.h>2 // 创建或获取一个共享内存:成功返回共享内存ID,失败返回-13 int shmget(key_t key, siz.
2021-04-03 16:42:45 673
转载 进程间通信(二)消息队列 msg系列函数 key的ftok函数
消息队列消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标识。1、特点 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。 如何创建一个新的消息队列1.B程序如何加消息队列2.A程序如何从队列拿到消息A B 使用同一个队列通信程序A .
2021-04-03 15:22:20 674
转载 进程间通信(一)管道的pipe函数 FIFO的mkfifo函数
进程间通信进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、无名管道一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。1、特点:它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
2021-04-03 12:07:11 1917
原创 进程(五)system函数 popen函数
一、system函数system()函数的返回值如下:成功,则返回进程的状态值;当sh不能执行时,返回127;失败返回-1;为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作:1.fork一个子进程;2.在子进程中调用exec函数去执行command;3.在父进程中调用wait去等待子进程结束。 对于fork失败,system()函数返回-1。 如果exec执行成功,也即command顺利执行完毕,则返回command通过e.
2021-03-20 20:53:08 733
原创 进程(四)exec函数
一、为什么要用exec族函数,有什么用(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程种是常见的——父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。(2)一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec二、exec族函数函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。.
2021-03-20 20:07:46 3641
原创 进程(三)vfork函数 僵尸 孤儿
1.vfork创建进程vfork函数 也可以创建进程,与fork有什么区别关键区别一:vfork直接使用父进程存储空间,不拷贝。关键区别二:vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。如果使用fork调用 while(1)死循环 让父子进程一直争夺cpu资源 有可能一人一次 也有可能是一个人一直争到vforktest9.c#include <stdio.h>#include <sys/types.h>#includ.
2021-03-20 16:49:55 267
原创 进程(二)fork函数
使用fork函数创建一个进程pid_t fork(void);fork函数调用成功,返回两次返回值为0, 代表当前进程是子进程返回值非负数, 代表当前进程为父进程调用失败,返回-1
2021-03-20 13:01:57 367
原创 进程(一)进程概念
问1.什么是程序,什么是进程,有什么区别?答1:程序是静态的概念,gcc xxx.c -o pro 磁盘中生成的pro文件,叫做程序进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程问2.如何查看系统中有哪些进程?a.使用ps指令查看实际工作中,配合grep来查找层序中是否存在某一个进程 ps -aux显示全部进程 ps -aux|grep 想要的进程名 (其实就是把ps -aux显示全部进程 放进一个管道里再用grep去过滤 找到 想要的进程名) .
2021-03-17 21:38:35 149
原创 标准C库对文件操作的引入 (二)((一)的补充+fput、fget、feof)
对上一节做的补充f_seriesnewagain9.c #include <stdio.h>#include <string.h>int main(){// FILE *fopen(const char *pathname, const char *mode); FILE *fp; char *str = "ganboss is very handsome"; char readBuf[128] = {
2021-03-17 20:41:14 194
转载 标准C库对文件操作的引入 (一)(总结open与fopen的区别)+实现代码
1. 来源从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别:open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描述符表里的索引。 fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api。返回的是一个指向文件结构的指针。 PS:从来源来看,两者是有千丝万缕的联系的,毕竟C语言的库函数还是需要调用系统API实现的。 2. 移植性这一点从上面的来源就可以推断出来,`fope...
2021-03-16 21:22:08 204
原创 Linux文件 系统编程(二)
对比vim 代码退出 :qall 或者 两次:wq文件操作应用之实现cp指令实现cp0 1 2 = 3个参数 argccp src.c des.cargv[0] argv[1] argv[2] = argv[]1.C语言参数 ./a.out 2.思路 a.打开src.c b.读src到buf c.打开...
2021-03-16 21:15:47 149
原创 Linux 文件 系统编程(一)
打开 /创建文件man 2 openopen的系统调用系统调用open的作用是打开一个文件,并返回这个文件的描述符。简单地说,open建立了一条到文件或设备的访问路径。如果操作成功,它将返回一个文件描述符,read和write等系统调用使用该文件描述符对文件或设备进行操作。这个文件描述符是唯一的,他不会和任何其他运行中的进程共享。如果两个程序同时打开一个文件,会得到两个不同的问价描述符。如果同时对两个文件进行操作,他们各自操作,互补影响,彼此相互覆盖(后写入的覆盖先写入的...
2021-03-15 21:26:04 249
原创 stm32 超声波模块 原理 实现测距 +舵机使用
超声波传感器 原理 及其功能超声波测距步骤HC_SR04.c#include "stm32f10x.h" // Device header#include "SysTick.h"#include "HC_SR04.h"extern uint16_t mscount = 0; //extern 让main函数也能使用这里这个void HC_SR04(void){ GPIO_InitTypeDef GPIO_HC_SR04ini.
2021-03-10 19:37:16 2437 1
原创 stm32 系统定时器 SysTick
系统定时器原理以及结构系统定时器的时间计算SysTick结构体SysTick固件库函数SysTick中断优先级SysTick应用1.编写一个us延时的函数2.编写一个ms延时的函数SysTick.c#include "stm32f10x.h" // Device header#include "SysTick.h"void ms_delay(uint32_t ms){ uint32_t i; S..
2021-03-10 13:46:00 269
原创 stm32 定时器输出PWM原理及工作原理+控制舵机
1.PWM的工作原理2.PWM的内部运作机制3.PWM的模式模块一 边沿对齐模式模块二 中央对齐模式4.自动加载的预加载寄存器5.定时器输出PWM结构体讲解6.定时器输出PWM库函数讲解定时器输出PWM+控制舵机按步骤去配置motor.c#include "stm32f10x.h" // Device header#include "motor.h"void motor_co..
2021-03-09 23:17:52 4284 1
原创 stm32通用定时器结构体函数+定时器实现led闪烁
tim.c#include "stm32f10x.h" // Device header#include "tim.h"void tim_config(void){ TIM_TimeBaseInitTypeDef TIMinitStructure;//2.配置定时器时钟结构体 NVIC_InitTypeDef NVICinitStructure;//3.开启定时器中断,配置中断结构体 RCC_APB1PeriphClock...
2021-03-09 12:13:32 952
原创 串口 stm32 实现中断接收 打开板子上的led灯
在usart.c上增加配置NVIC优先级中断控制器 NVIC_InitTypeDef Nvic_init; //misc.h NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置NVIC中断组//3.配置NVIC中断控制器 在misc.h里 Nvic_init.NVIC_IRQChannel = EXTI1_IRQn; //= 配置在启动文件里 //中断通道 Nvic_init.NV...
2021-03-07 11:55:35 572
原创 串口 重定向printf串口发送stm32
把所有调用串口函数 全放到串口模块来只需要在主函数调用就行usart.c#include "stm32f10x.h" // Device header#include "usart.h"#include "stdio.h"void Usart_Init(void){ //2. 配置GPIO的结构体 GPIO_InitTypeDef GpioInitStructure; //初始化GPIO结构体命名 USART_InitTypeDef Usart.
2021-03-06 21:46:33 188
原创 串口 电脑接收stm32传来的字符
usart串口模块usart.c#include "stm32f10x.h" // Device header#include "usart.h"void Usart_Init(void){ //2. 配置GPIO的结构体 GPIO_InitTypeDef GpioInitStructure; //初始化GPIO结构体命名 USART_InitTypeDef UsartInitStructure;//初始化USART结构体命名 //1. 配置时.
2021-03-06 16:30:29 507
原创 stm32的外部中断 震动感应 控制 继电器
shake.c#include "shake.h"#include "stm32f10x.h" // Device headervoid Shake_Init(void){ GPIO_InitTypeDef Shake_init; //1.打开我们的GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //2.配置GPIOA1的配置 Shake_init.GPIO_Mode..
2021-03-05 22:37:01 474
原创 Linux 基于C语言 调用OCR算法实现人脸识别或者车牌识别
通过识别照片判断是否为同一人1.借助工具 1.注册登录 2.选择人脸识别 3.1毛钱购买 2.代码测试1.借助工具面部识别靠自己是很做成的,故我们借助一些工具,我们利用翔云智能平台,百度搜索翔云(因为翔云便宜一些。。。)1.注册登录进入后,上方选项栏选择价格与购买2.选择人脸识别右侧选择人脸识别,以后若有其他需要亦可使用其他3.1毛钱购买第一次1毛钱(便宜吧。。。)加入购物车,右侧购车内进行购买完成后,再次选择上方选项栏的产品,选择人脸识别可以.
2021-01-31 12:00:23 1071
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人