STC32裸机项目集成FreeRTOS的实战问题解析
目录
🍅点击这里查看所有博文
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。
想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。
很多时候我们遇到了问题,一般情况下都是选择在搜索引擎检索相关内容,这样来的也更快一点,除非真的找不到才会去选择翻书。后来就想到了写博客,博客作为自己的一个笔记平台倒是挺合适的。随时可以查阅,不用随身携带。
同时由于写博客是对外的,既然是对外的就不能随便写,任何人都可以看到。经验对于我来说那就只是经验而已,公布出来说不一定我的一些经验可以帮助到其他的人。遇到和我相同问题时可以少走一些弯路。
既然决定了要写博客,那就只能认真去写。不管写的好不好,尽力就行。千里之行始于足下,一步一个脚印,慢慢来
,写的多了慢慢也会变好的。权当是记录自己的成长的一个过程,等到以后再往回看时,就会发现自己以前原来这么菜😂。
本系列博客所述资料均来自互联网
,并不是本人原创(只有博客是自己写的)。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法
。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。
在嵌入式系统开发中,FreeRTOS 是一种广泛使用的实时操作系统,它能够为微控制器提供高效的多任务处理能力。然而,在将 FreeRTOS 应用于 STC32 现用的裸机项目时,遇到了一系列问题。这些问题主要集中在编译、链接以及内存管理方面。
DATA-ADDRESS EXPECTED
在按照常规方法将 STC32 的 FreeRTOS 支持包添加到已有工程并进行编译时,遇到了以下报错信息:
compiling port.c...
assembling .\Output\port.src...
.\Output\port.src(767): error A48: DATA-ADDRESS EXPECTED
.\Output\port.src(842): error A48: DATA-ADDRESS EXPECTED
.\Output\port.src(845): error A48: DATA-ADDRESS EXPECTED
.\Output\port.src(920): error A48: DATA-ADDRESS EXPECTED
.\Output\port.src(923): error A48: DATA-ADDRESS EXPECTED
compiling croutine.c...
compiling event_groups.c...
错误信息 error A48: DATA-ADDRESS EXPECTED
表示编译器在期望一个数据地址时没有找到有效的地址。这通常意味着代码中有某个地方试图访问或定义一个数据地址,但提供的内容不符合预期。
通过查看错误信息中提到的行号,定位到 port.src
文件中的相关代码。以下是错误位置的汇编代码:
; line 130: /* Start the first task. */
; line 131: portRESTORE_SPX();MOV DR4,pxCurrentTCB MOV WR2,@WR6+0x2 XRL WR0,WR0 MOV DR60,DR0
对应的源文件 port.c
的第 131 行代码如下:
#define portRESTORE_SPX() \
{ \__asm { MOV DR4,pxCurrentTCB } \__asm { MOV WR2,@WR6+0x2 } \__asm { XRL WR0,WR0 } \__asm { MOV DR60,DR0 } \
}BaseType_t xPortStartScheduler( void )
{UNUSED( pxCurrentTCB );/* Start the timer that generates the tick ISR. */prvPortSetupTimerInterrupt();/* Start the first task. */portRESTORE_SPX();portRESTORE_CONTEXT();portRETURN_TASK();/* Should never get here! */return pdTRUE;
}
经过分析,发现发生错误的原因是已有工程中使用了全局 xdata 变量,而 MOV DR4,pxCurrentTCB
这条指令试图将 pxCurrentTCB
指针拷贝到 DR4
寄存器中。由于 pxCurrentTCB
是一个 xdata 变量,它位于 XDATA 区域,而 MOV
指令在这种情况下无法直接寻址 xdata 区域的变量。
为了解决这个问题,需要将全局变量的定义从 xdata
改为 edata
。具体方法是通过 Target
选项卡将 Memory Model
的内容修改为 XSmall
。这样,全局变量就会被分配到 edata
区域,从而避免了直接寻址的错误。
80251 CPU 支持单指令MOV XXX,Dire8
和MOV XXX,Dire16
,其中的 XXX 可以是 8 位、16 位和 32 位的寄存器。对于data、edata
区域的变量,可以直接寻址(1~4 字节),并且不会重入。然而,对于 XDATA 区域和 CODE 的变量,至少需要两条指令MOV DPTR, # XXXX
和MOVX A, @DPTR/MOVC A, @DPTR
才能完成访问,因此在这两个区域内,即使对单个字节变量的访问也是会重入的。
在 port.c
的汇编实现中,MOV DR4,pxCurrentTCB
仅仅使用了一条指令直接寻址,这就意味着 pxCurrentTCB
变量只能使用 edata
区域定义的变量。若使用 xdata
区域的变量,则需要两条指令才可以完成数据的复制。
ADDRESS SPACE OVERFLOW
在解决了上述 DATA-ADDRESS EXPECTED
错误后,编译过程中又遇到了以下错误信息:
linking...
*** ERROR L107: ADDRESS SPACE OVERFLOWSPACE: EDATASEGMENT: ?STACKLENGTH: 000100H
*** WARNING L30: MEMORY SPACE OVERLAPSEG: ?PR?IV?1FROM: FF000BH TO: FF000EH
*** ERROR L119: REFERENCE MADE TO ERRONEOUS SEGMENTSEGMENT: ?C_C51STARTUPMODULE: C:\KEIL_V5\C251\LIB\C2SXS.LIB (?C_START)ADDRESS: FF42C6H
Program Size: data=11.7 edata+hdata=4118 xdata=0 const=1139 code=17905
错误信息 *** ERROR L107: ADDRESS SPACE OVERFLOW
表示在编译或链接过程中,程序尝试使用的地址空间超过了指定的限制。这里的 SPACE: EDATA
指的是扩展数据存储器(EDATA)区域。
编译完成后,编译器提示 edata+hdata=4118
字节。然而,项目使用的 MCU 是 STC32G12K128
,根据官方的定义,其 edata
大小为 4k(4096 字节)。显然,应用程序的加入导致 edata
的内存使用超出了限制。
SRAM
• 4K 字节内部SRAM(edata)
• 8K 字节内部扩展RAM(内部xdata)
• 使用注意:(强烈建议不要使用idata 和pdata 声明变量)
为了解决这个问题,需要优化内存使用。经过分析,发现可以通过修改一部分全局变量的定义来解决。具体方法是将 UART 库缓存的定义从 edata 区域修改为 xdata 区域。以下是修改后的代码:
//#define UART_BUF_type edata
#define UART_BUF_type xdata
通过将 UART 缓存从 edata 区域移动到 xdata 区域,成功地减少了 edata 区域的内存使用。修改完成后,重新编译和链接,程序顺利通过,编译器输出如下:
linking...
*** WARNING L30: MEMORY SPACE OVERLAPSEG: ?PR?IV?1FROM: FF000BH TO: FF000EH
Program Size: data=11.7 edata+hdata=3862 xdata=256 const=1139 code=17927
creating hex file from ".\Output\Handle_V1_2"...
".\Output\Handle_V1_2" - 0 Error(s), 1 Warning(s).
Build Time Elapsed: 00:00:06
MEMORY SPACE OVERLAP
解决上述两个问题后,已经没有错误了,但是还有一个警告MEMORY SPACE OVERLAP
。可能大多数程序员会选择忽略警告,但是这里如果选择忽略警告,那么FreeRTOS将会无法运行。
linking...
*** WARNING L30: MEMORY SPACE OVERLAPSEG: ?PR?IV?1FROM: FF000BH TO: FF000EH
Program Size: data=11.7 edata+hdata=3862 xdata=256 const=1139 code=17927
creating hex file from ".\Output\Handle_V1_2"...
".\Output\Handle_V1_2" - 0 Error(s), 1 Warning(s).
Build Time Elapsed: 00:00:06
警告信息MEMORY SPACE OVERLAP
意味着在项目的内存分配中,存在重叠的内存区域。具体来说,警告中提到的段 ?PR?IV?1
从地址 FF000BH
到 FF000EH
的范围与其他段或区域发生了重叠。
为了进一步分析这个问题,查看了 map 文件。根据 map 文件的输出,冲突的地址为 FF000BH
。以下是 map 文件的相关内容:
000F21H 00FFFFH 00F0DFH --- --- **GAP**
010000H 0100FFH 000100H BYTE INSEG XDATA ?XD?STC32G_UART
010100H FEFFFFH FDFF00H --- --- **GAP**
FF0000H FF0002H 000003H --- OFFS.. CODE ?CO?start251?4
FF0003H FF000AH 000008H BYTE INSEG CODE ?PR?TIMER_1HZ_CB?_?INF_LED
FF000BH FF000DH 000003H --- OFFS.. CODE ?CO?port?8
*** OVERLAP ***
FF000BH FF000DH 000003H --- OFFS.. CODE ?PR?IV?1
FF000EH FF0017H 00000AH BYTE INSEG CODE ?PR?KEY1_RIGHT_OFF?_?INF_LED
FF0018H FF0018H 000001H BYTE INSEG CODE ?PR?TIMER0_ISR_HANDLER?_?STC32G_TIMER_ISR
FF0019H FF0019H 000001H BYTE INSEG CODE ?PR?TIMER1_ISR_HANDLER?_?STC32G_TIMER_ISR
根据 STC32 的中断向量表,000BH 被定义为 TMR0_VECTOR,即定时器 0 的中断服务程序地址。000BH 内存重叠则意味着在代码中,定时器 0 的中断服务程序被重复定义了,从而导致了内存空间的重叠。
/
//Interrupt Vector
/
#define INT0_VECTOR 0 //0003H
#define TMR0_VECTOR 1 //000BH
#define INT1_VECTOR 2 //0013H
#define TMR1_VECTOR 3 //001BH
#define UART1_VECTOR 4 //0023H
#define ADC_VECTOR 5 //002BH
#define LVD_VECTOR 6 //0033H
经过进一步检查代码,发现 FreeRTOS 的 port.c 文件中使用汇编语言定义了一个中断向量,指向滴答定时器的中断服务例程 vTimer0ISR:
__asm { CSEG AT 0BH }
#if ( configUSE_ROMHUGE == 0 )__asm { JMP vTimer0ISR?_ }
#else__asm { JMP vTimer0ISR?? }
#endif
而在原始的库文件STC32G_Timer_Isr.c
中,也重复定义了TMR0_VECTOR
为Timer0_ISR_Handler
。
void Timer0_ISR_Handler(void) interrupt TMR0_VECTOR
{// TODO:
}
通过注释掉Timer0_ISR_Handler这段代码,消除了重复定义,解决了内存空间重叠的问题。
compiling event_groups.c...
compiling list.c...
compiling queue.c...
compiling stream_buffer.c...
compiling tasks.c...
compiling timers.c...
linking...
Program Size: data=11.7 edata+hdata=3861 xdata=256 const=1134 code=17879
creating hex file from ".\Output\Handle_V1_2"...
".\Output\Handle_V1_2" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:06
最后,项目成功编译并通过链接,没有任何错误和警告0 Error(s), 0 Warning(s)。
那么本篇博客就到此结束了,这里只是记录了一些我个人的学习笔记,其中存在大量我自己的理解。文中所述不一定是完全正确的,可能有的地方我自己也理解错了。如果有些错的地方,欢迎大家批评指正。如有问题直接在对应的博客评论区指出即可,不需要私聊我。我们交流的内容留下来也有助于其他人查看,说不一定也有其他人遇到了同样的问题呢😂。
相关文章:
STC32裸机项目集成FreeRTOS的实战问题解析
目录 🍅点击这里查看所有博文 随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记…...
振弦式应变计在混凝土结构长期监测中的应用与特点 久岩传感 GEO-explorer
振弦式应变计在混凝土结构长期监测中的应用与特点 久岩传感 GEO-explorer 振弦式应变计是一种专为长期埋设于水工建筑物及各类混凝土结构内部而设计的测量仪器,可广泛应用于梁体、柱体、桩基、挡土墙、隧道衬砌、桥墩及基岩等结构的应变与应力监测,同时具…...
AVFormatContext 再分析
说明 :将 avfromatContext 的变量依次打印分析,根据ffmpeg 给的说明,猜测,结合网上的文章字节写测试代码分析。 从常用到不常用依次分析 1. unsigned int nb_streams; 代表 avfromatContext 中 AVStream **streams 的个数 /** …...
力扣hot100,739每日温度(单调栈)详解
时隔多久又遇到单调栈的题了,上次记得是接雨水的题,简单讲一下单调栈的适用场景和定义。 意义:看名字就知道单调栈是一个栈里面的数据是单调的 。 解决问题: 单调栈主要用于解决需要**快速找到某个元素附近更大或更小的元素**的问题,其核心…...
怎么检测代理IP延迟?如何选择低延迟代理?
在跨境电商、数据采集以及社交媒体管理等活动中,代理IP的延迟是评估其性能的关键指标之一。高延迟的代理IP可能显著影响任务效率,特别是在需要高并发或大量请求的情况下。本文将介绍几种测试海外代理IP延迟的方法。 一、使用Ping命令测试延迟 Ping命令…...
QEMU 10.0 发布
QEMU 10.0 于 2025 年 4 月 23 日发布。此版本包含 2800 多个提交,来自 211 位作者。以下是一些主要的更新内容: CPU 和主板支持增强 x86 架构:优化了字符串操作指令,显著缩短启动时间。新增了 Intel Clearwater Forest 和 Sierra…...
C++和Java该如何选择?
我真诚的建议你选择C。因为国内Java程序员内卷太严重了,某些公司发布一个Java岗位,立刻就有几百人打招呼;而发布一个C岗位,打招呼的人数就那么十几个。 要知道,无论什么时候,只要你能够学得动C,…...
Javase 基础入门 —— 06 final + 单例
本系列为笔者学习Javase的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程,java零基础入门到大牛一套通关》,章节分布参考视频教程,为同样学习Javase系列课程的同学们提供参考。 01 final 关…...
web 开发中,前端部署更新后,该怎么通知用户刷新
web 开发中,前端部署更新后,该怎么通知用户刷新? 浏览器为什么存在刷新按钮?🔘 因为需要重新加载js,css,html。但为何需要重新加载这些东西?直白点说这些东西其实就是一个文档&…...
LaTex、pdfLaTex、XeLaTex和luaLaTex的区别和联系
之前一直搞不懂这些乱七八糟的Tex到底有啥区别,不同引擎不同编译器换来换去,查了些资料又问了下AI,总算是搞懂了。 大概是这样,很久以前有人写了个Tex排版引擎,输入一些代码命令,输出dvi文件(设…...
深入解析 npm 与 Yarn:Node.js 包管理工具对比与选型指南
在 Node.js 生态中,依赖管理是项目开发的核心环节。npm(Node Package Manager)和 Yarn 作为两大主流包管理工具,虽目标一致但各有特色。本文将从技术实现、使用场景、生态整合等维度深度对比,助你选择更适合的工具。…...
PDF嵌入图片
所需依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>9.0.0</version><type>pom</type> </dependency>源码 /*** PDF工具*/ public class PdfUtils {/*** 嵌入图…...
Coding Practice,48天强训(24)
Topic 1:判断是不是平衡二叉树(递归) 判断是不是平衡二叉树_牛客题霸_牛客网 /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** 代码中的类名、方法名、参数名已经指定,请勿修改&…...
技术分享 | Oracle-RAC修改IP信息
本文为墨天轮数据库管理服务团队第61期技术分享,内容原创,作者为技术顾问胡振兴,如需转载请联系小墨(VX:modb666)并注明来源。 在生产中有时候会遇到网络变更,Oracle RAC IP信息更换等情况&…...
北京工业大学25计专上岸经验分享
1.个人情况介绍 本科就读于河北双非,专业为计算机科学与技术,四级三次498,六级两次460,拿过几次校级奖学金,竞赛经历有蓝桥杯国三、数学竞赛省二。本科成绩排名靠前,保研保7排8,遗憾选择考研继…...
rabbitmq常用命令
目录 1.查看集群状态 2.查看消息对列的堆积 3.重启mq服务 4.清理mq队列消息 1.查看集群状态 rabbitmqctl cluster_status 2.查看消息对列的堆积 rabbitmqctl list_queues rabbitmqctl list_queues | grep -v 0$ 3.重启mq服务 systemctl status rabbitmq-server.servic…...
Spring Cloud Alibaba 整合 Sentinel:实现微服务高可用防护
一、Sentinel 简介 Sentinel 是阿里巴巴开源的面向分布式服务架构的流量控制组件,主要提供以下核心功能: 流量控制:针对不同的调用关系,以不同的运行指标(如 QPS、线程数、系统负载等)为基准,对…...
机器人抓取位姿检测——GRCN训练及测试教程(Pytorch)
机器人抓取位姿检测——GRCN训练及测试教程(Pytorch) 这篇文章主要介绍了2020年IROS提出的一种名为GRCN的检测模型,给出了代码各部分的说明,并给出windows系统下可以直接复现的完整代码,包含Cornell数据集。 模型结构图 github源码地址:https://github.com/skumra/robo…...
《一键式江湖:Docker Compose中间件部署108式》开篇:告别“配置地狱”,从此笑傲云原生武林!》
(🗡️江湖险恶,少侠可曾受困?) 深夜🌙,你盯着屏幕泛红的终端报错,第3次从GitHub某个无名仓库扒下残缺的docker-compose.yaml, 却发现: RabbitMQ连不上&#…...
C语言内敛函数
目录 1、内敛函数的定义 2、内敛函数的特点 2.1 减少函数调用开销 2.2 代码膨胀 2.3 编译器决定 2.4 适用于小型函数 3、示例 4、注意事项 在C语言中,内敛函数(Inline Function)是一种通过编译器优化来减少函数调用开销的机制。它通过…...
DAY8-GDB调试及打桩
GDB打桩 1.类成员函数打桩 // example1.cpp #include <iostream>class Calculator { public:int add(int a, int b) {return a b;} };int main() {Calculator calc;std::cout << "Result: " << calc.add(2, 3) << std::endl;return 0; }(…...
三、UI自动化测试03--操作方法API
目录 一、元素操作⽅法二、浏览器操作⽅法1. Part1: 设置最⼤化/⼤⼩/位置扩展: Web/APP 项⽬⻚⾯布局坐标系示意2. Part2: 后退/前进/刷新3. Part3: 关闭/退出/获取⻚⾯标题和 URL 地址 三、获取元素信息⽅法1. Part1: 获取⼤⼩/⽂本/属性值2. Part2: 判断元素是否可⻅/可⽤/可…...
人工智能—— K-means 聚类算法
目录 摘要 16 K-means 聚类算法 16.1 本章工作任务 16.2 本章技能目标 16.3 本章简介 16.4 编程实战 16.5 本章总结 16.6 本章作业 本章已完结!!! 摘要 本章实现的工作是:首先采用Python语言读取样本数据(学生的语文、数…...
使用XMLSpy校验xml是否合法
# 背景说明 近期大部分地区都在做或将要做数据迁移,基本所有产品的迁移工具底层都依赖了XSD文件对迁移的结构化数据对应XML文件进行初步校验,但有些XSD的问题提示不太容易理解,正好N年前我做XX数据上报时用过XMLSpy可以直接校验每个xml是否合…...
游戏引擎学习第248天:清理数据块显示
启动代码,构建游戏,回顾并为今天的工作做好准备 今天还需要做一些额外的调整。具体来说,我们希望能编辑一些调试值,而这个结构在当前的调试系统中已经有了,所以今天主要是清理一些无关的部分,并进行一些连…...
基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、基于pytest单元测试框架的规则 1.1 模块名(即文件名)必须以test_开头或者_test结尾 1.2 类名必须以Test开头且不能有init方法 1.3 用…...
腾讯 Kuikly 正式开源,了解一下这个基于 Kotlin 的全平台框架
在 3月的时候通过 《腾讯 TDF 即将开源 Kuikly 跨端框架,Kotlin 支持全平台》 我们大致知道了 Kuikly 的基本情况,Kuikly 是一个面向终端技术栈的跨端开发框架,完全基于kotlin语言开发,提供原生的性能和体验。 按照官方的说法&…...
【c++】AVL树模拟实现
简介 AVL树是最先被发明出来的自平衡二叉查找树,在1962由前苏联科学家G. M. Adelson-Velsky和E. M. Landis在论文中发表。AVL树中引入了平衡因子,每一个节点都有一个平衡因子(一般是右子树高度 - 左子树高度);AVL树要…...
具身智能模型开发训练技法之仿真平台动捕数据重定向
具身智能大模型的开发与训练高度依赖大量的数据输入,形象地说,如同需要持续的“数据喂养”。只有经过不断地进行数据积累和模型训练,具身智能大模型才能够实现自主感知、自主决策以及自主执行的完整进程。在多样化的数据形态中,真…...
手撕——贪吃蛇小游戏(下)
引言 上一章介绍了实现贪吃蛇小游戏必备的知识点。 这章,让我们一起开启手搓核弹之旅吧。 先附上贪吃蛇代码的git:贪吃蛇小游戏_4_23 Shown_shuai/learn_c - 码云 - 开源中国 (gitee.com) 上一章的窗口: 手撕——贪吃蛇小游戏࿰…...
C++ 类与对象(中)—— 默认成员函数与运算符重载的深度解析:构造函数,析构函数,拷贝构造函数,赋值运算符重载,普通取地址重载,const取地址重载
在 C 中,类的默认成员函数是编译器自动生成的重要机制,合理利用这些函数可以简化代码编写,同时避免资源管理错误。本文将从构造函数、析构函数、拷贝构造函数、赋值运算符重载等核心内容展开,结合具体案例深入解析。 一、默认成员…...
【Jupyter 启动时如何指定目录】
你在 Windows 系统下运行 jupyter notebook 时,遇到了 Jupyter Notebook 打开的目录不是你想要的 E:\desktop\yolo-study,而是其他路径。这可能是由于 Jupyter 的默认配置问题 或 启动路径问题 导致的。 🔍 原因分析 Jupyter 默认根目录设置错…...
PostSwigger Web 安全学习:CSRF漏洞2
CSRF 漏洞学习网站:What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy CSRF 漏洞:SameSite相关绕过 当浏览器访问服务器时,服务器会在 Cookie 中添加 SameSite 属性来告诉浏览器是否在来自其他…...
openharmony—4.1 softbus_tool 工具编译使用测试笔记(持续更新)
相关资料: 1.communication_dsoftbus: 暂无描述 - Gitee.com 2.dsoftbus_tool: OpenHarmony 分布式软总线样例 3.OpenAtom OpenHarmony 4.OpenAtom OpenHarmony 编译该demo之前需要大家搭建拉取openharmony源码,搭建开发环境,同时全…...
关于 Web 服务器的五个案例
一、案例题目: 1.多 IP 访问多网站(在 RHCE 练习二中的实验二) 2.多端口访问多网站 3.多域名访问多网站 4.虚拟目录和用户控制 5.https/443 二、案例实验 2.多端口访问多网站 ① 开始还是先关闭我们的防火墙以及 selinux [rootserve…...
第十二章-PHP文件上传
第十二章-PHP文件上传 一,文件上传原理 一、HTTP协议与文件上传 1. 请求体结构 当表单设置enctype"multipart/form-data"时,浏览器会将表单数据编码为多部分(multipart)格式。 Boundary分隔符:随机生成的…...
shell脚本部署disu博客
#!/bin/bash #关闭防火墙 systemctl status firewalld &>/dev/null if [ $? -ne 0 ];then systemctl stop firewalld &>/dev/null else echo “firewalld is disabled” fi #关闭selinux filegetenforce if [ “$fine” “Disabled” ];then echo “firewalld…...
NdrpPointerUnmarshallInternal函数分析之pFormatPointee指针的确定
第一部分: 0: kd> p RPCRT4!NdrPointerUnmarshall0x29: 001b:77c46ce4 e8b6f6ffff call RPCRT4!NdrpPointerUnmarshall (77c4639f) 0: kd> t Breakpoint 4 hit RPCRT4!NdrpPointerUnmarshall: 001b:77c4639f 55 push ebp 0: kd> …...
STM32(M4)入门:定时器延时与系统滴答(价值 3w + 的嵌入式开发指南)
第 1 章 延时:嵌入式系统的时间控制基石 1.1 延时基础:从概念到硬件实现 1.1.1 什么是延时? 定义:延时是通过软件或硬件手段,使程序执行过程中暂停指定时间,再继续后续操作的技术。本质是对时间的精确或…...
2025 FIC wp
这次比赛计算机和手机大部分题目都比较常规 第一和第四部分有点让人摸不着头脑 比赛的时候第一部分有四个题没出 第四部分基本都没怎么出 现在复盘一下 把我当时做题的心得和获取的新知识记录一下 互联网取证的部分就先学习一下别的师傅 检材 链接:https://pan.bai…...
STM32标准库和HAL库SPI发送数据的区别-即SPI_I2S_SendData()和HAL_SPI_Transmit()互换
1、标准库SPI初始化 这是标准库的SPI初始化配置 2、HAL库SPI初始化 这是HAL库函数的SPI初始化配置 可以看出,基本一直,除了 基本的io口配置区别,其他主要的读写函数不用动的。 3、SPI发送函数_替换对比 /* SPI写入一个字节 */ void SP…...
Cesium 三维场景中通过自定义着色器实现多种特效(纹理、光带、点光源、反射)
整体功能概述 构建一个基于 Cesium 的三维场景,加载三维瓦片集模型,同时提供多种特效,像夜景纹理、上下扫光、点光源以及反射纹理等,利用 dat.gui 库创建交互界面。 代码详解 白膜特效 nightFs.glsl void fragmentMain(Fragm…...
Java学习--HashMap
HaspMap是Java集合框架中最重要、最常用的数据结构之一。其基于哈希表实现了Map接口,在Java1.8的版本中,其采用了“数组链表红黑树”的混合结构,底层代码如下: transient Node<K,V>[] table; // 哈希桶数组 static class N…...
Monorepo、Lerna、Yarn Workspaces、pnpm Workspaces 用法
Monorepo 介绍 Monorepo是一种方案,而非具体的工具。 Monorepo指的是将多个相关的项目或模块放在同一个代码仓库中进行管理的方式。这种方案有以下优点: 方便代码共享:不同项目或模块之间可以方便地共享代码、组件、工具函数等,…...
JVM指令手册:深入理解字节码执行机制
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 Java虚拟机(JVM)作为Java生态的核心执行引擎,其指令系统是理解程序底层运行机制的关键。本手册将系统解析JVM指令集…...
springboot logback 默认加载配置文件顺序
在 Spring Boot 应用中,Logback 默认加载配置文件的顺序遵循特定的规则。以下是详细的加载顺序和优先级说明: 1. 默认配置文件加载顺序 Logback 在 Spring Boot 中会按以下顺序查找并加载配置文件(优先级从高到低): l…...
用 Nodemon 解决 npm run serve 频繁重启服务
Nodemon 是一个基于 Node.js 构建的开发工具,专为帮助开发者自动监控项目文件的更改而设计。每当文件发生变更时,Nodemon 会自动重启 Node.js 服务器,无需手动停止并重启。这对于提升开发速度、减少人工操作非常有帮助,尤其适用于…...
WEB安全--社会工程--SET钓鱼网站
1、选择要钓鱼的网站 2、打开kali中的set 3、启动后依次选择: 4、输入钓鱼主机的地址(kali)和要伪装的网站域名: 5、投放钓鱼网页(服务器域名:80) 6、获取账号密码...
系统架构师---基于规则的系统架构
引言 在业务规则高度动态且需快速响应的系统中,基于规则的系统架构风格(Rule-Based System Architecture Style)提供了一种将业务逻辑与代码解耦的标准化范式。从保险理赔的自动化审核到金融风控的实时拦截,规则引擎已成为企…...
嵌入式软件--stm32 DAY 4 中断系统
1.课后练习 学了这么长时间,现在让我们第一次做练习。 1.1往返流水灯 1.1.1 LED1-LED2-LED3-LED2-LED1循环 (1)工程准备 复制上一个寄存器实现的工程文档,删减修改我们正要实现的工程。为了区别练习和学习工程,我们…...