移植_网络_控制_系统
文章平均质量分 75
DSP,OMAPL138,C51,AVR,NXP,MM32,PLC,GD32,STM8,PowerPC等MCU。vxworks,freeRTOS,linux,UCOS,RT-thread等操作系统和交叉编译移植及其网络包括组播,广播,单播等。电机控制等。
寒听雪落
这个作者很懒,什么都没留下…
展开
-
STM32CubeMX更新安装步骤
出现上面安装不成功的话,就用下面步骤继续安装STM32CubeMX。原创 2024-06-26 12:20:43 · 121 阅读 · 0 评论 -
RT-thread线程间同步:事件集/消息队列/邮箱功能
线程thread1进入后接收事件组合"事件3或事件5",接收到事件时候进行100ms延时,然后接收事件组合“事件3 与事件5”,接收完成后结束线程。整体情况:thread1首先等待“事件3或事件5”的到来,thread2发送事件3,唤醒thread1接收事件,之后thread1等待“事件3与事件5”;thread2再发送事件5,进行延时,thread2发送事件3,等thread1延时结束就能接收事件组合“事件3与事件5”。事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。原创 2024-04-23 17:42:01 · 180 阅读 · 0 评论 -
SSH和SCP远程访问开发板
要是windows连接Ubuntu,使用SSH服务以后我们就可以在Windwos下使用终端软件登陆到Ubuntu,比如使用 SecureCRT,Ubuntu可以下使用如下命令开启 SSH 服务:sudo apt-get install openssh-server上述命令安装 ssh 服务,ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即。SCP指令可以在不同网络之间进行安全的文件传输。scp -P [端口号] [本地文件路径] [用户名]@[远程主机IP地址]:[目标路径]原创 2022-09-25 23:59:11 · 2966 阅读 · 0 评论 -
STM32按键功能开发
常态下,独立按键是断开的,按下的时候才闭合。但是按键在闭合和断开的时候,都存在抖动现象,即按键在闭合时不会马上就稳定的连接,断开时也不会马上断开。消抖方法分为硬件消抖和软件消抖,常用软件的方法消抖。检测到按键按下后,一般进行10ms 延时,用于跳过抖动的时间段,如果消抖效果不好可以调整这个 10ms 延时,因为不同类型的按键抖动时间可能有偏差。硬件消抖:利用 RC 电路的电容充放电特性来对抖动产生的电压毛刺进行平滑出来,从而实现消抖,但是成本会更高一点,本着能省则省的原则,我们推荐使用软件消抖即可。原创 2024-02-17 20:50:18 · 1024 阅读 · 0 评论 -
UCOSII系统移植详解
添加任务的时候OS_TCBInit()函数都会调用OSTaskCreateHook()函数,该函数允许扩展UCOSII的功能,当UCOSII设置完任务控制块OS_TCB初始化的绝大部分的工作后,但是在任务控制块被链接到相应的任务链中之前,以及在该任务就绪运行之前,UCOSII会调用OSTaskCreateHook(),该函数被调用的时候中断是打开的。1,处理器的C编译器能产生可重入型的代码,如果不行的话,那么就不能在任务之间随意的切换,因为当你切换到别的任务的时候,该任务在这个函数的数据就会被破坏。原创 2024-04-15 08:45:00 · 66 阅读 · 0 评论 -
UCOS-III实时操作系统的移植
Middlewares/uC-OS3/BSP分组用于存放µC/OS-III等组件中与板级相关的文件,将uC-CPU/BSP/Template/bsp_cpu.c和uC-OS3/Template/bsp_os_dt.c这个两个文 件添加到Middlewares/uC-OS3/BSP分组中。在开始移植µC/OS-III之前,提前准备好一个用于移植µC/OS-III的基础工程和µC/OS-III移植所需的相关源代码,还需要µC/CPU和µC/LIB这两个组件的源代码。如果使用 os,则包括下面的头文件。原创 2024-04-14 09:30:00 · 98 阅读 · 1 评论 -
RT-thread信号量与互斥量
互斥量的使用比较单一,因为它是信号量的一种,并且它是以锁的形式存在。线程3先持有互斥量,而后线程2试图持有互斥量,此时线程3的优先级被提升为和线程2的优先级相同。为了体现使用互斥量来达到线程间的同步并体现优先级继承的现象,例程设计了thread1thread2、thread3三个线程,优先级分别为9、10、11,设计了一个互斥量mutex。整体情况就是:线程3先持有互斥量,而后线程2试图持有互斥量,此时线程3的优先级应该被提升为和线程2的优先级相同,然后线程1打印线程2与线程3的优先级信息。原创 2024-04-15 01:44:00 · 405 阅读 · 0 评论 -
freeRTOS实时系统启动流程和函数详解
在建立完任务的时候,咱们须要开启调度器,由于建立仅仅是把任务添加到系统中,还没真正调度,而且空闲任务也没实现,定时器任务也没实现,这些都是在开启调度函数vTaskStartScheduler()中实现的。二,main函数中将硬件和RTOS系统先初始化完成,建立一个启动任务后就启动调度器,然后在启动任务里面建立各类应用任务,当全部任务都建立成功后,启动任务把本身删除。三,任务函数:xTaskCreate(): pvPortMalloc()分配任务控制块内存,prvHeapInit() 初始化堆栈。原创 2024-04-14 14:16:14 · 367 阅读 · 0 评论 -
机械运动过程中消回差
在往复传动过程中,回差间隙的存在会造成运动精度损失,即从动件不能实时准确地跟随主动件运动,主要表现在换向的时候或者往复受载时,严重时造成系统振荡、失调甚至冲击附加载荷。采用高精度的加工设备、先进的制造工艺以及严格的质量控制流程,有助于减小制造误差,从而减小啮合间隙,降低回差。齿槽的啮合来传递运动。同步带传动通过传动带内表面上等距分布的横向齿和带轮上的相应齿槽的啮合来传递运动,也是由齿槽的啮合来传递运动进行消除的。啮合间隙:齿轮啮合时,由于制造误差和材料变形等原因,会产生一定的间隙,导致回差。原创 2024-04-14 13:28:40 · 194 阅读 · 0 评论 -
ProC语法和操作访问数据库
Oracle还提供了另外一个通信区,oraca,但用的不多。如果宿主变量对应的数据库值为NULL,宿主变量的值不会改变,因此是无效的值;因此,必须在执行SQL语句后,立即判断sqlca。如果执行的SQL语句每次都一样,前面的知识点足够了。但如果每次执行的SQL可以改变,需要使用动态SQL。注意: Pro*C 使用PL/SQL,proc命令生成.c文件时,需要指定两个选项。在SQL语句中,宿主变量的使用有一定的规范。先写一个远端数据库的描述,至少包括:IP地址、端口号、Oracle的服务ID。原创 2024-04-14 10:20:49 · 101 阅读 · 1 评论 -
RT-thread内核临界区和中断响应测试
2,恢复中断也称开中断,用void rt_hw_interrupt_enable(rt_base_t level)函数,其中参数level是前一次rt_hw_interrupt_disable返回的中断状态。4,函数rt_base_t rt_hw_interrupt_disable(void)和函数void rt_hw_interrupt_enable(rt_base_t level) 一般需要配对使用,从而保证正确的中断状态。例如在某个函数里关闭了中断,然后调用某些子函数,再打开中断。原创 2024-04-14 09:26:49 · 135 阅读 · 0 评论 -
RT-thread系统动态内存堆和内存池的使用
内存池是一种内存分配方式,用于分配大量大小相同的小内存块,它可以极大地加快内存分配与释放的速度,且能尽量避免内存碎片化。此外,RT-Thread的内存池支持线程挂起功能,当内存池中无空闲内存块时,申请线程会被挂起,直到内存池中有新的可用内存块,再将挂起的申请线程唤醒。分配内存成功并打印信息;第三种是针对多内存块的分配情况(memheap 管理算法),memheap方法适用于系统存在多个内存堆的情况,它可以将多个内存 “粘贴” 在一起,形成一个大的内存堆,使用会感到格外便捷。前提是要开启系统heap功能。原创 2024-04-14 09:15:00 · 228 阅读 · 0 评论 -
将本地文件通过终端上传到linux阿里云服务器
进程间通信方式(1)文件(2)信号(3)管道(4)共享内存(5)消息队列(6)信号量集(7)网络(重点)使用信号量集实现进程间的通信1 ,基本概念(1)什么是信号量?信号量本质就是一种计数器,用于控制同时访问同一个共享资源的进程个数/线程个数(2)什么是信号量集?信号量集本质就是信号量的集合,也就是由若干个信号量组成的集合,主要用于控制多种共享资源各自同时被访问的进程/线程个...原创 2020-03-19 00:14:54 · 1615 阅读 · 0 评论 -
安装ubuntu双系统步骤
从windows看,59.6G+467.74G就是安装的ubuntu,分别是交换空间和逻辑分区。7,这里不要选择Chinese,不断往下面拉,选择汉字版本的中文简体和安装ubuntu。安装类型选择最底下的:其他选项,宁可以自己创建,调整分区或者位ubuntu选择多个分区。分区下拉,找最大空闲的那个,也就是空闲566232M的那个,因为我压缩分区也是这个大小。安装好了,开机选择系统,开机第一个是ubuntu系统,第三个win系统。3,关机,按F2,然后选择第三条enter step进入。原创 2024-04-13 14:00:12 · 243 阅读 · 0 评论 -
ubuntu设置扩充swap交换空间
Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行!5,启动交换分区sudo swapon /swapfile,交换空间扩充完成,打开/etc/fstab文件。1,ubuntu系统的交换分区默认大小为4G,执行free -h命令查看ubuntu系统交换分区的大小。原创 2024-04-13 13:46:30 · 770 阅读 · 0 评论 -
视频流显示有拖影解决办法
4,屏线问题:即VGA线,检查一下这根线是否连接正常,有没有松动的问题。可以更换一根质量好的VGA线试试,另外VGA线要离电源线远一些。1,显卡驱动问题:可以尝试更新显卡驱动或重新安装显卡驱动,同时建议调整一下分辨率和刷新率,也可能与液晶显示器的响应时间有关。2,显卡问题:可以尝试重新拔插,并清洁金手指,同时可以观察一下显卡风扇是否运转正常。6,显示器问题:将该显示器接到其他正常的电脑上,如果问题依旧则可能就是显示器问题了。5,数据线问题:需要更换数据线看看,或检查是不是数据线有弯折。原创 2024-04-13 00:00:00 · 482 阅读 · 0 评论 -
linux造成只读模式的原因和解决方法
20多台出问题的都是这样修复的,无失败案例。文件系统扫描工具有fsck、fsck.ext2、fsck.ext3、fsck.ext4、fsck.msdos、fsck.cramfs、fsck.ext4dev、fsck.vfat。最好是根据不同的文件系统来调用不同的扫描工具,比如ext3的文件系统使用fsck.ext3,ext4文件系统使用fsck.ext4等。如 ext3 文件系统错误,比较少见,ext3 文件系统是linux下非常稳定的文件系统,目前文件系统自身bug 造成的 ext3 文件系统错误很少见。原创 2024-04-13 00:15:00 · 2353 阅读 · 0 评论 -
使用keil5开发雅特力AT32F415记录
0x0000_0000~0x07FF_FFFF的CODE区,由BOOT1和BOOT0管脚来设定CODE从哪块存储器启动,当{BOOT1, BOOT0}=00/10 时, CODE从主闪存存储器启动,当{BOOT1,BOOT0}=01 时, CODE从启动程序存储器启动,当{BOOT1, BOOT0}=11 时, CODE从片上SRAM启动。也可以提供通信协议栈等额外的固件,可被软件开发人员通过API调用。从地址0x0000_0004处取出程序计数器( PC)的初始值, 这个值是复位向量, LSB必须是1。原创 2024-04-09 19:01:27 · 917 阅读 · 0 评论 -
linux移植SOEM EtherCAT主站
每个PDO都包含单个或多个从设备的地址,这种数据加地址的结构(附带用于校验的传输计数位)组成了EtherCAT的报文。KPA利用主站板的FPGA资源,独立外扩网卡,而不是使用主站板ARM上的网卡驱动,主站开发包中提供的Timer IP Core和NIC IPCore,利用逻辑单元PL,构建针对EtherCAT优化的MAC,提供了针对EtherCAT优化的NIC驱动,IP Core提供了Shift Sending Time设置,从端口降低有操作系统引起的数据帧抖动,从而优化了数据在收发时的抖动的问题。原创 2020-04-07 13:44:18 · 3265 阅读 · 1 评论 -
创龙板子启动文件详细过程
注释:对内核编译选项进行配置,通过内核源码中的“arch/arm/configs/xilinx_zynq_defconfig”文件对内核编译选项进行配置,并保存编译选项配置信息至当前目录新生成的.config 文件中。编译完成后将会在内核源码安装目录“arch/arm/boot/”路径下,生成内核镜像文件uImage。通过U-Boot源码中的“configs/zynq_zc702_defconfig”文件对U-Boot编译选项进行配置,并保存编译选项配置信息至当前目录新生成的.config 文件中。原创 2024-04-12 10:19:57 · 187 阅读 · 0 评论 -
使用keil开发stm32串口
它的第15位是接收完成标志,第14位是接收到0x0d的标志,而0-13位表示接收到的有效字节的数目。当接收到一个数据后,把接收到的数据(DR寄存器中的值)暂存在中间变量中,先检验接收是否完成,若未完成,检验是否接收到0x0d,如果接收到,修改状态标记,然后把中间变量的值赋给缓冲数组,将状态标记的值自增,完成对一个字节的接收。是定义了一个接收缓冲数组,来存放接收到的数据,每个元素可以存放一个字节的数据,数组的长度为USART_REC_LEN。设置IO口(TX、RX),设置为复用功能,复用为USART。原创 2024-04-12 08:45:00 · 574 阅读 · 0 评论 -
实时操作系统之间对比区别
RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;RT-rtread有中文文档,FreeRTOS有正点原子等众多视频4 文件:确实如下面RT介绍的,RT是一个包含组件的包,包含的东西很多,打开就能用。支持的组件和驱动比较。原创 2024-04-09 18:42:17 · 335 阅读 · 1 评论 -
移植RT-thread系统并开关LED灯
3,使用RT-Thread API控制GPIO LED:先输入scons --useconfig=amp_config确保RT-Thread处于amp模式,scons -j8命令编译固件,mkimage.cmd amp_s命令生成img镜像:amp_slave.img。2,将rk3568切换到loader模式,配置设备分区信息选择parameter.txt,选择要更新的RT-Thread 镜像smp.img,点击执行即可烧录RT-Thread固件,烧录完成之后,rk3568会自动重启运行。原创 2024-02-03 16:04:34 · 243 阅读 · 0 评论 -
petalinux设置自动获取永久IP
情形:zynq petalinux在开机自启动以后ifconfig设置ip,然后运行应用程序,如果程序运行过程中挂掉,在系统自启动系统/project-spec/meta-user/recipes-apps/startupip/files目录下的文件设置果的IP 或者自启动脚本中设置的IP 都会消失,然后再也ping不通了,为了解决这个问题只能重新上电运行,如果设备在很远的地方或者不容易进入的地方就会很不方便,解决办法如下方法一:将IP编译到系统1,cd 到项目工程目录下,运行命令:peta..原创 2020-08-15 11:28:06 · 1835 阅读 · 1 评论 -
LAN9252芯片控制资料
在2字节寻址的情况下,较低的13个地址位A[12:0]由SPI主控器选择,而较高的3个位A[15:13]假设为SPI从控器内的000b,因此只能访问EtherCAT从控器地址空间中的前8k字节。注意这三个中断的使能同样要根据代码中的接口定义入口,由协议栈使能和失能中断,不能上电就直接使能中断。2,PS端口增加一个定时器中断,1ms周期,调用ECAT_CheckTimer()函数,但不要一上来就初始化使能这个中断,根据接口定义好使能入口,让协议栈调用,以上电就开启这个定时器中断会导致连接失败。原创 2023-09-08 14:41:30 · 2975 阅读 · 0 评论 -
rtThread移植etherCAT主站记录
这两个函数最好的实现是直接操作网卡(或者叫emac),现在的实现参考了tcpdump的方法,在协议栈中加钩子(hook)实现,这样对原来系统影响最小,网口除了EtherCAT,还可以当正常的网口用。具体原理就是在网卡加个钩子函数,有数据来的时候先经过钩子函数,我们把EtherCAT数据帧截住,不传给原来的lwip协议栈;如果要发送数据,就直接调用发送函数,绕过lwip协议栈。开源主站主要就SOEM和IGH两种,IGH只支持linux,SOME支持linux和rtThread,最新版本是SOEM1.4。原创 2021-03-29 11:07:23 · 3262 阅读 · 0 评论 -
STM32外部中断编程相关
在NVIC中由寄存器NVIC_IPR0-NVIC_IPR59共60个寄存器控制中断优先级,每个寄存器的8位,所以就有了240个宽度为 8bit 的中断优先级控制寄存器,原则上每个外部中断可配置的优先级为 0~255,数值越小,优先级越高。对于NVCI的中断优先级分组;NVIC即嵌套向量中断控制器,它是内核的器件,M3内核都是支持256个中断,其中包含了16系统中断和240个外部中断,并且具有256级的可编程中断设置。响应优先级:抢占优先级相同,响应优先级高的中断不能打断响应优先级低的中断。原创 2024-04-06 16:23:05 · 347 阅读 · 0 评论 -
安装并新建windows下wxwroks7.0 bootrom工程
安装licence,将zwrsLicense-vx7-perm.lic粘贴到安装目录C盘WindRiver/license下。现在双击Workbench 4,新建vxworks7.0工程,会出现下面的情况,因为没有licence。编译完成binaries下生成wxwroks x86格式,可以修改bootrom硬件信息的配置了。单击x86_wxwroks工程右键,build project编译工程。双击桌面Workbench 4打开,新建windows下工程。新建完成,选择finish。原创 2023-05-28 23:52:57 · 1417 阅读 · 1 评论 -
ubuntu安装串口助手步骤流程
在Ubuntu上安装串口助手,可以使用screenminicom或cute,根据你的具体需求选择工具。串口插到主机上后在dev目录下识别出来的设备节点就是ttyUSB0。一,安装和使用screen的步骤安装前可以先确认有没有安装过:screen -ls1,安装screen:2,连接到串口助手:是你的串口设备文件,115200是波特率。根据你的设备和设置,这些值可能不同。退出screen会话,你可以按下Ctrl + A然后按k,输入y确认退出。原创 2022-05-02 06:00:00 · 1042 阅读 · 0 评论 -
相机封装的函数
//摄像机登录信息 tmConnectInfo_t camera_login_; //多帧数据首先获取到所有数据 std::deque<uint8_t> encode_multiframe_buffer_; //摄像机预制点信息 std::vector<Camera_Preset> camera_preset_info_;一,设置白天黑夜模式int8_t SetModeDay()//白天模式{ if (camera...原创 2020-09-04 21:51:13 · 468 阅读 · 0 评论 -
移植RT-rthread内核
在动态创建线程和初始化线程的时候,会使用到内部的线程初始化函数_rt_thread_init(),_rt_thread_init() 函数会调用栈初始化函数rt_hw_stack_init(),在栈初始化函数里会手动构造一个上下文内容,这个上下文内容将被作为每个线程第一次执行的初始值。显然,在 Cortex-M 内核里 rt_hw_context_switch() 和 rt_hw_context_switch_interrupt() 功能一致,都是在 PendSV 里完成剩余上下文的保存和回复。原创 2020-08-27 11:25:56 · 1884 阅读 · 1 评论 -
计算机数学控制解释器相关
内置的 OpenGL 作为图形开发环境进行G 代码程序的错误检查。根据 G 代码程序中指令功能字的特点 , 构造了正则表式来表示功能字的格式 , 构造了有穷自动机来描述在输入字符串中功能字识别模式的过程 , 用于扫描程序 , 逐个辨识字符并进行字符串、数字、运算符的重新拼接 , 变成功能字、数字、运算符不同的指令功能字序列。② G 代码的关键字并不多 , 主要有 N, G, X, Y, Z,W, I, J, K, R,M, S, T, F等 , 在实际的过程中 , 机床制造商和用户可能对关键字进行扩展;原创 2020-04-28 22:19:20 · 1577 阅读 · 0 评论 -
那些年努力解决过的网络问题
看前后值是否有变化,没有变化就说明link不上,硬件可能存在问题,link 过程是phy 和⽹线之间的协商 ⽹络不通可以查看状态寄存器,状态寄存器是只读的。我在linux下配置过网桥,下面挂了三个ip,其中网桥的ip和下面的三个ip在同一个网段,发给网桥的ip另外三个都能收,但是只发给其中下面挂的ip,那三个挂的网口就只相当于路由器功能了。六,三网口配置路由器的适合,br0才是路由器的IP,要修改br0才有效的,修改eth0,eth1,eth2都只是改的局部,外面的设备只认br0才是设备主IP。原创 2022-05-17 07:45:00 · 689 阅读 · 0 评论 -
51单片机实现换能器超声波测水深
40KHZ 60W 小型超声波清洗机控制板 电源驱动板(整个电路板用作发射器来发射信号),单片机通过换能器能测量水的深度,并两位小数显示在1602上。40K 60W 超声波换能器(用于放大信号),接收器芯片Cx20106A(用于接收超声波),LCD1602(I2C)或液晶显示(显示测量距离),STC89C52单片机(主控芯片),稳压电路板,示波器(检查电路器件),万用表(制作PCB时候检查电路),面包插接板(接杜邦线)测试各硬件模块的功能;超声波发生器经变频,升压,整流,滤波,经换能器发出高强度的机械强波发原创 2023-10-23 22:59:14 · 1458 阅读 · 0 评论 -
ADS1219芯片解读
如果转换在RDATA命令字节的中间完成,则读取操作结束时DRDY引脚的状态会发出加载旧结果还是新结果的信号。DRDY为高时加载新的转换结果。显示了可能的地址引脚连接的I2C地址的真值表。以下列表显示了一个伪代码序列,其中包含设置设备和与ADC接口的微控制器,以便从ADS1219连续读取后续读数转换模式。公式 10将输入AIN0处的输入电压表示为R热敏电阻两端的电压,鉴于公式 11示出了ADC如何将AIN0处的电压转换成相应的数字代码。使用10-kΩ热敏电阻的温度测量是使用比率测量实现的实现最佳精度的方法。原创 2023-09-04 10:26:11 · 285 阅读 · 0 评论 -
几条加工中心的代码理解
如果是较高速第一阶段会触发减速,如果是缓速二阶段会触发立即停止,下位机缓冲队列也清空,这个相当于终止条件的概念,会引入一个触发器,大概相当于G1x100orI5,I代表输入。U 指 X轴方向 毛坯尺寸到精车尺寸 二分之一 ,如毛坯100,精尺寸80,即 U=(100-80)/2=10。在执行g31的时候,遇到触发开关机器停 ,缓冲池里有没有执行完的数据包怎么处理?它可以按零件轮廓的形状重复车削,每次平移一个距离,直至达到零件要求的位置。这种车削循环,对余量均匀,如锻造、铸造等毛坯的零件是适宜的。原创 2023-07-31 09:36:27 · 427 阅读 · 0 评论 -
RS274 NGC的使用
DAXIS_ERROR选项,如果RS274/NGC程序的一个输入用到了解析器不能编译的一个旋转轴时,你若想要解析器报告该错误的话,需要使用此选项.3,如果用户选择 4 ,会再次弹出相同的菜单,由"turn block delete switch ON"转换为"turn block delete switch OFF",当 4 被选中的时候,两个开关进行来回切换。1,当选择1的时候,菜单消失,解析开始。2,如果用户选择 2 或 3 的时候,用户会被提示输入文件的名字,并且再次出现相同的菜单。原创 2023-09-11 07:15:00 · 432 阅读 · 0 评论 -
PCA9535模块移植
在虚拟机环境里面找到内核文件 更改需要的信息 比如内核设备名称与设备树的名称是否一样如有需要添加的应用程序 也需要添加进去 根据实际情况来。pca9535是一块i2c接口的io扩展芯片,具有16个io端口,可以写一个pca9535的i2c设备驱动注册进内核,通过应用程序调用文件系统接口和它通信,但是内核提供了一个更方便方法,内核提供了一个i2c转gpio驱动,在文件中,这个驱动将pca9535模拟成了一个gpio控制器,然后可以像操作普通的gpio一样通过/sys文件系统读写操作来操作pca9535上的原创 2023-11-08 11:50:20 · 1479 阅读 · 0 评论 -
PCA9698的IIC转接GPIO控制N路灯
PCA9698验证灯的办法和PCA9535验证6路数字继电器,编译成ko直接Insmod,然后查看/dev/节点有了吗?然后用iictool命令往对应iic地址上面写数据,看看灯亮灭或者听继电器开关声响,至于写多少,研究芯片手册上面参数。系统启动后,i2c设备可以成功驱动挂载,在/sys/class/gpio/下新增了gpiochip462#,可以export 相应的管脚,管脚配置使用正常配置的中断引脚可以看到。思路:IIC代码,不加驱动,但是写的话写入了底层那种IIC应用层找到能用。原创 2023-11-15 00:30:00 · 532 阅读 · 0 评论 -
linux检测socket网络掉线keep-alive
在写TCP/IPServer程时候,发现有时候网线拔了,没有办法检测网络异常,最后在网上找到,用Keep-Alive感觉还不错。客户端程序异常,在服务端处理这个异常就可以了。网络链路异常如:网线拔出、交换机掉电、客户端机器掉电。当出现这些情况的时候服务端不会出现任何异常。这样的话上面的代码就不能处理这种情况了。如果您需要确定连接的当前状态,请进行非阻止、零字节的 Send 调用。如果该调用成功返回或引发 WAEWOULDBLOCK 错误代码 (10035),则该套接字仍然处于连接状态;否则,该套接字不再处原创 2020-08-31 18:00:16 · 1588 阅读 · 0 评论