- 博客(32)
- 收藏
- 关注
原创 【windows搭建lvgl模拟环境(一)之VSCode】
通过在windows搭建LVGL模拟环境方便UI界面开发和调试,后续只需将相关的代码移植到项目中即可,方便调试,PC上支持下列模拟器:本文说明搭建模拟器环境,分别采用:VScode + LVGL 8.3源码codeblock + LVGL 9源码根据项目中LVGL的版本进行选择方法。
2025-03-26 15:16:03
720
原创 【python】创建tcp连接发送数据存入数据库
使用账号 debian-sys-maint 账号登录mysql密码为 debian.cnf 中password 值,再切换到mysql的database;,方便后期进行其他数据库的操作,都将对数据库的操作放到这个文件中。这里需注意mysql的版本号,可切换到另一窗口进行版本号查询。因为好久没登录,忘记密码,在网上搜索了很多,记录下可用的。之后输入密码后回车,则显示登录成功,如下图所示。单独建一个python文件。之后输入quit退出即可。修改root账号密码。这里我们就创建好表;
2024-08-20 17:02:06
533
原创 【unittest】TestSuite搭建测试用例一
TestRunner是一种测试执行过程管理平台或工具,它主要用于执行测试套件(TestSuite)中的测试用例(TestCase),并管理和跟踪测试过程。异常,指出测试失败,并显示预期值和实际值,以便开发者能够快速定位和修复问题。如果在测试中,你期望某个表达式的结果与某个特定的值相等,你可以使用。这有助于你将相关的测试用例分组,例如,你可以将所有与数据库交互的测试用例放在一个。可以看作是一个独立的测试模块,你可以在不同的测试场景或测试阶段中重用它们。,你可以创建多个层级的测试集,并在需要时运行特定的层级。
2024-07-31 16:05:21
976
原创 【线程系列之五】线程池介绍C语言
首先,定义一个包含线程池所需所有信息的结构体,如线程数组、任务队列、互斥锁、条件变量等。4// 任务队列节点void* arg;} task_t;// 线程池结构体// 线程数组// 保护任务队列的互斥锁// 任务队列的条件变量bool stop;// 线程池停止标志// 任务队列头指针// 任务队列尾指针// 当前活跃线程数// 最大活跃线程数(可配置)
2024-07-16 16:25:21
1418
3
原创 【线程系列之四】信号量介绍
如果信号量的值大于0,则将其减1,表示有一个资源被占用,线程或进程可以继续执行。如果信号量的值为0,则线程或进程将被阻塞,直到信号量的值大于0。当线程或进程完成对资源的访问后,它会执行V操作,将信号量的值加1,表示释放了一个资源。如果有其他线程或进程因为信号量的值为0而被阻塞,那么其中一个(或多个,取决于具体的实现)将被唤醒以继续执行。创建的信号量是未命名的,实际上在多个进程间共享这样的信号量需要其他机制,如通过共享内存映射)。然而,在更复杂的场景中,信号量的值可能会因为其他线程或进程的操作而改变。
2024-07-12 15:10:30
1026
原创 【线程系列之三】条件变量介绍
(Condition Variables)是并发编程中用于线程同步的一种机制,它通常与互斥锁(Mutex)一起使用,以允许线程以某种条件为基础来挂起(阻塞)和唤醒(继续执行)。在上述的生产-消费者模型中存在一个问题,及buffer最终会变为0,生产者线程在生产了10个产品后就结束了,而消费者线程则在一个无限循环中运行,不断尝试消费产品。在等待期间,会释放与条件变量关联的互斥锁,当线程被唤醒后重新获取互斥锁。(虽然在这个特定情况下可能不是必需的,因为消费者可能已经在等待)来唤醒可能还在等待的消费者线程。
2024-07-09 16:23:25
1130
原创 【线程系列之二】线程锁之互斥锁介绍
公平的互斥量会按照线程请求锁的顺序来授予锁,从而避免了饥饿现象(即某个线程长时间得不到锁的情况)。:互斥量保证在任何时候,只有一个线程可以持有锁并访问受保护的资源。:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。死锁是指在执行过程中,两个或两个以上的进程或线程由于竞争资源或彼此通信而阻塞,导致无法继续执行的情况。
2024-07-09 15:38:01
2434
原创 tmux安装及配置
安装完毕后可通过.tmux.conf配置自己常用的快捷键,下列为个人习惯的.tmux.conf文件配置。若在Ubuntu系统则可使用下列指令进行安装。或使用git进行安装。
2024-05-27 15:01:44
550
原创 vimrc配置
之前因为电脑重装了,只备份了之前vimrc的配置文件,今天在使用的时候就是tagbar和NERDTree一直不生效,下列是解决方法,或将我已打包好的.vim文件夹和.vimrc拷贝进去,即可使用。下列为个人习惯.vimrc的配置文件,若安装vim完毕后无.vimrc,可自己创建。用vim打开: vim tagbar.vmb。该网站为下载地址,下载 tagbar.vmb。底行模式输入:so %
2024-05-27 14:42:26
357
原创 git的密钥生成及git添加
git的id_rsa.pub生成,只需要在git bash的命令行输入以下代码即可。之后就一直回车就好,就会生成id_rsa.pub,在.ssh的文件夹下。your_emai为你在github上的邮箱。
2024-04-28 15:05:39
1037
原创 python 编写的各种常用工具【持续优化ing】
python 编写的crc校验工具、进制转换、hex转字符串、base64编码解码工具【持续优化ing】
2024-04-11 17:19:43
512
1
原创 数据结构笔记(二)循环单链表
而是指向链表的头节点,形成一个环状结构,如下图所示。这样一来,从任何节点出发都可以遍历整个链表。在图的遍历中,可以使用其进行深度优先搜索或广度优先搜索。可以解决单链表无法解决的问题,例如寻找倒数第i个节点等。在栈和队列的实现中,可以使用循环单链表进行存储和管理。缺点是实现相对复杂,需注意循环边界条件和指针的维护。其插入和删除的操作时间复杂度为O(n),比单链表高。在树形结构的遍历中,可以使用其进行层级遍历。循环单链表是一种特殊的单向链表,
2024-02-29 17:35:59
289
原创 HTML学习笔记
h1 > 标题一 < h2 > 标题二 标题一 < h2 > 标题二 < h1 > 标题一 < h2 > 标题二 标题一 < h2 > 标题二 ps:标题标签只适用于标题,不要为了生成粗体/大号文本使用标题。
2024-01-02 15:23:05
460
原创 git常用命令
git常用命令初始化gitgit init 创建一个新的本地存储库git config --global user.name "名字"git config --global user.email "邮箱"git clone ssh://user@domain.com/repo.git 克隆现有存储库查看本地变化git status 显示工作目录和暂存区的状态git add <file> 将修改后的从工作区添加到暂存区git add . 将所以修改后的代码从工作区添加到暂存区g
2022-04-02 11:24:46
118
转载 TCP IP 协议
TCP / IP 协议文章目录TCP / IP 协议**一、计算机网络体系结构分层****二、TCP/IP基础****2.1 TCP/IP具体含义****2.2 数据包****2.3 数据处理流程****三、传输层中的 TCP 和 UDP****3.1 端口号****3.2 UDP****3.3 TCP****3.4 三次握手(重点)****3.5 四次挥手(重点)****3.5 通过序列号与确认应答提高可靠性****3.6 重发超时的确定****3.7 以段为单位发送数据****3.8 利用窗口控制提
2021-08-13 18:05:57
482
原创 wakaama的源代码分析之一
wakaama的源代码分析之一一、LWM2M 下图为lwm2m基础点:1.1 LWM2M协议 LwM2M的全称是Lightweight Machine-To-Machine, LwM2M协议原则上是一种设备管理协议,但不限于设备管理,应该能够传输服务/应用程序数据,是适用于资源有限的终端设备管理的轻量级物联网协议。这个协议基于COAP协议,COAP协议基于UDP协议。它的名称里面包含了这么两个重要含义:1)这个协议是轻量级的;2)这个协议适用于物联网设备。 概括地说:LwM2M是适
2021-08-13 18:04:13
1574
原创 coap协议总结
coap协议文章目录coap协议一、coap协议基础1.1 什么是CoAp1.2 CoAp消息结构1.3 CoAP协议特点二、Message Format三、code3.1 请求3.2 响应四、Token4.1 Token生成方法4.2 报文分析五、option5.1 Critical/Elective5.2 Proxy Unsafe or Safe-to-Forward and NoCacheKey5.3 Length5.4 Option Number5.5 Option Format5.6 Optio
2021-08-06 16:39:16
9070
原创 FreeRTOS内存管理-heap_3.c
FreeRTOS内存管理-heap_3.c1、简介heap_3.c是5种内存管理中最简单的一个,它只是将malloc()与free()进行打包调用,heap_3.c与heap_1.c和heap_1.c不同的是:不再选择一个大的数组对内存进行分配和释放,即内存堆空间的大小不受configTOTAL_HEAP_SIZE的影响,而是选择由链接器分配相应的堆内存。注意:不可以直接引用malloc和free,因为标准库中的malloc和free也不能保证线程的安全性,因此,heap_3.c中的pvPortMal
2021-07-15 14:39:33
660
原创 FreeRTOS内存管理-heap_2.c
FreeRTOS内存管理-heap_2.c1.1 简介heap_2.c与heap_1.c相似,也是申请了一个较大的静态数组ucHeap[]用于存放内存,每次内存申请则是将内存划分成不同大小的小块,与heap_1.c不同的是:heap_2.c采用了最佳匹配算法对内存进行分配处理,内存在申请(pvPortMalloc)之后,会对其申请的内存进行相应的释放(vPortFree)。头文件:FreeRTOSConfig.h configTOTAL_HEAP_SIZE//定义系统所用的堆栈大小相关的函数接
2021-07-15 14:20:03
464
原创 FreeRtos内存管理-heap_1.c
FreeRtos内存管理-heap_1.cFreeRTOS 支持5种动态内存管理方案,分别通过文件 heap_1.c,heap_2.c,heap_3.c,heap_4.c和heap_5.c实现。这 5 个文件在 FreeRTOS源码包中的路径是:FreeRTOS\Source\portable\MemMang 本文将简单介绍heap_1.c、heap_2.c、heap_3.c的代码实现以及应用场景。若用户想要自己使用内存,则可通过函数对齐进行申请调用,类似于C中的malloc()和free(),在F
2021-07-15 11:17:19
549
原创 FreeRTOS内存管理之heap_4.c
FreeRTOS内存管理之heap_4.c源码解析每当创建任务、队列、互斥量、软件定时器、信号量或事件组时,RTOS内核会为它们分配RAM。标准函数库中的malloc()和free()函数有些时候能够用于完成这个任务,但是:在嵌入式系统中,它们并不总是可以使用的;它们会占用更多宝贵的代码空间;它们没有线程保护;它们不具有确定性(每次调用执行的时间可能会不同);当RTOS内核需要RAM时,调用**pvPortMalloc()函数来代替malloc()函数。当RAM要被释放时,调用vPor
2021-07-15 09:45:46
2155
1
原创 FreeRTOS常用API
FreeRTOS常用API一、任务[task.h]1、任务创建如果任务成功创建并加入就绪列表函数返回pdPASS,否则函数返回错误码,具体参见projdefs.h。xTaskCreate((TaskFunction_t) master_task_main, /* 任务入口函数 */ “MASTER”, /* 任务名字 */ 64*1024, /* 任务栈大小 */ NULL,
2021-07-13 19:07:31
1622
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人