自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(229)
  • 资源 (8)
  • 收藏
  • 关注

原创 【网络层】负载分担、路由备份、缺省路由

静态路由支持到达同一目标网络的cost开销是一样的,这种路由叫做等价路由。也就是数据包两条路都能走,实现流量负载分担,提高链路利用率。路由备份又称浮动静态路由。在真正的网络中,要求利用优先级的特性,配置浮动路由。主要解决在主路由失效的情况下,浮动路由会加入到路由表并承担数据转发业务。

2024-08-10 09:31:50 861

原创 【网络层】直连路由、静态路由、动态路由

配置简单、开销小通过手动配置进行添加和维护无法根据拓扑的变化而自适应适合于组网规模较小的场景,在大型网络环境,则配置及维护成本很高在大型网络中,往往采用动、静态路由结合的方式部署网络路由器之间交互的一种语言共享路由信息维护路由器、提供最佳转发路径。

2024-08-10 08:57:21 1532

原创 【网络层】路由基础

路由设备接收到数据包,检查二层目的MAC地址是否与自己硬件地址匹配。若不匹配就丢弃;若匹配,先通过二层帧CRC校验,确保数据没有在传输过程中出现异常。拆解二层数据拿到三层包头数据。根据三层的校验头来确认数据包的完整性,若正常则获取三层目的IP地址,查看IP地址是否为本机接口地址或者是广播地址之类的群发地址。若是则会进一步拆解包头获取数据,若不是就代表这个数据需要被转发,查找路由表,确认最优路线。处理三层报文中 TTL -1,计算校验和,为了给下个设备进行校验。根据地

2024-08-10 07:31:13 585

原创 【应用层】FTP/TFTP 系统升级和备份文件管理

根据实际的场景选择使用其中哪种协议,FTP可靠(在跨网段或广域网之间使用较好),TFTP不可靠 (在局域网内对可靠性要求不高使用较好)版本号:自身版本号5.130,设备型号AR200,关联产品版本号 V200 (产品码),R003(大版本号),C00(小版本号)比如在航空,工厂,交通等领域,谨慎升级!可以在本地将文件拷贝到usb上,接在设备的USB口,将文件使用cope 命令拷贝到指定目录下。就像生活中游戏软件,每个玩家都知道升级到最新版本是最好的,里面有新开发的玩法或者修复版本中现存在的BUG。

2024-08-09 17:09:58 623

原创 网络协议 从入门到精通系列讲解 - 总目录

👦 作者介绍:Bazinga bingo,专注网络协议基础学习以及协议应用硬核干货分享,潜心修炼,虚心学习,立志将每个网络协议最简单的方式分享大家。📕 本文收录于《网络协议 + eNSP + Wireshark》专栏,包含介绍网络七层协议中的各个网络协议。从网络协议概念让大家了解协议作用,特点,优势等;通过华为提供的eNSP工具搭建拓扑图让大家深入感受协议的工作原理;过程中用Wireshark工具抓协议包让大家了解协议中每个字段的含义与作用。

2024-08-03 12:30:36 702

原创 【工具篇】华为VRP通用操作系统 —— 配置文件管理

当配置设备时,命令都会保存在current-configuration中。可以通过 display current-configuration 命令查看当前运行的配置信息,这些数据都是保存在RAM中。因此当设备在配置过程中遇到断电或则设备异常重启的情况,之前没有及时保存到saved-configuration里面的配置会丢失。这是因为VRP文件系统空间有限,所以配置文件在保存时自动要做压缩处理。在 eNSP 中,用户可以通过命令行界面(CLI)进行配置文件的管理,包括查看、编辑、保存和恢复配置文件等操作。

2024-08-03 11:40:21 611

原创 【应用层】远程登入管理设备 Telnet

Telnet是一种基于文本的网络协议,它允许用户通过虚拟终端的方式远程登录到其他主机。最初设计于1960年代,并在RFC 854中定义,Telnet工作在应用层,使用TCP作为传输层协议,端口号为23。Telnet协议的工作原理主要包括建立连接、协商选项和数据传输三个步骤。在实际应用中,Telnet可以用于远程配置和管理网络设备。管理员可以使用Telnet远程连接到设备上,进行集中的管理和维护。然而,由于Telnet协议使用明文形式传输数据,存在一定的安全性风险,因此推荐使用更安全的SSH协议作为替代。

2024-08-03 11:21:01 1423

原创 【工具篇】eNSP连接真机环境搭建

重启电脑后就会出现回环网卡的选项(注:Loopback是小编自己给网卡取得名字,你也可以,如果你需要的话)因此在做eNSP与真机联调测试时,最好连接真机上的回环网卡。这样整个测试环境更加干净,并且稳定。如果没有回环网卡的选项,先查看电脑上回环网卡是否安装成功。如果安装成功,必须重启电脑。eNSP(华为网络模拟器)是一个网络仿真平台,用于模拟和测试网络设备和配置。这里添加两条规则:2端口入,1端口出;1端口(回环端口)和2端口(eNSP里的端口)1、PC基础配置(先右击图标开启PC)

2024-08-03 09:27:46 807

原创 【工具篇】eNSP工具 —— 使用报错集

假如该路由器不能正常启动,建议重装ensp,如果可以,那执行下面操作。

2024-08-03 09:00:00 504

原创 【工具篇】华为VRP通用操作系统 —— 基础命令介绍

通过上一节的华为VRP通用操作系统介绍,掌握如何登入设备以及命令行架构。也通过eNSP虚拟器搭建拓扑成功登入华为VRP通用操作系统。本文章介绍基础命令以及快捷键,后续文章会根据协议介绍相关命令。

2024-08-02 19:19:35 421

原创 【工具篇】华为VRP通用操作系统 —— 基础知识

华为VRP(Versatile Routing Platform)是华为公司数据通信产品的通用操作系统平台。它以IP业务为核心,采用组件化的体系结构,提供了丰富的功能特性,并且支持基于应用的可裁剪和可扩展性,从而使得路由器和交换机的运行效率大大增加。VRP平台支持多种网络协议和业务,如路由协议、QoS技术、VPN技术、安全技术等,并具备出色的数据转发能力。华为公司具有完全自主知识产权的网络操作系统可用运行多中硬件平台之上(路由器、交换机、防火墙)拥有一致的网络界面、用户界面和管理界面。

2024-08-02 19:06:35 1327

原创 【数据链路层】组播、广播、单播

单播是指发送方将数据发送给一个特定的接收方。在这种情况下,每个数据包都是单独发送给一个特定的接收方。

2024-07-30 10:28:13 777

原创 [FreeRTOS 功能应用] 任务通知 功能应用

从串口可以看出,由于发送的数据使用覆盖的方式,所以代码中循环调用xTaskNotify函数发送时,会将数据进行覆盖。因此task2接收时只会接收都最后一个数值量。使用xTaskNotify()向指定task2任务发送通知,发送的数据使用覆盖的模式进行。使用xTaskNotifyWait()等待接收通知,接收数据成功后打印接收到的数值。

2024-07-13 09:24:06 429

原创 [FreeRTOS 内部实现] 任务通知

xTaskNotifyWait(): 允许任务等待接收通知,并可以设置在进入和退出时要清零的通知比特位。uint32_t *pulPreviousNotificationValue:更改前的通知值。xTaskNotify(): 向指定任务发送通知,并可选择如何更新接收任务的通知值。taskNOT_WAITING_NOTIFICATION:任务没有在等待通知。taskNOTIFICATION_RECEIVED:任务已经接收到通知。taskWAITING_NOTIFICATION:任务正在等待通知。

2024-07-13 07:21:36 618

原创 [FreeRTOS 基础知识] 任务通知 概念

实时操作系统(RTOS)的任务通知机制是一种用于任务间通信和同步的机制。在FreeRTOS中,任务通知允许一个任务向另一个任务发送通知,表明某个事件已经发生或者某些条件已经满足。这种机制特别适用于轻量级的同步需求,因为它不需要使用更重的互斥锁或信号量。任务通知包括一个32位的通知值,这个值可以是整数或者位掩码,具体含义由应用程序定义。任务可以等待特定的通知值或位掩码,以便在通知发生时采取相应的行动。每个任务都会自己的任务结构体TCB,任务C的TCB结构体中有两个成员,一个是val值,一个是state状态。

2024-07-08 21:34:27 410

原创 [FreeRTOS 功能应用] 事件组 功能应用

函数中通过osThreadDef 宏构建osThreadDef_t 结构体,名称os_thread_def_##name(## 表示字符拼接),结构体成员包括 :#name 任务名称;thread 任务处理函数;通过xEventGroupSetBits函数,设置 g_EventGroup 结构体中的事件状态标志位,表示task1执行完成。通过xEventGroupSetBits函数,设置 g_EventGroup 结构体中的事件状态标志位,表示task2执行完成。任务实现:task1完成后执行task2;

2024-07-06 21:22:17 812

原创 [FreeRTOS 内部实现] 事件组

考虑到第一种情况,多任务之间操作队列会相互影响,可以采取关闭调度器来解决,但是不能屏蔽掉中断中对队列的读写操作。如果只关闭调度器的话,中断对队列的操作同样会对正在的任务有影响。因此任务在对队列进行操作时,第一步一定是要关闭中断。第四参数 const BaseType_t xWaitForAllBits:等待的位是同时满足还是只要一个成立就满足(等待位是 与的关系 还是 或的关系 )第三参数 const BaseType_t xClearOnExit :在退出的时候是否对等待的位进行清除。

2024-07-06 20:28:08 620

原创 [FreeRTOS 基础知识] 事件组 概念

在实时操作系统(RTOS)中,事件组是一种用于任务间通信和同步的机制。事件组允许多个任务等待一个或多个事件的组合,当这些事件的组合满足特定条件时,任务可以被唤醒。

2024-07-06 17:40:31 235

原创 [FreeRTOS 功能应用] 互斥量 功能应用

函数中通过osThreadDef 宏构建osThreadDef_t 结构体,名称os_thread_def_##name(## 表示字符拼接),结构体成员包括 :#name 任务名称;thread 任务处理函数;priority 任务优先级;若低优先级获取到互斥锁没有释放之前,高优先级任务获取互斥锁失败后会提高低优先级的任务,等低优先级释放锁之后,高优先级才能获取到锁运行。将构建的osThreadDef_t 结构体传入osThreadCreate函数中,实际调用xTaskCreate函数创建任务。

2024-07-06 13:25:20 927

原创 [FreeRTOS 内部实现] 互斥量

根据上面的定义,可知创建互斥量本质就是创建队列。长度(第一个参数)为1,大小(第二个参数)为0。通过队列获取互斥量 函数与获取信号量 的方式是一样的。

2024-07-06 10:25:48 465

原创 [FreeRTOS 基础知识] 互斥量 概念

若此时中优先级任务B一直占用CPU资源运行,则低优先级任务C永远得不到机会释放信号量,从而高优先级任务A也永远获得信号量运行。此时低优先级任务C获得执行权限,运行并释放信号量sem,同时唤醒高优先级任务执行并恢复之前的优先级。3、在高优先级任务A运行过程中,由于低优先级任务C占用信号量资源,则获取信号量失败,会将任务挂起。2、在中优先级任务B运行过程中,高优先级任务A抢占CPU资源运行,中优先级任务B停止运行。4、高优先级任务A挂起后,中优先级任务B优先获取CPU使用权运行。互斥量比信号量多了个。

2024-07-06 09:08:28 290

原创 [FreeRTOS 功能应用] 信号量 功能应用

函数中通过osThreadDef 宏构建osThreadDef_t 结构体,名称os_thread_def_##name(## 表示字符拼接),结构体成员包括 :#name 任务名称;由于是二进制信号量,在释放send信号量后,空间中就存在一个信号量。这个信号量没有被取走之前,继续释放(发送)信号量就会失败。直到信号量被取走,触发等待的释放信号量任务。当连续发送时,数字大于1就会显示发送失败,这个任务放入队列中等候。两个任务Sender1负责释放信号量,一个任务Seceiver接收信号量。

2024-06-24 21:51:30 691

原创 [FreeRTOS 内部实现] 信号量

根据上面的定义,可知创建信号量本质就是创建队列。长度(第一个参数)为1,大小(第二个参数)为0。

2024-06-24 21:03:51 481

原创 [FreeRTOS 基础知识] 信号量 概念

信号量是一个抽象的数据类型,通常包含一个整数值以及一个等待该值变为正数的任务列表(也称为等待队列)。信号量的整数值代表了系统中某种资源的可用数量。在操作系统中信号量用于控制对共享资源访问的同步机制。它最初由荷兰计算机科学家Edsger Dijkstra提出,用于解决并发系统中的互斥和同步问题。简而言之,信号量是用来表示资源的个数。信号量核心就是个计数值。假如银行能办理业务的窗口只有5个,这里资源数count 指的就是窗口个数5。当窗口没有人办理业务时,count =5 空闲资源;

2024-06-24 20:52:35 874

原创 [FreeRTOS 功能应用] 互斥访问与回环队列 功能应用

thread 任务处理函数;:每个任务在创建时都会返回一个任务句柄( TaskHandle_t ),这个句柄可以用来唯一标识一个任务。可以在任务函数中使用 xTaskGetCurrentTaskHandle() 函数获取当前任务的句柄,然后与已知的任务句柄进行比较。在这个示例中, 使用 xTaskGetCurrentTaskHandle() 来获取当前任务的句柄,然后调用 pcTaskGetTaskName() 来获取任务名称,并将其打印出来。这样,每次任务执行时,都会打印出当前是哪个任务在运行。

2024-06-23 08:19:41 985

原创 [FreeRTOS 内部实现] 互斥访问与回环队列

等待发布到此队列的阻塞任务列表。按优先级顺序存储。阻塞等待从此队列读取的任务列表。按优先级顺序存储。指向存储区的下一个空闲位置。指向将该结构用作队列时最后从其中读取队列项的位置。

2024-06-23 06:58:38 426

原创 [FreeRTOS 基础知识] 互斥访问与回环队列 概念

缓冲区本质上就是数组,假设这个缓冲区的长度为8,写缓冲区指针w刚开始在0的位置,每写一个val,指针w位置+(1%8),以此类推,最后的w+(8%8)。,假设有两个函数(func_A, func_B)都要修改a的值(a++),那么将a定义为全局变量a=0,main函数调用func_A();当有多个任务操作变a时,为了确保每个任务操作a期间不被其他任务所影响,就调用队列来做隔离,任务B要去读a的值时直接调用队列处理好的数据即可。第二个时间片段:任务B运行,读队列,没有得到a的值,将任务B休眠;

2024-06-23 06:40:30 667

原创 [FreeRTOS 内部实现] 创建任务 xTaskCreate函数解析

(16)STR r0, [sp, #0x190]: 将r0寄存器的值再次存储到栈指针sp地址偏移0x190的位置。(12)STR r0, [sp, #0x190]: 将r0寄存器的值存储到栈指针sp地址偏移0x190的位置。(10)STR r0, [sp, #0x00]: 将r0寄存器的值存储到栈指针sp地址偏移0的位置。(17)STR r0, [r4, #0x00]: 将r0寄存器的值存储到r4寄存器指向的地址。(11)LDR r0, [r4, #0x00]: 从r4寄存器指向的地址加载数据到r0。

2024-06-23 06:21:07 1259

原创 [FreeRTOS 基础知识] 保存现场与恢复现场

在[FreeRTOS 基础知识] 栈 与 汇编语言文章中解析了fun_c汇编函数,假设在执行fun_c函数的过程中产生高优先级的中断。如下图所示。此时刚从RAM的SP栈中获取到值保存到R0,发生中断。此时需要保存R0的值,这样当中断处理函数执行完之后回到此函数还知道R0的值是多少。这就是保存环境。通过RAM架构可知,在SOC上有R0~R15寄存器。汇编语言中可以看出,CPU当前所运行的环境就是这些寄存器构成的。当CPU发生中断、跳转、任务切换的时候,只要将这些寄存器的值保存下来。

2024-06-10 18:06:16 669

原创 [FreeRTOS 基础知识] 任务调度 与 链表

此时,当Tick中断到来时遍历优先级为4里的任务,取出task1运行完,将task1移动至task10后面。若要使任务并行运行,可以将吃饭和手机回复信息两个任务的时间打碎并且穿插在一起运行(时间:a1、b1、a2、b2、a3、b3、a4、b4、a5、b5、a6、b6)在RTOS中存在多个任务(假如 task1~ task10),为了实现多任务同时调度运行,内部维护三类任务链表。同样在一个时间段中只能处理手机回复信息任务,这时会循环执行手机回复信息任务(时间:b1 ~ b6)。优先级值越小,任务优先级越高。

2024-06-10 18:00:17 602

原创 [FreeRTOS 基础知识] 栈 与 汇编语言

在上面的过程中发现lr的值会被覆盖,若被覆盖就会导致找不到之前函数返回的地方。因此在每个函数的第一条反汇编会把lr值保存到栈中(使用push命令),当函数结束的时候使用pop命令回到之前的位置。所谓的栈就是一块空间的内存,CPU的SP寄存器指向它,它可以用于函数调用,局部变量,多任务系统里保存现场。其中的xxx.axf文件在linker中获取。

2024-06-03 21:24:40 351

原创 [FreeRTOS 基础知识] 堆

会先判断g_heap.next_free所指向的头部中size的大小,若大于申请的空间就会划分出两块,一块为分配的空间,另一块为空闲空间。会根据传入的地址(实际可操作的堆空间的起始地址)减去固定的头部大小,找到头部中这块申请的堆空间大小。定义出一块堆的空间heap_buf,可以在这块堆空间上任意申请,使用和释放空间。根据单步调试情况可以看出:buf分配的起始地址就是heap_buf 堆空间起始地址,并且完成对堆空间的写入。,在分配实际内存前有一段头部空间,其中存放分配这段内存的相关信息包括分配的空间大小。

2024-06-03 21:16:12 829

原创 【应用层】 DNS 域名协议解析

DNS(Domain Name System,域名解析系统),因特网上作为域名和IP地址互相映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机对应的IP地址的过程叫做域名解析(或主机名解析)。

2024-06-02 09:26:38 828

原创 【网络层】IP因特网协议解析

Time to Live大小8位,用于设置一个数据报文可经过的路由器的数量上限,可路由的次数,IP数据报文防环的底线,单位为s对应生存跳数,而不是跳数。第一个分片数据报文偏移为0,第二个为第一个数据报文的大小,以此类推,第n个为前n-1个数据报文的大小之和。大小16位,在三层把流量区分开来,同一种流量在网络层的标识符就是相同的,用于流量分片。注:ping过大的包,有些设备是不会回复,显示超时。标识上一层的协议号(0-255)8为大小,用于识别封装的协议是否为一种传输层协议。全0,把首部补成4B的整数倍。

2024-06-01 09:18:50 1336

原创 【网络层】IP地址基础 与 子网掩码

设备即使没有搭建任何网络环境,也是可以ping通127开头的IP。若没有ping通,那么设备TCP/IP协议栈的组件都没有装。A、B、C三类的所有其余IP都是公网IP,私网IP只会出现在私网中,公网IP只会出现在公网中。每个网段上都有两个特殊地址(最大和最小)是不能够使用的:网络地址和广播地址。IP地址:IP Address 在网络中,通信节点都需要有一个IP地址。根据第一组8位二进制 将IP地址分为A,B,C,D,E五类地址。在IP地址中定义了两种地址:公网地址和私网地址。由子网掩码决定 “分界点”

2024-06-01 08:29:59 627

原创 【网络层】ICMP 因特网控制协议

这种情况和上面的设备不在线,区别在于这个设备之前已经通过ARP获取到MAC地址(在MAC地址缓存表中存在MAC地址),封装ICMP将数据发出去,但迟迟没有得到回应。这例子中1.2.3.4为检测到是其他网段的,所以在封装ICMP的时候目标MAC为本地设备网关的MAC地址。在链路中数据是以帧的形式传输的,封装ICMP时,由于在MAC表中没有找到这个IP对应的MAC地址,因此会先发出ARP请求获取这个IP的MAC地址。现象:ping 对端设备ip地址失败,但是对端ping 本地设备是通的(屏蔽)

2024-05-28 15:34:05 842

原创 【网络层】网络攻击 ARP 欺骗

PC2接收到路由器AR1的响应包,MAC为00-00-00-00-00-01。之后又接收到PC1的响应包,MAC为:00-00-00-11-11-11,并将之前正确的地址覆盖。4、由于ARP协议本身不验证回复包的真实性,网络中的其他主机会更新它们的ARP缓存,将攻击者的MAC地址与那个IP地址关联起来。5、当网络中的其他主机尝试与那个IP地址通信时,他们会将数据包发送到攻击者的MAC地址,而不是真正的目标主机。3、然而,攻击者会伪造一个ARP回复包,声称自己拥有那个IP地址的MAC地址。

2024-05-27 09:41:27 190

原创 [ FreeRTOS 基础知识] RTOS 背景介绍

(1)实时操作系统,本用于追求实时性的嵌入式系统。典型:ucos、uclinux、vxworks(实时性的指当事件产生的时候,需要花多久的时间做出响应。(2)特点:中断响应快、一般可嵌套中断、使用实地址、多任务当发生一个中断,正在处理中断处理程序的时候,又发生一个中断(这个中断的优先级高于正常处理的中断)。系统会从刚刚处理一半的中断处理程序中跳出来,再次中断处理刚发生的这个高优先级中断的处理函数。当执行完这个中断处理函数后,会接着处理之前没有处理完的中断处理函数中执行。

2024-05-26 16:55:35 352

原创 Jenkins工具系列 —— 通过钉钉API 发送消息

如果自定义机器人的安全设置使用的是自定义关键词,调用本接口发送消息时,发送消息需要包含关键词(这里需要包含Mib)

2024-05-23 14:51:24 1253

原创 【网络层】ARP 地址解析协议

本机为了获取对端设备的位置(目的MAC地址),在当前的环境中大喊:IP为XX.XX.XX.XX (小王)在哪里?上图所示,当PC1去访问PC2的时候,帧包中只知道PC2目标的IP不知道它的MAC地址(MAC地址是没有规律的,每个设备的MAC地址都是全球唯一的,因此PC1不可能知道PC2的MAC地址)。但是ARP缓存中的信息是有时间限制的,在时间到了之后就会自动清空ARP缓存。在同一个广播域中的主机都会收到广播帧,只有目标IP匹配的设备才会有回应,其他设备即使收到广播帧发现目标IP不匹配,不会有回应的。

2024-05-20 14:55:37 1800

[ FreeRTOS ] 任务通知 功能应用

本实验是基于STM32F103开发移植FreeRTOS实时操作系统,任务通知实战操作。 使用工具:Keil、串口工具 描述: 实时操作系统(RTOS)的任务通知机制是一种用于任务间通信和同步的机制。在FreeRTOS中,任务通知允许一个任务向另一个任务发送通知,表明某个事件已经发生或者某些条件已经满足。 这种机制特别适用于轻量级的同步需求,因为它不需要使用更重的互斥锁或信号量。 RTOS中 任务通知函数接口 :发送通知函数 xTaskNotify;任务通知等待 xTaskNotifyWait osThreadCreate创建任务

2024-07-13

[ FreeRTOS ] 事件组 功能应用

本实验是基于STM32F103开发移植FreeRTOS实时操作系统,事件组实战操作。 使用工具:Keil、串口工具 描述: 在实时操作系统(RTOS)中,事件组是一种用于任务间通信和同步的机制。事件组允许多个任务等待一个或多个事件的组合,当这些事件的组合满足特定条件时,任务可以被唤醒。 RTOS中 事件组函数接口 :xEventGroupCreate 函数创建事件组;xEventGroupWaitBits事件组等待位;xEventGroupSetBits 事件组设置位 osThreadCreate创建任务

2024-07-06

FreeRTOS 互斥量 功能应用

本实验是基于STM32F103开发移植FreeRTOS实时操作系统,互斥量实战操作。 使用工具:Keil、串口工具 描述: 互斥量(Mutex,全称:Mutual Exclusion),在计算机科学中,是一种用于防止多个进程同时访问某个共享资源的同步机制。互斥量通常用于多线程环境中,以确保在某一时刻只有一个线程可以访问特定的数据或代码段。 RTOS中 信号量函数接口 :xSemaphoreCreateMutex函数创建信号量;xSemaphoreGive释放信号量;xSemaphoreTake接收信号量 osThreadCreate创建任务

2024-07-06

[FreeRTOS ] 信号量 功能应用

本实验是基于STM32F103开发移植FreeRTOS实时操作系统,信号量实战操作。 使用工具:Keil、串口工具 描述: 信号量是一个抽象的数据类型,通常包含一个整数值以及一个等待该值变为正数的任务列表(也称为等待队列)。信号量的整数值代表了系统中某种资源的可用数量。 在操作系统中信号量用于控制对共享资源访问的同步机制。它最初由荷兰计算机科学家Edsger Dijkstra提出,用于解决并发系统中的互斥和同步问题。 简而言之,信号量是用来表示资源的个数。信号量核心就是个计数值。 RTOS中 信号量函数接口 :xSemaphoreCreateBinary函数创建信号量;vSendTask 释放信号量;vSeceiverTask 接收信号量 osThreadCreate创建任务

2024-06-24

[FreeRTOS ] 互斥访问与回环队列 功能应用

本实验是基于STM32F103开发移植FreeRTOS实时操作系统,实现多任务同时读写队列数据操作。 使用工具:Keil、串口工具 描述:当有多个任务操作变a时,为了确保每个任务操作a期间不被其他任务所影响,就调用队列来做隔离,任务B要去读a的值时直接调用队列处理好的数据即可。 队列的任务:1、关闭中断;2、环形缓冲区(操作a的值);3、链表操作;4、打开中断 当任务A调用队列关闭中断后,其他任务不会再被调度执行(相当于逻辑程序),操作完变量a之后,打开中断,此时恢复CPU调度机制。使用队列可以实现互斥访问,避免多个任务同时操作一个变量时造成的异常现象。 RTOS中 调度队列函数接口 :创建队列xQueueCreate,写队列xQueueSend,读队列xQueueReceive 创建任务osThreadCreate

2024-06-23

【Jenkins工具系列 python文件】 通过钉钉API 发送消息资源

本资料针对自定义机器人的安全设置使用的是加签方式,通过钉钉API接口发送数据。 使用前请修改以下参数: access_token=xxxx,表示自定义机器人调用接口的凭证。在机器人设置里字段Webhook。 secret = 'SECXXXX' 指的是机器人安全设置页面,加签一栏下面显示的SEC开头的字符串。 文件dingtalk.py 运行产生时间戳 timestamp 和签名值sign 文件dingtalk通过钉钉API接口发送信息 运行方式: 将两个文件拷贝到系统中 添加权限命令:chmod 777 dingtalk.py dingtalk 运行命令:./dingtalk

2024-05-23

Linux谨慎使用system函数以及对应解决方案

被system()函数折磨过都知道,system这不单单是一个函数这么简单。使用它会带来各式各样的bug。排查起来很麻烦,因为它的返回值很多不好定位。但是想执行一些命令,这里提供两个方案,避开system函数带来的麻烦,还可以很好定位问题。代码可以直接移植,调用接口使用。

2024-05-07

STM32提高篇 (二) - 触摸校准

本代码通过FSMC模块, 触摸屏驱动芯片XPT2046 实现: TFT_LCD屏触摸校准 TFT_LCD屏显示,填充颜色 TFT_LCD屏显示,显示字符或字符串 TFT_LCD屏显示,显示中文 TFT_LCD屏显示,显示图片 TFT_LCD屏绘制直线、矩形、圆形 了解整个TFT_LCD驱动框架的实现,以及数据如何从STM32流向屏幕,并显示出来的。 触摸屏的实现流程,校准编程逻辑 代码测试通过,结合 《stm32专栏》 中的知识点。

2023-11-11

STM32提高篇 (一) - LCD显示各种基础小功能实验

本代码通过FSMC模块实现: TFT_LCD屏显示,填充颜色 TFT_LCD屏显示,显示字符或字符串 TFT_LCD屏显示,显示中文 TFT_LCD屏显示,显示图片 TFT_LCD屏绘制直线、矩形、圆形 了解整个TFT_LCD驱动框架的实现,以及数据如何从STM32流向屏幕,并显示出来的。 代码测试通过,结合 《stm32专栏》 中的知识点。

2023-11-11

Linux内核系统 panic log 记录

现象: 小伙伴有没有遇到这样一个场景。当用户手上的系统设备没有接上串口,此时系统发生了不知名的panic 崩溃,看门狗重启了。这时再去分析查看panic 信息log已经消失了。 解决方案:小编在项目中遇到这种情况,利用panic 函数将系统重启之前有必要的一些打印保存下来再重启。这就保证看门狗重启之后,还能查看到系统重启之前的相关系统环境。

2023-09-01

STM32开发(八)STM32F103 SPI 通信(W25Q64JVSSIQ )代码

通过STM32F103 的SPI功能,实现对W25Q64JVSSIQ (Flash芯片)芯片擦除,读数据,写数据等操作。SPI 通信代码包括 通信时序、相关回调函数、Flash芯片的读写使用函数以及相关接口等。代码测试通过,结合 《stm32专栏》 中的知识点,更加深入了解 SPI 整个通信过程,以及 SPI 时序。

2023-08-22

STM32开发(七)STM32F103 I2C (SHT30温湿度传感器)通信代码

I2C 通信获取SHT30温湿度值,显示数码管。I2C 通信代码包括 通信时序、相关回调函数、显示数码管获取SHT30温湿度值等。代码测试通过,结合 《stm32专栏》 中的知识点,更加深入了解 I2C 整个通信过程,以及 I2C 时序。

2023-08-21

STM32开发(六)STM32F103 RS485 Modbus通信代码

RS485 Modbus通信代码包括 通信时序实现、CRC_16检验、以及相关回调函数实现。代码测试通过,结合 《stm32专栏》 中的知识点,更加深入了解RS485 Modbus整个通信过程,以及RS485 Modbus时序。 整个代码分为驱动部分和底层配置部分(CUBE生成的代码),驱动部分可移植到各个平台通用。大大减小开发难度,提高开发效率。 适用人群:热爱技术的技术猿

2023-08-09

STM32基础(五)STM32F103 CAN通信代码

代码从can回环测试和对接两种方式进行编程,代码完整结合 《stm32专栏》 中的知识点,更加深入了解CAN通信,以及CAN时序测试。 整个代码分为驱动部分和底层配置部分(CUBE生成的代码),驱动部分可移植到各个平台通用。大大减小开发难度,提高开发效率。 适用人群:热爱技术的技术猿

2023-08-09

Jenkins 使用INJECTOR插件实现修改环境变量(亲测实用)

Jenkins就像是项目的管家,可以将同步代码编译,通知,发布等 繁琐的工作交给它来做。开发者可以全身心的投入到项目的开发中。INJECTOR就是一个可以针对JOB创建环境变量等,创建修改删除环境变量之后可以使用到其他的通知工具中,如钉钉、邮箱等都能进行使用。

2023-08-09

STM32基础篇(三) STM32F103 显示 数码管显示

了解 TM1620芯片手册 。本实验是基于STM32F103开发 通过GPIO模拟时序 实现TM1620数码管显示。 适用人群:热爱技术的技术猿

2023-08-02

STM32基础篇(四) STM32F103 片内资源 实时时钟RTC

本实验通过stm32片内资源RTC实现实时时钟,通过数码管显示时间。设定闹钟,实现准点报时。 数码管相关知识点: 1、数码管 TM1620芯片手册 解析 2、数码管显示 适用人群:热爱技术的技术猿

2023-08-02

各种版本openJDK安装包(通用)

安装java 方式一、使用apt-get工具安装 方式二、手动安装java 卸载java https://blog.csdn.net/weixin_43564241/article/details/132030549?spm=1001.2014.3001.5501

2023-08-01

STM32基础篇(二) 使用虚拟机 + VScode + STM32Cube 框架搭建 开发STM32

初学者开发stm32必先构建开发环境,安装虚拟机 + VScode + STM32Cube 软件,并在工程中建立自己驱动库框架,以便后续更轻易的修改添加功能。 具体实现查看资源中REDME。 适用人群:热爱技术的技术猿

2023-07-30

STM32基础篇(一) - 使用STM32CUBE kail5 框架搭建 开发STM32

初学者开发stm32必先构建开发环境,安装STM32CUBE kail5软件,并在工程中建立自己驱动库框架,以便后续更轻易的修改添加功能。 适用人群:热爱技术的技术猿

2023-07-30

图片取模工具 PCtoLCD2002软件

LCD屏幕显示各种图片以及字符需要一款软件将想要显示的内容转化为代码的形式,PCtoLCD2002软件支持两种模式取模:字符模式、图形模式。

2023-06-09

input核心层对驱动层和事件层之间的框架建立流程图

input核心层对驱动层和事件层之间的框架建立流程图,从驱动层设备向input子系统注册到事件层向input子系统注册的具体流程图,还有驱动层和事件层如何完成匹配的?匹配后调用的回调函数有执行哪些动作?

2023-05-05

Linux Input 子系统框架 input-dev 、 input-handler、input-handle三结构体关系

input_hande 没有一个全局的链表,它注册的时候将自己分别挂在了input_dev 和 input_handler 的h_list上了。通过input_dev 和input_handler就可以找到input_handle在设备注册和事件处理器,注册的时候都要进行配对工作,配对后就会实现链接。通过input_handle也可以找到input_dev和input_handler。input_handle是用来关联input_dev和input_handler的。

2023-04-28

Linux Input 子系统框架

硬件输入设备:最底层具体设备(如:触摸屏、键盘、鼠标等) 内核空间: 驱动层:输入设备的具体驱动程序。负责将底层的硬件输入转化为统一的事件形式,向input核心层传达。 核心层:连接驱动层和事件层之间。负责双向提供接口,向下提供驱动层接口,向上提供事件处理的接口。 事件层:底层的设备抽象出对应的接口提供给应用层。将底层设备的触发的事件通过这个接口传达给应用层。

2023-04-28

热敏电阻采集温度 NTC 温度表(通用)

// DWB 温度表通过配置下列参数,计算出最小电阻值(kΩ) 中心电阻值(kΩ) 最大电阻值(kΩ) 最小电压值(V) 中心电压值(V) 最大电压值(V) 最小采集值 中心采集值 最大采集值 等信息 // 参数配置说明 基准电压:指ADC参考电压Vref 电源电压:指提供NTC模块的外部电压 测量电阻: 第一参数:指电路上参考电阻(与热敏电阻分压的电阻)是否接地 接地,选择'Y' ;不接地,选择'N' 第二参数:指测量电阻值 ADC位数:指使用的ADC位数 温度范围 温度下对应热敏电阻值

2023-04-07

flash写不固定长度数据函数思路流程图

写flash一次性只能写256字节,或者固定数据大小。对于不固定长度的数据,想要写入flash就要注意数据大小,否则会造成flash页覆盖的现象。这里提供一个flash写不固定长度数据函数思路流程图。

2023-04-01

RK — 读写Vendor Storage区域工具

针对Vendor Storage区域进行读写的方式可以使用RK在驱动中集成的接口,也可以用RK提供的工具。可以使用这个工具写入,在uboot、kernel、文件系统都能读出写入的值。Vendor Storage区域划分在flash中。产品烧写MAC地址,可以将MAC地址通过该工具写入Vendor Storage区域(flash中),内核中读出对应的MAC地址。

2022-07-08

udhcpc配置文件default.script

文件系统使用udhcpc获取IP,可是ifconfig查看网卡信息时,IP地址没有改变。

2022-03-17

Linux 文件系统切换脚本

文件系统apt安装软件或命令后,没有办法同步到外面零散的文件系统同步打包。需要安装的软件和命令依赖的库有时很多,不方便移植。 在板子工作时将零散文件系统包挂载到板子后,运行该脚本,实现切换到零散的文件系统运行。便于在零散文件中安装软件和命令等操作。 该脚本适用于多种文件系统,通用!!!!

2022-02-24

[ Linux Debian ] libmali安装包

libmali库是Chrome浏览器打开调用驱动底层的接口,与内核和Debian文件系统版本有关,该资料提供多个版本的安装包。

2022-02-04

[ Linux RK IMX ]UART结构体关系图

Linux 驱动涉及到UART、TTY层相关结构体之间的关系,各结构体之间是如何调用的?该资料整理各结构体通过注册函数以及其他的函数建立起关系图。可以更加深刻的认识应用层到驱动底层整个调用架构

2022-01-18

RGMII_Delayline_Kernel4.4.tar.gz

由于PCB的原因或者其他的原因会导致同一批次或不同批次的板子,延时值会有偏差。该补丁会在烧写后自动扫描延时值,拥有自动校准功能。

2022-01-13

GMAC tx rx delay动态调整补丁V2.0.rar

由于MAC端与PHY芯片的延时导致网口无法通讯的现象,提供相关补丁,该补丁适用于RK系列内核版本4.4和3.10,内核版本4.19和之后版本本身已经自带

2022-01-13

空空如也

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

TA关注的人

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