- 博客(56)
- 资源 (13)
- 收藏
- 关注
原创 Linux应用编程:定时器
settimer工作机制是,先对it_value倒计时,当it_value为零时触发信号,然后重置为it_interval,继续对it_value倒计时,一直这样循环下去。3、使用 setitimer 时,通知信号的类别不能改变:SIGALARM,SIGPROF 等,而这些都是传统信号,而不是实时信号,因此有 timer overrun 的问题;2、setitmer 计时器时间到达时,只能使用信号方式通知使用 timer 的进程,而 POSIX timer 多种通知方式,比如信号,或者启动线程。
2024-01-12 21:45:41 1494
原创 day03_pandas_demo
pandas= panel + data + analysis 面板数据分析panel面板数据-计量经济学 三维数据以numpy为基础,借力numpy模块在计算方面性能高的优势基于matplotlib,能够简便的画图独特的数据结构func:自定义函数axis=0:默认是列,axis=1表示进行行计算# 计算col1和col2列最大值减去最小值的值Pandas基础数据处理Pandas介绍:面板数据 数据处理工具 便捷的数据处理能力。
2023-10-23 19:19:12 294
原创 day02_numpy_demo
Numpy的优势:内存存储风格,ndrray存储相同数据,内存连续存储,底层c语言实现,支持多线程ndarray的属性:shape、dtype、ndim、size、itemsize基本操作:ndarray.方法() np.函数()生成数组的方法:np.ones(shape) np.zeros(shape)从现有数组中生成:np.array() np.copy() np.asarray()生成固定范围的数组:np.linspace(a, b, c) np.arange(a, b, c)
2023-10-22 14:47:03 321
原创 day01_matplotlib_demo
容器层画板层Canvas画布层plt.figure(figsize=(), dpi=)绘画层/坐标轴fig, axes = plt.subplots(nrows=, ncols=, figsize=(). dpi=)辅助显示层修改x,y轴刻度 plt.xticks()添加描述信息 plt.xlabel() plt.ylabel() plt.title()添加网格 plt.grid()显示图例 plt.legend()图像层,可以设置图像颜色、风格、标签。
2023-10-22 14:44:14 723
原创 FreeRTOS(以STM32F1系列为例子)
API 函数的参数uxPriority为创建的任务赋予了一个初始优先级。这个侁先级可以在调度器启动后调用API 函数进行修改。文件中设定的编译时配置常量的值,即是最多可具有的优先级数目。FreeRTOS本身并没有限定这个常量的最大值,但这个值越大,则内核花销的内存空间就越多。所以总是建议将此常量设为能够用到的最小值。低优先级号表示任务的优先级低,优先级号 0 表示最低优先级。有效的优先级号范围从 0 到。如果被选中的优先级上具有不止一个任务,调度器会让这些任务轮流执行。
2023-09-30 20:23:06 1576
原创 SQLite3 操作命令以及c/c++编程API和例子
。。导出完整的数据库在一个文本文件中:。所有的SQL语句都是使用分号结尾,不区分大小写,两个减号“--”代表注释。
2023-09-11 19:18:27 965
原创 Linux网络编程Socket通信6-Libevent移植与使用
对I/O事件、信号和定时事件提供统一的处理。事件驱动、高性能、轻量级、专注于网络、跨平台、支持多种I/O多路复用技术、支持I/O,定时器和信号事件、注册事件优先级。bufferevent 是 libevent 中的一个事件缓冲 IO,内部实现了基本 socket recv/send 操作 ,用户只需要调用 bufferevent 的 API 即可实现数据的读写。创建好libevent_base根节点后,需要等待事件的产生,也就是等待想要等待的事件的激活,在libevent中提供了对应的接口,类似。
2023-08-30 20:13:48 462
原创 Linux网络编程Socket通信5-UDP/domain
unix domain socket 本地套接字通信,全双工。套接字用文件来标识。这个文件在绑定之前是不能存在的。对于文件客户端可以使用隐式绑定,但是服务器不可以。
2023-08-09 10:57:38 317
原创 Linux网络编程Socket通信4-poll/epoll/reator/threadpoll
select 跨平台, poll 没有1024文件描述符的限制,缺点也很明显,每次监听都需要将监听到的信息从应用层拷贝到内存,返回变化的文件描述符的个数,具体那个文件描述符需要遍历,大量并发、少量活跃效率比较低。创建一定数量的线程,和一个任务队列,线程池中的线程不停的去任务队列中取任务,又任务到来直接往任务队列中添加。epoll 优点:没有1024文件描述符的限制,下次监听不需要将需要监听的文件描述符从应用层再次拷贝到内核,返回的是已经变化的文件描述符,不需要遍历,大量并发,少量活跃效率高。
2023-08-09 10:53:40 322
原创 json解析
开源网址:https://sourceforge.net/projects/cjson/优点在于,即使 json 文件出现错误,还是可以读取出其他的内容。两个文件拷贝到自己的项目中即可,在。花括号表示对象,使用。下面都是可以使用的。
2023-06-17 14:50:20 1120
原创 linux 并发与竞争 原子操作、自旋锁、信号量、互斥体
并发访问带来的问题就是竞争。对于临界区必须保证一次只有一个线程访问,也就是要保证临界区是原子访问的。我们要保护的是多个线程都会访问的共享数据。一般像全局变量,设备结构体这些肯定是要保护的,至于其他的数据就要根据实际的驱动程序而定。
2023-05-11 15:48:52 507
原创 linux 设备树下的led驱动(寄存器)
①、在文件中创建相应的设备节点。②、编写驱动程序,获取设备树中的相关属性值。③、使用获取到的有关属性值来初始化 LED 所使用的 GPIO。
2023-05-11 15:36:00 264
原创 linux 设备树详解
描述设备树的文件叫做,这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU数量、 内存基地址、IIC接口上接了哪些设备、SPI接口上接了哪些设备等等。树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。DTS 文件的主要功能就是按照上图所示的结构来描述板子上的设备信息。SOC厂商有多种开发板,将这些共同的信息提取出来作为一个通用的文件,其他的.dts 文件直接引用这个通用文件即可,这个通用文件就是.dtsi。
2023-05-11 15:30:31 1580 1
原创 嵌入式日志库ulog的使用和解析
time(& tt);// 打开文件my_test.txt 这里文件可以跟改为时间 fprintf(fp , "%s [%s]: %s\n" , get_time , // user defined function ulog_level_name(severity) , msg);执行后,文件中的内容类似以下,这个格式是按照自己喜好在日志函数中自己编写。
2023-04-19 19:44:08 3922 2
原创 Linux 字符设备驱动(新)
和这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用Linux内核推荐的新字符设备驱动API函数。
2023-04-12 08:51:01 278 1
原创 Linux 字符设备驱动(旧)
字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都是字符设备,这些设备的驱动就叫做字符设备驱动。
2023-04-12 08:49:01 107
原创 Linux内核编译
编译完成以后就会在这个目录下生成一个叫做zImage的文件,zImage 就是我们要用的Linux镜像文件。另外也会在下生成很多.dtb文件,这些.dtb就是设备树文件。
2023-04-09 13:48:43 1005
原创 uboot图形化配置及其原理
可以参考linux内核源码中的①、在主界面中添加一个名为“My test menu”,此菜单内部有一个配置项。②、配置项为“MY_TESTCONFIG”,此配置项处于菜单“My test menu”中。③、配置项的为变量类型为 bool,默认值为 y。④、配置项菜单名字为“This is my test config”
2023-03-31 19:37:40 747
原创 uboot编译-下载-命令
倒计时的时候按下键盘上的回车键,默认是 3 秒倒计时,在 3 秒倒计时结束以后如果没有按下回车键的话 uboot 就会使用默认参数来启动 Linux 内核。用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、nm、 mm、mw、cp 和 cmp。设置tftp文件夹,,其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是。首先ubuntu中需要安装好nfs,并且新建nfs使用目录,将所有需要使用nfs访问的文件放到该目录下。
2023-03-31 14:40:21 905
原创 linux网络编程socket通信3-select
缺点:文件描述符1024限制,受到FD_SETSIZE的限制、只是返回文件描述符的个数,具体那个需要遍历。多路IO复用:内核监听多个文件描述符的属性(读和写缓冲区)变化,poll、epoll、select。应用层通过内核select监听各个文件描述符,对于应用层的文件描述符集合我们最好需要备份一下,如果有某个文件的读缓冲区发生了变化,那么这个时候就可以读了,将这个事件告知我们的应用层。使用数组保存监听lfd后,Accept产生的cfd,在遍历监听该数组即可。之前的文件描述符合集。
2023-03-20 09:43:34 185
原创 linux网络编程socket通信2
原理:原函数和包裹函数的函数名差异只有首字母大写,这是因为man page对字母大小写不敏感,同名的包裹函数一样可以跳转至man page , 新包裹需要检查返回值的函数,让代码不那么肥胖。在接收和发送数据时个人设计一个守护进程(线程),定时发送Heart-Beat包,客户端/服务器收到该小包后,立刻返回相应的包即可检测对方是否实时在线。为了实时检测查询的链接状态,常用的方法就是加入心跳机制。
2023-03-03 21:01:37 500
原创 c语言对xls文件的操作
1、xls文件中每个格子之间的间距就是一个tab键,也就是。这些可以将一个xls文件使用记事本打开便可以一目了然。2、xls文件的行和行之间是使用换行的,也就是。
2023-02-01 22:02:21 1492 1
原创 linux mysql基本查询语句、表连接、where子句(第三天)
左外连接的结果集 = 内连接的结果集 + 左表中匹配不上的记录。右外连接的结果集 = 内连接的结果集 + 右表中匹配不上的记录。使用where子句实现三表之间的连接 使用and进行连接。作用: 根据条件表达式从数据源中筛选出符合条件的记录。需求:列出学生的信息,包括学号、姓名和班级名称。语法:逻辑表达式1 and 逻辑表达式2。语法:逻辑表达式1 or 逻辑表达式2。判断一个表达式的值是否出现在列表中。判断表达式的值是否在给定的闭区间。判断表达式的值是否符合给定的模式。:匹配任意长度的任意字符,
2023-02-01 11:20:05 267
原创 Linux网络编程socket通信1
三次握手: 主动发起连接请求端,发送 SYN 标志位,请求建立连接。携带序号号、数据字节数(0)、滑动窗口大小。 被动接受连接请求端,发送 ACK 标志位,同时携带 SYN 请求标志位。携带序号、确认序号、数据字节数(0)、滑动窗口大小。 主动发起连接请求端,发送 ACK 标志位,应答服务器连接请求。携带确认序号。四次挥手: 主动关闭连接请求端, 发送 FIN 标志位。 被动关闭连接请求端, 应答 ACK 标志位。----- 半关闭完成。 被动关闭连接请求端, 发送 FIN 标志位。
2023-01-29 16:23:55 296
原创 linux MySql 基础知识(第一天)
是在关系数据库上执行数据操作、检索以及维护所使用的标准语言。查询数据、操纵数据、定义数据、控制数据,所有关系型数据库都是用相似的语言。创建的时候是要先创建主表,然后在创建从表。删除表的时候就必须要先删除从表在删除主表。其中的length表示该小数的最大位数。precision表示精度设置。注意上面的-p和密码之间是没有空格的。数据最大位数为5,小数点后面保留5位。从表中的班号就要来自于主表中的班号。
2023-01-18 16:21:21 94
原创 linux网络编程基础知识
地址和端口号,不知道目的主机的硬件地址, 而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填。传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2023-01-15 19:25:46 234
原创 CPPLearn基础1
复制完字符串后,会在dest的后面追加0。使用函数重载的时候,数据类型不匹配的话,C++将会尝试使用类型转换与形参进行匹配,如果转换后有多个函数匹配,那么就会报错。引用可以作为函数重载的条件,但是,调用函数的时候,如果实参是变量,那么编译器形参类型本身和类型的引用将被视为同一个特征。对于内置数据类型,如果两种数据类型是兼容的,c++可以自动转换,如果从更大的精度转化为更小的数,可能会被截断或损失精度。构造函数只用于从某种类型转换为类类型的转换,如果要进行相反的转换,可以使用特殊的运算符函数转换函数。
2022-12-28 11:58:11 173
原创 Linux进程以及进程间管道通信
(0不是有效进程ID,init最小,为1)。 子进程终止时,子进程残留资源 PCB 存放于内核中,PCB 记录了进程结束原因,进程回收就是回。 子进程终止,父进程尚未对子进程进行回收,在此期间,子进程为“僵尸进程”。并发:是同一个cpu,执行不同的进程,使用不同的 时间片,只是有一个进程在执行。成功返回① 父进程返回子进程的ID(非负) ②子进程返回 0。 父进程先于子进终止,子进程沦为“孤儿进程”,会被 init 进程领养。回收僵尸进程,得 kill 它的父进程,让孤儿院去回收它。
2022-12-20 11:45:03 987
原创 Linux线程同步
;==};64};==};64};1};借助互斥锁管理共享数据实现同步未加互斥锁int ret;//用于判断是否创建了线程 int i = 0;//用于循环创建线程 pthread_t tid;//用于create线程的传出参数 srand(time(NULL));int * a;if(ret!= 0) {
2022-12-20 09:29:22 595
原创 python基础03(字符串)
判断一个字符串至少含有一个字符并且所有的字符都是由字母组成的则返回True,否则返回False。如果一个非空字符串所有的字符都是由字母或者数字组成的则返回True,否则返回False。判断一个字符串是否含有空格,是的话返回True,否则返回False。判断是否以指定的字符串开头,是返回True,否则返回False。判断是否以指定的字符串结尾,是返回True,否则返回False。,在则返回子串在字符串中的起始位置下标,否则返回-1。,在则返回子串在字符串中的起始位置下标,否则。
2022-12-15 20:56:11 638
原创 python基础02(流程控制)
条件成立执行某些代码,条件不成立执行某些带码。else表示循环正常结束后执行的代码。 循环正常结束之后执行的代码。 条件成立重复执行的代码1。 条件成立重复执行的代码1。 循环正常结束后执行的代码。 条件都不成立执行代码1。 条件都不成立执行代码2。语法:条件成立执行的表达式。 条件1成立执行代码1。 条件1成立执行代码2。 条件2成立执行代码1。 条件2成立执行代码2。让代码更加高效的重复的执行。 条件成立执行代码1。 条件成立执行代码2。
2022-12-13 19:17:57 95
原创 Python基础01(变量、运算符、格式化等等)
变量的作用:为快速查找使用数据,就是临时存储在内容中的数据对应地址的名称。,阻塞等待用户输入。输入后存储到变量,输入的任意数据都会转为字符串出来。其中主要小括号优先级高于指数高于。将符号左边的值赋给右边的变量。定义变量 变量名 = 值。由数字、字母、下划线组成。
2022-12-13 16:26:56 91
原创 Linux 守护进程、线程
①进程组:一个或多个进程的集合。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID其进程ID可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。进程组生存期:进程组创建到最后一个进程离开(终止或转移到另一个进程组)。一个进程可以为自己或子进程设置进程组ID②会话:多个进程组的集合。
2022-11-21 20:42:46 793
多通道ADC转换.zip
2021-02-05
onewire_DS18B20.zip
2021-02-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人