李肖遥的专栏

一个逍遥不羁的码农,微信公众号「技术让梦想更伟大」

  • 博客(1790)
  • 资源 (5)
  • 收藏
  • 关注

原创 开干!逍遥的小蜜圈

关注、星标公众号,直达精彩内容ID:技术让梦想更伟大整理:李肖遥Who Am I 大家好,我是「逍遥的小蜜圈」星球的星主,如果大家关注我早一点,一定看了我的简单的自我介绍,关于我 — 聊...

2020-12-13 15:30:06 2001 10

原创 【技术让梦想更伟大】专辑 | 原创汇总

关注、星标公众号,直达精彩内容ID:技术让梦想更伟大作者:李肖遥想做一个有态度的公众号,原创是我的态度,这样的话不仅自己可以学习到新的知识,巩固自己所学,也可以与大家一起分享。做公众号一...

2020-12-08 22:14:00 2014 7

转载 强!! 裸机状态下实现RTOS

想要在裸机状态下,简单实现一些类似RTOS环境下的功能,其实网上也有很多组件包,今天 就来分享一款类似的组件:ToolKit.:此函数在使用定时器功能最初调用,目的是创建定时器列表头结点,和配置tick获取回调函数。功能,当配置此模式并且缓冲区已满,若有新的数据存入,将会移除最早数据,并保持缓冲区已满。:超时回调函数可定义多个,即一个定时器对应一个回调函数,也可多个定时器对应一个回调函数。事件标志,每个标志占1Bit,发送多个标志可“|”感兴趣的标志,每个标志占1Bit,多个标志可“|”

2025-06-09 22:12:05 21

转载 给你们安利一个值得长期关注的博主

20年商海沉浮,线上能打、线下也懂,是真正穿越过多个经济周期的实战派。他不仅做过石油实业、跑过产业链,还深度参与了国内多个风口投资。他是一位靠洞察力、执行力、胆识在能源周期中掘金的企业家。• 他踩过的坑、赚过的钱、亏过的血,都写得清清楚楚。• 厌倦鸡汤,希望听点“真话与真金白银”干货的人。石油大王的内容,是这个时代稀缺的真实、冷静与洞察。建议你现在就关注,慢慢读,反复读,时间会给出回报。很多看起来“后知后觉”的热点,他早已提前布局。有时候,一篇对的文章,就能让你少走三年弯路。

2025-06-06 22:08:21 18

转载 软件架构实现的思路

确定需求和约束:在设计嵌入式软件架构之前,首先需要明确嵌入式系统的需求和约束条件,例如系统的功能需求、实时性要求、功耗限制、硬件资源限制等。选择合适的架构风格需要考虑到系统的需求和约束条件,以及开发人员的经验和技能。总的来说,实现嵌入式软件架构需要结合系统需求和约束条件,采用模块化设计、优化资源利用、考虑实时性、安全性和可靠性等方面的思路,以确保系统具有良好的性能和可维护性。总的来说,嵌入式软件架构的出现是为了应对嵌入式系统中软件复杂度和系统需求的挑战,提高系统的可靠性、可维护性和可扩展性。

2025-06-05 22:11:17 23

转载 搞嵌入式绕不开的技术点

linux下注册驱动的时候,将设备号和文件名进行了映射,并实现file_operation里的一些函数,例如,write、read、ioctl。很多人嵌入式学习都有些迷茫,不知道从哪里入手,不知道自己的水平位于哪个层次,不知道从哪方面提升,今天我们就从一个8年工作经验的嵌入式资深工程师的分享,来看一下嵌入式学习那些你绕不开的技术点。嵌入式的东西很多,想要整理起来,也是很花费力气的一件事情,有时间我就会慢慢的整理,当然如果对别人有用的话,那就更好。嵌入式的优化分为两部分,算法上的优化,编程上的优化。

2025-06-04 22:13:41 21

转载 总结了一份嵌入式驱动开发经验

1 嵌入式驱动开发到底学什么嵌入式大体分为以下四个方向:一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。熟练掌握嵌入式硬件知识,熟悉硬件开发模式和设计模式,熟悉ARM 32位处理器嵌入式硬件平台开发、并具备产品开发经验。精通常用的硬件设计工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般需要有4~8层高速PCB设计经验。二、嵌入式驱动开发:熟练掌握Linux操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM

2025-06-02 22:11:00 91

转载 华为目标院校白名单(25年最新版)

【代码】华为目标院校白名单(25年最新版)

2025-05-30 22:11:50 40

转载 单片机多任务事件驱动C源码

事件列表创建一个全局循环列表管理事件,调用taskEventIssue()生成一个事件,放到事件循环列表,taskEventLoop()函数放到主线程循环调用,当事件循环列表中有事件时,根据任务ID分发到具体的事件处理任务。定时器列表创建一个全局列表管理定时器,taskTimer()建立一个定时器,放到定时器列表执行,当定时时间到,会生成一个定时器事件,放到事件列表,分发到具体的事件处理任务。本文素材来源网络,版权归原作者所有。代码分为3个模块:任务列表、事件列表、定时器列表。

2025-05-27 22:09:04 35

原创 杭州的一个月,惊心动魄

杭州天气还是很好的,我比较喜欢,深圳的快节奏经历多年了,偶尔来杭州感受下不一样的风景感觉很好,只是时间有限平时也比较累,没有去过除了酒店和公司的任何一个地方。因为涉及到一些公司的机密所以关于做的事情不方便说,总之就是干了一件比较不错的事情,虽然过程中我做的不够好,也没有拿到好的绩效,但是对我来说也是一个成长。这次来的太匆忙了,几乎都在干活,本想约着杭州的朋友玩一下,还有到苏州找下痞子衡,奈何时间有限,任务艰巨,没有完成。当然了,去各种地方喝酒还是有四五次了。来源:技术让梦想更伟大。

2025-05-25 22:12:05 213

转载 新手学几天STM32,为啥一脸茫然

在项目需求确定后,根据芯片和器件选型,就能够确定硬件PCB的绘图和布置,功能需求也能确定,如访问外部EPPROM,那么I2C就确定为主模式,并根据EPPROM的读写时序和芯片的性能,考虑到效率和稳定的平衡,就可以确定I2C的速率,考虑布局和其它需求,I2C对应的复用引脚也能确定。如大部分外设模块都要进行时钟使能,GPIO就要配置引脚的上拉/下拉,推挽/开漏,USART配置模式,波特率,奇偶校验,停止位,数据位,还要考虑对应GPIO的端口复用,I2C就要考虑主从模式,根据需要的传输速率确定模块时钟,S。

2025-05-21 22:11:44 140

转载 嵌入式C有哪些不一样

在优化运行速度,或者存储受限时,理解这部分知识对于代码的维护就很有意义。讲到这里,关于嵌入式C语言的初步总结就到此为止,但C语言在嵌入式运用的中的重点和难点并不仅仅只有这些,如嵌入式C语言支持的内联汇编,通讯间的可靠性实现,存储数据校验和完整性保证,这些工程上的运用和技巧,都很难用简单的言语说清楚,另外有关异常触发后的查找和解决的技巧,也值得详细的说明,这里因为篇幅以及自己还未整理清晰,就先到此为止。3). 从堆上分配,亦称动态内存分配。动态内存的生存期由程序员决定,使用非常灵活,但同时遇到问题也最多。

2025-05-18 22:14:42 201

转载 国企程序员原来和想象的不一样

当然不是,我加入的项目组,大多都是以2个星期为周期进行开发的,每两个星期要举行一次组内讨论会,如果完不成任务或者bug太多是需要加班处理的,因为国企是不可以出错的,一次出错可能直接招致点名批评(包括这个项目的所有相关人员),一次kpi黑记录,会直接影响你以后的升迁前途。他会问你项目相关的问题,例如:做过哪些项目,解决了什么问题,你在项目中的角色,项目是如何管理的,又是如何进展的,使用了哪些技术栈,为什么挑选这样的技术栈,遇到哪些问题,如何解决的这些问题。国企的稳定性应该是最被人人称道的,特别是中字头企业。

2025-05-17 22:10:34 58

原创 yaml在嵌入式软件开发中的作用

随着嵌入式系统的复杂度日益增加,开发团队需要更灵活的工具来管理配置、自动化流程和优化跨团队协作。YAML(YAML Ain't Markup Language)作为一种轻量级的数据序列化语言,凭借其简洁的语法和强大的可读性,逐渐成为嵌入式开发中的重要工具。YAML解析器支持多种编程语言(如C、Python、JavaScript),便于嵌入式系统与上位机工具链的集成。YAML原生支持列表、字典、多行文本和类型转换,能够描述嵌入式系统中常见的树状配置结构。等文件区分开发板与量产硬件的差异,实现配置的快速切换。

2025-05-15 22:10:58 810

转载 在VS Code下也可以开发恩智浦MCU了

近年来 Visual Studio Code 在嵌入式领域的用户越来越多(主要原因是其通用性,不与任何一家 MCU 原厂深度绑定,且第三方插件众多,生态强大,新功能支持更灵活),为了给恩智浦用户更灵活的开发体验,恩智浦于2023年7月正式推出了 MCUXpresso for Visual Studio Code 插件,把 MCUXpresso IDE 里对 NXP MCU 的支持以及一些核心功能都带到了 Visual Studio Code 里。大家好,我是痞子衡,是正经搞技术的痞子。

2025-05-13 22:11:20 41

转载 如何在 VS Code 中开发 MCU

有些电脑用户,如果在添加了CC-RL和LLVM for Renesas RL78到环境变量中,在接下来的步骤中,遇到了上述变量找不到的情况,可以尝试使用管理员权限打开和运行VS Code。当调试开始后,通用的调试控制按钮将显示,包括如返回,暂停,单步,单步跳过,单步跳出,重启,调试停止。在调试期间,本地变量,设备寄存器,调用堆栈,监视变量,外设状态的详细信息将显示在Run and Debug选项卡中VS Code主侧边栏。解压zip文件,并把ninja.exe复制到CMake的安装路径下的bin文件夹下。

2025-05-12 22:11:36 44

转载 还是大厂好,阿里年终奖有点离谱

其中,P5(校招生)长期激励10w左右,P6(主力员工)长期激励20w左右,P7(初级管理)长期激励40w左右,P8(中级管理)长期激励60w+。其中,P5无长期激励,P6有10w左右的长期激励,P7有20w左右的长期激励,P8有40w+的长期激励。P7绩效3.75,涨薪7.5k,年终奖22w,长期激励65w——P7绩效3.5,涨薪4k,年终奖14.2w,长期激励20w——P6绩效3.75,涨薪3k,年终奖15w,长期激励26w——P7绩效3.5,无涨薪,4个月年终奖,长期激励20w——

2025-05-11 22:12:29 364

转载 MCU软件定时器,一个超好用的轮子

经过分析,在大多数定时业务中,往往只需要在某个时间段定时一次,也就是说定时器会开启定时和结束定时,当然,用数组的实现的定时器也可以开启定时和关闭定时,只需要用start标志去决定就行了,但是用数组实现的方式中,即使你关闭了定时器,也就是去掉了start标志,此定时器虽然不运行了,但是数组的空间不会减少,硬件 tick依然要轮询所有数组。而若我们有一个软件定时器,所有定时业务都依赖于软件定时器,不仅节省硬件资源,以后在移植的时候也只需要将软件定时器和硬件相关的部分修改就行了,其他部分都不用动。

2025-05-08 22:10:15 79

转载 精简框架+STM32实战案例(附源码)

文件中的全局中断开关函数(可以为空),添加芯片对应的头文件,根据需要修改数据类型重定义,根据芯片字长修改halDataAlign_t类型;总体来说,因为站在巨人的肩膀上,整体的代码需要修改的部分已经很少了。但是这种机制,实现的代码十分精简,占用资源也非常少,对于资源十分紧张的嵌入式平台,也可以完成比较复杂的逻辑功能。也是不错的选择,不过还需要对其源码需要进一步的理解,这样在出现问题的时候,才可以对症下药。使用串口3进行任务测试,定义了两个任务,先贴出其中的一部分,详细的可以全部的工程代码;

2025-05-05 22:13:16 76

转载 嵌入式代码如何写才能方便移植?

应该说,C 比较好的继承了这一点,C 语言非常简洁,非常强大,而由于 C 语言诞生的比较早,当时的面向对象的思想还不成熟,所以出现了大量的过程式的 C 应用,从而给人们一种 C 语言是面向过程的语言的错觉,其实 C 只是提供了一些简单,强大而通用的能力,至于你想将其搭成什么样的积木,则全靠你自己了。这样的好处是,实现者可以在不接触接口使用者的代码的情况下,对实现进行调整。虽然如此,但是不可否认,这些所谓的纯面向对象的语言,在其代码的可读性以及与人的自然思维的匹配方面,比面向过程的语言要好的多。

2025-05-03 22:12:43 40

转载 NB!这个开源库直接让读写数据效率翻倍

lwrb针对单生产者单消费者(SPSC)场景优化,通过原子操作实现无锁设计,避免了传统锁机制带来的上下文切换开销。例如,在DMA传输或中断服务中,生产者(如ADC模块)和消费者(数据处理线程)可并行操作缓冲区,无需互斥锁同步。在带缓存的系统(如多核ARM)中,lwrb要求用户手动同步缓存,例如通过ARM的DSB指令或MPU配置,确保数据可见性。与传统环形缓冲区不同,lwrb采用二分缓冲区变体,始终为读写操作提供连续的内存块。例如,在网络通信中,数据可直接从缓冲区发送至物理层,无需中间复制。

2025-04-30 22:11:12 377

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 75

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 48

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 39

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 29

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 27

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 21

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 43

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 36

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 19

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 20

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 22

转载 while(1) 和 for(;;)还有区别?

根据上面的描述,你可能会觉得:while(1) 比 for(;) 要做更多事,汇编代码更多,代码量也更大。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。我们编写分别两个文件for.c和while.c,然后分别生成汇编代码,看下情况。有读者好奇:有的代码是用while(1),而有的是for(;的代码,编译对比一下代码大小和汇编文件,你就大概知道了。这里先说一下while(1)和for(;while(1)和for(;验证while(1)和for(;while(1)和for(;

2025-04-24 22:13:21 19

转载 嵌入式软件开发时序图全解析,秒懂电平与时间的关系

例如,I2C的时钟(SCL)和数据(SDA)线的变化是密切关联的,SDA的值仅在SCL为低时有效。时序图中的斜线和竖线表示电平的过渡或稳定状态,通常没有特别标注时,它们的含义是一样的,代表着电平从一个状态平滑过渡到另一个状态。在分析时,需要关注信号随时间的变化,电平在不同时间段的变化会影响整个系统的行为。虚线部分:时序图中的虚线通常表示省略的信号或波形,旨在简化时序图,减少不必要的复杂度。SPI时序图的关键是数据传输的同步性,主设备和从设备之间的时钟信号(SCK)会决定数据的采样时间。

2025-04-23 22:09:44 88

转载 VSCode 居然可以是代码编辑器?

宇宙第一神器,最近鱼鹰也算是感受到它的强大,主要是丰富的插件解决了众多的开发痛点,而代码编辑反而变成了其中最微不足道的一个功能。本期鱼鹰介绍一下常用的插件,帮助大家更有效率的搬砖,成为最亮的那个崽。很多公司要求画流程图,很多时候,我们需要安装特定软件才能开始画,这很麻烦,而且你要看别人的流程图时,如果没有装软件,也没法看,很耽误时间,这不,有个插件方便的解决了这个问题,非常便捷。非常推荐的现代化开发方式。自动分析 C 语言语法,可以进行代码跳转(按住 ctrl ,然后点击需要跳转的代码处即可)。

2025-04-22 22:32:18 114

转载 pyqt 有必要学一下吗?

书中对 PyQt6 的深入剖析以及各种高级特性的讲解,能够让你在现有的基础上进一步提升自己的开发能力,掌握更多高效的开发技巧,打造出更优质、更强大的桌面应用程序。它就像一位专业的导师,带领你从 PyQt6 的基础知识学起,通过大量的实战项目,逐步提升你的编程能力,让你能够熟练运用 PyQt6 开发出各种功能强大、界面美观的桌面应用程序。多线程编程可以让你的应用程序更加高效地运行,而书中会用通俗易懂的语言和丰富的示例,教你如何在 PyQt6 中实现多线程编程,让你轻松驾驭这一强大的技术。

2025-04-20 22:10:57 55

转载 如何实现一个 malloc

另外需要注意的是,由于Linux是按页进行内存映射的,所以如果break被设置为没有按页大小对齐,则系统实际上会在最后映射一个完整的页,从而实际已映射的内存空间比break指向的地方要大一些。一个简单可行方案是将堆内存空间以块(Block)的形式组织起来,每个块由meta区和数据区组成,meta区记录数据块的元信息(数据区大小、空闲标志位、指针等等),数据区是真实分配的内存区域,并且数据区的第一个字节地址即为malloc返回的地址。而从break往上,是未映射的地址空间,如果访问这段空间则程序会报错。

2025-04-19 22:11:52 62

转载 务必立即拿下软考证(政策红利)

不想白白陪跑,请抓紧时间入群,全面了解软考福利+直圈考试重点+领靠谱的资料包,一次通关绝对不难。:趋向行业新技术和自身实际经验,多个科目出题越来越灵活,再加上多科目大纲教程改版。不用浪费时间网上搜题,现在报名跟课,免费开放【智能学习平台】,❗️想顺利通关,自学已经不是明智之举,建议抓紧入群,报名本期。还配备一对一督学小助理全程答疑,扫清所有备考难题。的最佳渠道,选对报考科目,更是如虎添翼!,不熟悉的技术板块,也能快速理解记忆!教材知识点细节变多,论文越来越难过。,快速记忆无负担,还将抽象的知识点用。

2025-04-17 22:02:49 47

转载 好友新书,有点顶啊

我们知道计算机是个变化极快的行业,特别是从事互联网行业的朋友,经常面对技术的更新,开发语言的迭代,每天过的都很焦虑,随着新人的入职,技术的变化,老人的技术经验似乎无法得到发挥,这也是为什么都说程序员有35岁失业的根本原因。这些问题的解决需要扎实的底层技术功底,为未来的技术创新奠定基础。第1章介绍内存管理,包括内存管理的机制,CPU访问内存的过程,内存架构和内存模型,memblock物理内存初始化和映射,物理内存的软件划分,页帧分配器的实现,快速分配之水位控制,快速分配之伙伴系统,慢速分配之内存碎片整理。

2025-04-16 22:09:45 44

转载 单片机的Flash又爆满了。。

heatshrink轻量、高效,无论是Flash空间优化,对于资源紧张但需要数据完整性的场景,都是很好的选择。由此看见,这种数据分组的方式,最坏的情况下,只会每8个字节增加一个字节的额外空间开销,比起每个字节另外需要2个字节的空间开销而言,效率大幅提升。大家好,我是麦鸽,在单片机开发中,片上Flash存储空间往往捉襟见肘。无论是传感器日志、固件升级包,还是配置参数,数据量的增长常常超出硬件资源的承载能力。将JSON或二进制格式的配置参数压缩存储,既节省空间,又能在读取时快速解压,避免解析延迟。

2025-04-14 22:12:07 56

Ymodem协议C语言实现

XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。

2018-08-11

SPSS-RFM分析建模操作手册与数据

做RFM分析的时候要知道RFM分析的数据格式有两种:   一种是交易数据,也就是每次交易占用一行,关键变量是客户ID、交易日期和交易金额;   另一种是客户数据,就是每个客户占用一行,关键变量是客户ID、交易金额、交易次数和最近交易日期。 为了保证数据的准确性,建议采用交易数据格式进行分析,实际上交易数据是可以整理成为客户数据的,而客户数据是无法还原为交易数据的

2018-08-31

状态机的C语言经典实现

关于状态机,基础的知识点可以自行理解,讲解的很多,这里主要是想写一个有限状态机FSM通用的写法,目的在于更好理解,移植,节省代码阅读与调试时间,体现出编程之美。

2020-12-08

modus通信协议C 语言实现

Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动

2018-08-11

空空如也

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

TA关注的人

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