自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 条件变量与互斥锁共同决定线程工作顺序

条件变量的使用方法,先加锁,然后wait,wait函数首先回去查询一次是否为真,如果是真则继续执行,如果为假则堵塞。首先是用闹钟时间一到就发送信号给modbus采集,注意modbus采集的时候要加两把锁,第一把锁的作用是保护,modbus采集成功就写操作,写成功后就发送条件变量signal,然后mqtt打包上报。任何信号量,条件变量,互斥锁都是最好静态创建,即再main函数里面创建,否则有可能会再其他函数里面一直占用资源。时间一到,标志位赋值为1,然后modbus采集,采集完之后打包,打包之后再上报。

2024-03-22 14:13:26 223 1

原创 线程的终止与回收,线程的实时调度策略,线程的通信互斥锁,信号量

用法就是创建一个线程,然后用pthread_exit(退出返回的信息)退出,然后再主函数中有pthread_join(线程标识,退出返回的信息)等待对于线程对出,并且,推出之后还会传出相应的值。PV操作,P是申请,V是释放,申请成功时,信号量的值减1,释放信号量成功时,信号量的值加1,信号量的值为0时,申请信号量会阻塞,不能为负数。线程退出由pthread_exit()退出 ,这个函数的参数就是返回值,也是pthread_join函数的第二个参数。线程的实时调度策略,一般都是用非实时。

2024-03-21 17:14:18 333

原创 Linux线程与进程和SIGNAL

再Linux中,进程是系统资源分配的基本单位,也是CPU运行的基本调度单位,进程轮流切换占用cpu。Linux一个任务task就是一个进程process,进程不止函数,还有操作系统添加的东西。线程共享数据段,线程间通信时通过操作共享数据段实现的,进程不同,进程的操作地址空间时独立的。有信号或者中断请求的时候都是暂停去执行相应的处理程序,再返回原来的断电。每一个进程都是具有一定的功能和权限,他们都运行再各自独立的虚拟地址空间。第四个参数是运行函数的参数,如果运行参数不需要参数则是NULL。

2024-03-21 16:18:37 302

原创 MQTT上报下发,以及连接到modbus协议

mqtt订阅主题 阿里云设备服务器,阿里云那边下发出来,通过回调函数打印出来,阿里云可以在线调试。modbus_read_registers(modbus本身,地址,数据,读取缓存区)首先引入modbus几个功能库,然后创建modbus,初始化modbus,注意端口。最后在加上modbus 读写 ,最终实现是modbus上面可读可写,在。cJSON库 键值对模式,值可以是整形,字符串,数组,还可以嵌套。收到消息后,可以解析CJSON包,获得想要的参数。其他参数可以用阿里云参数小工具+阿里云实例。

2024-03-20 17:43:36 308

原创 linux开发之串口读写初始化串口,modbus-RTU协议

对于read,阻塞是指串口输入缓冲区没有数据的时候,read函数会阻塞在这里,直到串口输入缓冲区有数据可读取,read读到看需要的字节数后再继续进行。或者 fcntl(fd,F_SETFL,0)就是阻塞 fcntl(fd,F_SETFL,FNDELAY)就是非阻塞。在设置串口之前先memset(串口,0,sizeof(串口))赋值为0,则是清空。select函数 返回值大于0是可读,小于0是不可读,等于0是等待。tcflag_t c_cflag 控制模式。tcflag_t c_lflag 本地模式。

2024-03-20 15:59:07 204

原创 verilog

过程语句initial always语句 可以对组合也可以时序 赋值信号一定要为reg类型 组合逻辑是时敏感事件是所有的信号 时序电路是时间信号和所关心信号。<= 非阻塞赋值语句 在begin end中各条非阻塞赋值语句的执行没有先后之分,先计算右端值,然后等延迟结束之后,再赋值给左边变量。连续赋值语句的延迟具有硬件电路中惯性延时的特性,任何小于其延时的信号变换都会被滤除掉,不会体现在输出端口。@(a,b) == @(a or b) a或者b变化。多个赋值时同时执行的,时并行语句。

2024-03-14 20:54:57 295

原创 Verilog 学习 运算符

加减乘除取模,由于位数的关系,运算时有可能会移除高位,4‘b1111=15 3’b011 = 3 a*b = 1101 只有4位 a+b = 0010 都会省略。a =3’b110 b=4’b0101 则c = {a[2:0],b[3:0]} == 7’b110 0101。<表达式1><表达式2>如果条件表达式为真则执行表达式1,否则执行表达式2。按位操作符 ~按位取反 &按位取与 |按位取或 ^按位去异或 ^~按位取同或。相等运算符 ==等于 ===全等 加个!关系操作符> < >= <=

2024-03-14 17:15:55 238

原创 imx6u 阿尔法Linux开发板 nfs tftp

tftp和nfs命令作用一样,都是通过网络下载东西到DRAM,tftp用到TFTP协议,ubuntu要做为TFTP服务器,要再ubuntu中搭建TFTP服务器,命令行格式相同tftpboot [loadAddress] [[hostIPaddr:]bootfilename],但是不需要绝对路径和hostIPaddr,只需要文件名字。uboot不只是linux,还可以引导其他的系统,还支持其他的架构和外设USB,SD卡等等,可以在config中配置。一般将ubuntu中的文件下载到开发板DRAM中。

2024-03-04 02:00:55 173

原创 计算机系统的状态机模型 verilog硬件描述语言

因为锁存器在高电平期间将信号完全传输,有毛刺也会传输,如何防止Latch 就是写完if else case default。组合逻辑用 “=”,时序逻辑用“<=",时序逻辑还需要复位。执行环境会调用一个函数来调用main函数,宿主环境hosted下,调用的就是main函数。如果要使用存储单元,只能先将存储单元的值赋个寄存器,然后在该寄存器进行位操作。不能有锁存器Latch。CPU结构设计的工作:根据指令集的状态机用电路实现CPU的状态机。表示所有的敏感列表,只要信号变换,执行always下面的语句。

2024-03-01 21:37:28 253

原创 QCheckBox QSpliter QSpacers QHBoxLayout

大小策略sizePolicy 就是对每一个水平布局里面的对象的参数,ignored 直接忽略对象的缺省值,expanding 扩张整个Widget minmium 就是最小是缺省值。与QRadioButton 的区别就是 他可以自由的选择是否为 选中和不选中。也就是水平布局里面可以有垂直布局。strtch 可以控制宽度比例,比如按键的拉伸1:2则是1,2。分裂器,意思就是将窗口分裂,并且可以改变两个窗口大小。orientation 设置方向,水平或者垂直。网格布局,可以用于排列对齐,参数直译就行。

2024-02-24 23:12:10 134

原创 Qt样式表 QPushButton QRadioButton

其中qs文件是样式表文件,因为样式表的设计是纯文本文件,所以可以设置在qs文件中,项目执行是读取qs文件。QRadioButton::indicator:unchecked { image:url(:/a.png)}//未选中的图片。QRadioButton::indicator:checked { image:url(:/a.png)}//选中的图片。注意格式 大括号与命名之间要有空个,hover是悬停,checked是点击后,checked:hover是点击后悬停。可以设置组来实现,不同的事情不冲突。

2024-02-24 22:05:38 222

原创 信号与槽 父对象 自定义槽与对象

接受者是mainwindow,mainwindow 没有则查看Qmainwindow,发现Qmainwindow又继承QWidget,选择其中close()Ui 命名空间下的mainwindow 继承的是ui_mainwindow ,则ui命名空间下的mainwindow有pushbutton。第二部在mainwindow中引入对象,并且将对象写入mainwindow的类中,因为要在第三部mainwindow的构造函数中实例化对象。一个信号可以多个槽 多个信号同一个槽也是可以 甚至信号也可以连接信号。

2024-02-22 23:02:25 242

原创 Qt 相关知识 命名空间C++

qnx: target.path = /tmp/$${TARGET}/bin,如果是qnx平台则 部署到相应的路径 其中TARGET 是目标文件的名字 ,可以自行修改 与Makefile文件类似。greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 比QT4 的版本大加入widget模块。QT += core gui core gui 是qt的模块 如果需要其他模块则在pro文件中添加。// code 可以是变量或函数。DEFINES 警告。

2024-02-22 22:56:43 148

原创 C++ 类 继承 构造析构 重载

派生类成员可以访问基类的public和proteced成员,不能访问private,派生类的对象不能访问基类中的任何成员private私有继承时基类中成员属性变为private,并在基类中private成员隐藏。派生类成员可以访问基类的public和proteced成员,不能访问private,派生类的对象不能访问基类中的任何成员。派生类的对象只能访问基类的public成员。在类实例化对象的时候,如果没有定义构造函数,编译器会合成一个默认的构造,当有了对象后,没有析构函数,编译器会默认生成一个析构函数。

2024-02-22 10:55:15 296

原创 扩展包VirtualBox 安装完QT 之后报错

看到为这条省你至少一天时间。

2024-02-21 10:23:24 85

原创 typedef链表 双向链表 顺序队列(环形缓冲区)

3.用镜像指示位置判断空满,当读位 == 写位时,要么空,要么满,如果写镜像指示位以及转一圈回到起点,及镜像指示位不相等,则为满,反之。先建立头指针,利用while循环让头指针指向尾节点,然后再新建一个node节点,然后保存新节点data,让新节点next指向NULL,在让尾指向新节点。phead 在 ptail前面,而且读取长度要重新返回开头,则要分两段,字符用memcpy复制,phead在ptail后面,且读取长度不超过,则正常读取。与头插一样,要在i位插入,找到i-1,然后就与头插一样。

2024-02-20 11:28:38 383

原创 GIT linux环境变量 堆栈 函数指针

堆更容易解释,因为它就是你电脑中的剩余内存,你可以通过malloc访问它来获取更多内存,OS会使用内部函数为你注册一块内存区域,并且返回指向它的指针。如果可执行的目录不在PATH执行目录中,则执行的时候要加上制定目录。如果在PATH中最后:. 则表示,当前目录也纳入PATH 默认目录,则不用在对应目录./ex 直接ex就可以了,也就是export PATH = 目录:目录:.如果你的变量并不是从malloc中获取的,也不是从一个从malloc获取的函数中获取的,那么它在栈上。

2024-02-17 15:41:09 1199

原创 hard way learn c

fgets(str,n,fp)从fp中读取n-1个字符串放入str中,返回str地址,n比较大的时候有可能会提前读取到换行符或者文件结束符号,换行符也作为一个字符读入。fread () fwrite()二进制方式读写文件,第一个参数为指向数据内存的指针,第二个参数 size 读写的每个数据项的字节数。fput(str,fp)str所指向的字符串写到文件指针变量fp所指向的文件中,返回0。fp指向文件信息区,并不是文件本身,文件内部进行读写操作时,文件位置指针在移动。

2024-02-12 23:22:58 320

原创 【无标题】

在C语言中,当char类型和int类型进行运算时,char类型会先自动转换为int类型,然后再进行运算。因此,当char和int相乘时,char类型会被先转换为int类型,然后进行乘法运算,最终得到的结果也是int类型。这样定义的数组,arr=arr[0]=&arr 都等于第一个元素的地址 无法对这个值进行改变。5th已经是\0,输出不显示,6th则是乱码了,当赋值给a[5]时相当于扩展了数组空间。pa是地址,arr[0]这个元素的地址,*pa是取这个地址的值。先数组再指针就是数组元素为指针的数组。

2024-02-10 10:35:10 282

原创 missing semester 第二课课后作业

【代码】missing semester 第二课课后作业。

2024-01-14 21:20:26 506

原创 PA0ysys南京大学环境配置中关于gcc和Makefile

如果多个文件,例如main.c 中引用h.c g.c f.c 3个.c文件,利用gcc -c只对单个.c文件编译 不连接。gcc -c h.c 会生存h.o 不会生存可执行文件,而且如果是asd.c就是生存asd.o。最后需要用gcc *.o -o main 将所有的.o文件连接起来,生成一个main执行文件。gcc -o hello h.c 会直接生存hello可执行文件,不会生成.o文件。注释十分详细就,不对代码进行解释了。gcc h.c 会生成a.out。2.设置ubuntu按照如图。

2024-01-10 20:01:33 404

原创 《python编程从入门到实践》——武装飞船详解

一.创建pygame窗口及响应用户输入import pygameimport sysdef run_game(): # 初始化游戏并创建一个屏幕对象 pygame.init() screen = pygame.display.set_mode(1200,800) pygame.display.set_caption('Alien Invasion') ...

2020-04-06 16:40:46 2526 6

原创 在pychram中引入pygame

一:安装pygame1.cmd2.python -m pip install pygame(unintall卸载)我这是已经安装好了的。这里想检查是否已经安装成功,可以输入python -m pygame.examples.aliens出现二.在pycharm中导入pygame方法一 选中settings选中+好搜索pygameinstall packa...

2020-03-26 15:35:55 231 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除