自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(404)
  • 资源 (2)
  • 收藏
  • 关注

原创 QuickJS快速体验:在C程序代码中调用JS脚本并执行

JS(JavaScript)是一种轻量级的面向对象的编程语言,目前使用非常广泛,既能在浏览器中使用,也能在服务器端作为后台(借助node.s),并且由于其是解释型语言,不需要提前编译,所以它就有了一个特别大的优势,它支持热更新(可以实现极其轻量级的OTA),所以这些年在嵌入式Linux中,有很多场景也开始引入了JS。不过JS也有缺点,因为是解释性语言,所以执行效率相比二进制编译语言,比如C,相对低。本文主要介绍借助QuickJS来体验一下再C程序代码中如何调用JS代码。

2024-01-21 22:06:21 663

原创 LwIP系列(6):TCP client 连接服务器3次握手代码流程简单分析

在上一篇文章中,我们详细描述了TCP 3次握手、4次挥手、状态机转换,本文从lwip的代码维度,分析下tcp client的发起连接的流程,之所以单独分析tcp client,是因为嵌入式设备,client使用场景较多。

2023-08-15 22:34:38 461

原创 LwIP系列(5):TCP 3次握手+4次挥手+状态机转换

防止旧的重复连接,引起连接混乱。client与server之间同步初始化序列号。3次握手能够在通信信道不保证可靠情况下,从软件流程上,保证TCP通信可靠的最小代价。

2023-07-09 19:24:32 1295

原创 LwIP系列(4):ARP协详解

对于应用程序而言,我们与其他设备、服务通信,主要通过域名、IP进行通信,而以太网底层驱动,最终是通过MAC地址来表示设备的唯一标识,即IP是逻辑地址,并不是物理地址。在上一篇文章中,我们也能看到以太网帧首部中,就包含了源、目的设备的MAC的地址。所以我们需要一种IP与MAC相互转换的协议,这种协议就是ARP和RARP.ARP : Address Resolution Protocol, 根据IP地址获取MAC。

2023-07-02 21:22:55 760

原创 LwIP系列(3):以太网帧、IP、TCP、UDP、IGMP、ICMP帧格式详解

TCP/IP 本质上是软件协议,而LwIP也是对软件协议进行解析处理,所以我们有必要了解下以太网帧、IP、TCP、UDP、IGMP、ICMP帧格式,这样在代码中,才能有的放矢。

2023-06-25 20:46:09 2755 1

原创 LwIP系列(2):动态内存池管理(memp.c)详细分析

我们在学习Lwip源码时,内存管理是绕不开的一个重点,我们在看相关的代码时,经常会看到和, 其中:(1)memp_malloc是从内存池中申请内存,具体实现在memp.c + memp.h。(2)mem_malloc则是从中申请内存,具体实现在mem.c + mem.h中。这两个API的区分也很容易,“p”是pool的简称,所以memp代表从内存池,mem是从内存堆。

2023-06-18 11:58:45 910

原创 LwIP系列(1):C语言宏定义相关基础知识(##、include 文件、宏函数、预编译)

对于嵌入式物联网技术来说,TCP/IP 协议几乎是不能绕过的,常见socket、tcp、udp、mqtt、coap、modbus-tcp、mdns、广播、组播等等,均是基于TCP/IP协议实现,无处不在。而目前在嵌入式领域,使用最多的TCP/IP协议栈就是LwIp,所以本系列尝试着从LwIP的详细分析,来入门学习TCP/IP协议。

2023-05-28 22:14:08 937

原创 RTOS系列(17):CPU启动、创建OS任务、启动首个任务、任务切换完整流程说明

在前面的系列文章中,我们详细讲述了RTOS所需的一些重点知识点,也分析了RTOS的启动、上下文的切换流程,本文总结一下CPU启动到创建OS任务、到启动首个任务、任务切换的完整流程。

2023-05-08 22:44:28 514 1

原创 单播、组播(多播)、广播概念及C语言编程demo

日常的网络编程中,不管是TCP还是UDP,应用程序主要是基于单播,即点对点通信,对组播和广播涉及的相对少。组播、广播的应用场景:在IOT物联网领域,组播和广播一般可用作设备的搜索发现,设备启动,并且有网络能力后,会通过组播或广播,向局域网内发布自己的设备信息,然后其他设备就能够发现感兴趣的设备,进而跟这些局域网内的设备通信。

2023-03-19 22:05:41 1621

原创 hashmap哈希map是什么?什么时候需要使用hashmap?C实现hashmap示例

对于C程序员,尤其是嵌入式C程序员,hashmap使用的相对较少,所以会略显陌生,hashmap其实涉及到2个概念,分别是哈希(hash)、map。哈希hash:是把任意长度输入通过蓝列算法变换成固定长度的输出,这种转换是一种压缩映射,一般不可逆。这是专业的解释,我们常说的crc16、crc32、lrc、md5、sha256等,本质上都是哈希hash,只不过散列算法不同而已。

2022-12-25 22:04:21 1417

原创 Coap协议RFC7252英文版地址 + 常见工业通信协议集合

整理了常用的工业通信协议、Coap协议,为了让大家方便使用,统一放置到gitee仓库,仓库地址如下:《》

2022-12-08 21:22:42 438 1

原创 gdb系列1:gdb基本原理概述、quickStart快速体验

嵌入式开发,debug不可或缺,每个人有每个人的debug思路,概况来说,基本上有两种,分别为使用debug工具,或基于debug log日志调试。其中debug工具,如果我们使用IDE开发程序,一些强大的IDE工具可以帮助我们便捷的debug程序,但是在Linux平台下的嵌入式开发,是没有特别好用的IDE的,所以gdb就出现了,gdb实现的功能类似我们RTOS开发环境中的keil、IAR提供的调试工具,只不过gdb是完全独立的工具。

2022-11-01 22:41:39 436

原创 RTOS系列(16):从0到1写一个简单、易懂、易用的RTOS ——K2OS 启动首个任务原理介绍

CPU从上电启动到OS接管,启动首个任务过程中,背后发生了很多动作,涉及的知识点也非常多,所以我们有必要详细分析一下RTOS启动首个任务的原理。

2022-09-03 22:31:00 656 1

原创 RTOS系列(15):从0到1写一个简单、易懂、易用的RTOS ——K2OS

前面的系列文章中,我们详细的分析了RTOS所依赖的各种基础知识点,文章即便写的再详细,相信很多人对RTOS仍然会觉得有点模糊,引用一句经典程序员术语:从本篇开始,我们从0到1写一个RTOS,通过自己动手,彻底搞清楚RTOS的运行机制。我们这款RTOS起名为K2OS(Keep simple、stupid OS),欢迎大家下载体验。

2022-09-03 22:08:52 930

原创 RTOS系列(14):提升RTOS实时性的算法技巧分析

在一般的应用程序开发中,我们很少会关注程序性能、实时性问题,一方面是因为CPU的硬件资源已经够用,另一方面就是一般的应用程序对于性能、实时性的要求并不会太高,几十毫秒的延时,可能对于多说应用程序的逻辑都是没有太大影响的。但是对于RTOS的代码,我们就需要重点关注代码是否高效、毕竟RTOS的R 是Real time的含义,即对实时性要求很高。...

2022-08-21 22:34:07 1168 2

原创 RTOS系列(13):汇编LDR指令、LDR伪指令、[Rn]寄存器间接引用 详细解析

汇编LDR指令在RTOS中使用的比较频繁,尤其是在PendSV中进行上下文切换的时候,LDR指令是不可缺少的,我们在看uC/OS、FreeRTOS、RT-Thread的源码时,都能够看到LDR的身影。由于LDR指令有2个名字LDR指令、LDR伪指令,这就给我们理解LDR带来了困难,很容易混淆。本文就详细分析一下汇编LDR、[Rn]间接引用的原理。......

2022-07-24 12:17:28 3330

原创 RTOS系列(12):使用SVC或PendSV启动OS流程详细分析

RTOS系列(1):基础知识——中断嵌套RTOS系列文章(2):PendSV功能,为什么需要PendSVRTOS系列文章(3): 为什么将SysTick和PendSV的优先级设置为最低RTOS系列文章(4): MDK软件仿真 + Debug-(printf)-Viewer使用方法RTOS系列文章(5):C语言程序运行原理分析:汇编、栈、栈帧、进栈、出栈、保存现场、恢复现场、返回RTOS系列文章(6):Cortex-M3/4之SP,MSP,PSP,Thread模式、Handler模式、内核态、用户态

2022-07-10 22:33:16 2369 3

原创 RTOS系列文章(11):RTOS启动方式——直接设置CONTROL寄存器、SVC启动、PendSV启动

RTOS系列(1):基础知识——中断嵌套RTOS系列文章(2):PendSV功能,为什么需要PendSVRTOS系列文章(3): 为什么将SysTick和PendSV的优先级设置为最低RTOS系列文章(4): MDK软件仿真 + Debug-(printf)-Viewer使用方法RTOS系列文章(5):C语言程序运行原理分析:汇编、栈、栈帧、进栈、出栈、保存现场、恢复现场、返回RTOS系列文章(6):Cortex-M3/4之SP,MSP,PSP,Thread模式、Handler模式、内核态、用户态

2022-07-10 10:06:59 1678 3

原创 RTOS系列文章(10):简单OS示例分析

RTOS系列(1):基础知识——中断嵌套RTOS系列文章(2):PendSV功能,为什么需要PendSVRTOS系列文章(3): 为什么将SysTick和PendSV的优先级设置为最低RTOS系列文章(4): MDK软件仿真 + Debug-(printf)-Viewer使用方法RTOS系列文章(5):C语言程序运行原理分析:汇编、栈、栈帧、进栈、出栈、保存现场、恢复现场、返回RTOS系列文章(6):Cortex-M3/4之SP,MSP,PSP,Thread模式、Handler模式、内核态、用户态

2022-07-05 22:55:34 1377 5

原创 RTOS系列文章(9):再次分析栈帧、函数调用与中断调用的区别

在前面的系列文章中,尤其是CM3/4之LR寄存器、EXC_RETURN深入分析 中我们简单的分析了一些函数调用与中断调用的流程,那篇文章也基本上能说明函数调用和中断调用的一些区别,本文将基于栈帧的概念,再次分析一下两者之间的相同点和不通点。栈帧是一个非常专业的概念,很惭愧的说,在没有深入分析RTOS之前,我也不曾了解栈帧这一概念,之前只是大概了解到函数调用需要堆栈存放局部、临时变量,但是栈帧这个概念确实时从未关注过。我们先引入《The Definitive guide to ARM Cortex M3/4》

2022-06-06 22:03:24 1349 2

原创 RTOS系列文章(8):深入分析中断处理过程

在上一篇文章中,我们深入分析了函数调用返回、中断调用返回使用的LR和EXC_TURN,也简单说明了函数调用流程、中断调用流程。在FreeRTOS中,任务的调度是通过SysTick + PendSV 中断来实现的,尤其在PenSV中断中进行任务上下文切换原理,是理解FreeRTOS任务调度原理的重中之重。而SysTick和PendSV都是中断,所以我们有必要深入分析一下在ARM CM3/4中中断的完整处理流程。整体流程如下:接下来我们直接引用《The definitive guide to ARM Corte

2022-06-04 22:54:10 3486 2

原创 RTOS系列文章(7):CM3/4之LR寄存器、EXC_RETURN深入分析

在Cortex-M3/4中有个特殊的寄存器R14,这个寄存器还有一个大家熟知的名字LR,LR全称为Link Register,有的书本上会翻译成链接寄存器。该寄存器一般用于存放函数退出返回地址。除了函数调用返回使用,中断退出也会使用LR,不过中断返回机制与函数返回机制会有一些细节不通,中断返回虽然也是通过LR,但是还会有EXC_RETURN辅助。这里我们直接引用《The definitive guide to ARM Cortex-M3/4》中对LR的介绍:翻译过来,有如下重点知识:如上面描述,LR是链

2022-06-04 18:46:39 3824 4

原创 RTOS系列文章(6):Cortex-M3/4之SP,MSP,PSP,Thread模式、Handler模式、内核态、用户态

FreeRTOS系列(1):基础知识——中断嵌套FreeRTOS系列文章(2):PendSV功能,为什么需要PendSVFreeRTOS系列文章(3): 为什么将SysTick和PendSV的优先级设置为最低FreeRTOS系列文章(4): MDK软件仿真 + Debug-(printf)-Viewer使用方法FreeRTOS系列文章(5):C语言程序运行原理分析:汇编、栈、栈帧、进栈、出栈、保存现场、恢复现场、返回在深入分析RTOS调度之前,我们还需要了解一下Cortex-M3/4的工作模式以及双

2022-06-03 18:50:15 7344 9

原创 RTOS系列文章(5):C语言程序运行原理分析:汇编、栈、栈帧、进栈、出栈、保存现场、恢复现场、返回

C源程序; Reset handlerReset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0

2022-05-28 19:10:46 2945 1

原创 RTOS系列文章(4): MDK软件仿真 + Debug-(printf)-Viewer使用方法

背景MDK具有强大的软件仿真能力,这里的仿真不是仿真虚拟的CPU,而是仿真我们工程中使用的CPU,简单的说,我们在MDK中的工程文件,只要CPU型号是MDK本地支持的,都可以使用仿真器直接仿真,而不依赖真实的硬件。仿真器除了常规的寄存器、堆栈信息,还可以使用自带的print打印窗口。但是如果使用printf功能,需要重定向fput函数。在后续的文章中,我们会使用软件仿真来学习分析FreeRTOS具体步骤1. 勾选[User MircroLIB]2. 仿真Debug设置3. fput 重

2022-05-21 18:02:17 1817

原创 RTOS系列文章(3): 为什么将SysTick和PendSV的优先级设置为最低

FreeRTOS系列(1):基础知识——中断嵌套FreeRTOS系列文章(2):PendSV功能,为什么需要PendSV前言在上一篇文章中,我们详细分析了PendSV的功能,也分析了SysTick和PendSV结合,实现OS任务调度,简单的分析了SysTick的优先级。我觉得有必要针对SysTick的优先级,单独写一篇文章分析。结论概述嵌入式实时OS的【实时】不仅仅是OS对任务调度及时,更重要的是要求嵌入式OS具有【可剥夺/抢占】的特性,既允许高优先级任务抢占低优先级任务,又要允许外部中断能够抢占

2022-05-17 21:43:12 4519 10

原创 RTOS系列文章(2):PendSV功能,为什么需要PendSV

背景大多数嵌入式RTOS在Cortex-M3/M4上的移植都需要PendSV,比如uCOS、RT-Thread、FreeRTOS等,本文就对PendSV的功能作用,以及为什么需要PendSV进行详细的分析。PendSV是什么?我们先引用《Cortex-M3权威指南》对PendSV的介绍:PendSV(可悬起的系统调用),它是一种CPU系统级别的异常,它可以像普通外设中断一样被悬起,而不会像SVC服务那样,因为没有及时响应处理,而触发Fault。个人理解PendSV的英文全称应该是:Pend S

2022-05-17 20:55:58 12315 17

原创 RTOS系列(1):基础知识——中断嵌套

背景我们在单片机编程,嵌入式RTOS编程,甚至其他OS下的系统编程时,可能会忽略“中断嵌套”背景知识,在之前的工作和编码过程中,我也没有深入的了解或者注意过“中断嵌套”,直到当我想要深入了解嵌入式RTOS的运行原理时,才发现,原来“中断嵌套”的概念是如此的重要,以至于各种RTOS的基础配置,以及设计,都是围绕着“中断嵌套”的机制来设计和配置的。什么是中断嵌套中断嵌套的书面解释如下:中断嵌套指中断系统正在执行一个中断服务L时,有另一个优先级更高的中断H触发,这时中断系统会暂时中止当前正在执行低优先级

2022-05-15 22:00:13 10308 4

原创 mDNSResponder源码地址

苹果官方 mDNSResponder 源码地址记录如下:Apple mDNSResponder源码地址

2022-04-27 22:29:22 590

原创 一个非常好的各种算法动画图演示网站

http://www.u396.com/wp-content/collection/data-structure-visualizations/

2022-04-23 22:19:57 1237

转载 AliOS Things代码风格

原地址AliOS Things代码风格1. 前言本文是AliOS Things提供的一套C语言代码规范,适用的对象为符合C99标准的C语言工程。2. 命名本节内容均为建议,不作强制要求。2.1. 总则各种命名均使用英文单词及其缩写,非特殊情况不能使用汉语拼音或其他语言。2.2. 文件命名文件名全部使用小写字母,用_连接。源文件使用.c后缀。头文件使用.h后缀。2.3. 类型命名2.3.1. 简单类型命名使用typedef自定义的简单类型命名全部使用小写字母,用_连接,以_t结尾。

2022-04-23 18:52:00 199

原创 深入理解Linux 条件变量4:pthread_cond_signal惊群现象及解决方法(while判断)

前言

2022-03-31 22:46:56 2892 3

原创 深入理解Linux 条件变量3:条件变量为什么要配合着锁使用?

https://zhuanlan.zhihu.com/p/55123862为什么要与pthread_mutex 一起使用呢? 这是为了应对 线程1在调用pthread_cond_wait()但线程1还没有进入wait cond的状态的时候,此时线程2调用了 cond_singal 的情况。 如果不用mutex锁的话,这个cond_singal就丢失了。加了锁的情况是,线程2必须等到 mutex 被释放(也就是 pthread_cod_wait() 释放锁并进入wait_cond状态 ,此时线程2上锁) 的

2022-03-30 22:31:40 2925 2

原创 深入理解Linux 条件变量2:使用条件变量实现[生产-消费]框架

前言

2022-03-29 22:45:43 852 2

原创 深入理解Linux 条件变量1:使用场景、接口说明

背景

2022-03-29 22:16:10 1234

原创 Linux时间相关知识小结:struct timeval、timespec、gettimeofday、time、localtime....

前言我们在linux平台进行开发时,时间相关的操作基本上都会遇到,本文就对常用的时间相关的结构体、接口进行分析小结。常见类型、结构体定义timespec原型struct timespec{ __time_t tv_sec; /* Seconds. 秒 */ __syscall_slong_t tv_nsec; /* Nanoseconds. 纳秒*/};说明该结构体只是包括秒和纳秒,并没有任何其他含义,比如1970年以来的秒数等。只是个存放空间。为clock_gettime的

2022-02-06 22:49:52 3980

原创 Visual Paradigm简单教程(2):绘制序列图

Visual Paradigm简单教程(1):绘制状态机图1. 前言在上一篇文章中,介绍了使用Visual Paradigm简单教程(1):绘制状态机图,本文我们接着介绍如何使用visual paradigm绘制序列图。2. 相关概念2.1 序列图概念所谓序列图可以理解为软件不同部分,比如组件之间的交互序列图,序列2字说明了交互序列流程,比如我们想要描述一个软件的使用顺序、业务流程顺序等待,都可以通过序列图来实现。2.2 生命线这里使用“生命线”可能不够形象,个人理解 应该称为 节点,即序列图

2022-01-15 21:40:02 8639 4

原创 Visual Paradigm简单教程(1):绘制状态机图

1. 前言最近发现了一款堪称宝藏的软件:visual paradigm,这个软件是一款强大的UML工具,UML的意思是统一建模。使用这个软件可以画流程图、状态机图、序列图,不过不知道为什么,这个软件的教程非常少,本系列文章简单讲述该软件如何使用。2. 绘制状态机图步骤2.1 状态机机制关键概念state/状态状态是对象生命期间的条件,在此期间它满足某些条件,执行某些活动或等待某些外部事件,简单的说就是我们状态机里的状态。event/事件触发状态转换的条件transition/过渡两个状态之

2022-01-15 20:03:01 12381

原创 int、long、long int、long long、uint64_t字节长度

前言我们在进行编程时,对于int、long、long long经常使用,但是对于这些类型占用的字节长度可能不会太确定,尤其是在32位平台、64位平台,会有差异,这些知识点为基础知识,容易忽略的基础知识,本文做下分析记录。不同平台整型字节长度区别平台/类型charshortintlonglong long16位1224832位1244864位12488小结在32位平台下,int型和long型是一致的,都是占用4个字节。lo

2021-12-19 22:26:01 47482 2

原创 为什么要使用git,git架构分析

前言本文面向的是像作者一样,是git小白的程序员,很多程序员是不使用git的,这很正常,比如嵌入式程序员,嵌入式程序员一般使用IDE进行开发,比如MDK、IAR等,嵌入式的软件程序相比较互联网的程序,代码量要少很多,功能也相对简单,再加上小厂很多也没有使用git的习惯,所以就会出现前面所说的,很多程序员不使用git。当然啦,git只是一个工具,会与不会也不能代表什么,程序员的能力还是要靠代码来体现的。git应用场景git的介绍在网上有太多,就算是不太熟悉git的程序员大概也知道git是一种版本管理工具

2021-11-21 22:58:19 1848

x86汇编语言-从实模式到保护模式 配套源码及资料

x86汇编语言-从实模式到保护模式 配套源码及资料

2021-05-10

DLT 645-1997.pdf

DLT645-1997通信协议pdf

2021-04-14

空空如也

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

TA关注的人

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