5.9 静态优先级模式(Static Priority Pattern)

ML-KWS-for-MCU深度解剖:边缘AI在MCU上的静态评测与工程架构实战 关键词唤醒(KWS)是边缘AI落地的核心技术之一,其本质是在资源严苛的微控制器(MCU)上实现低延迟、低功耗、高鲁棒的语音触发。这依赖于模型量化、内存精算、硬件抽象与构建系统协同优化等关键技术原理。其技术价值在于突破传统嵌入式开发边界,使语音交互具备量产可行性。典型应用场景涵盖智能门锁、工业HMI、可穿戴设备等无云依赖的本地化语音控制终端。而ML-KWS-for-MCU作为ARM官方维护的生产级参考实现,正是理解TinyML工程化落地逻辑的关键入口,尤其在静态评测与分层架构设计方面提供了不可替代的实践范本。 阅读详情

静态优先级模式是实时系统中最常见的调度方法。它的优点在于简单,并且能够很好地扩展到大量任务。使用标准的速率单调分析方法(Rate Monotonic Scheduling ,RMS),可以简单地分析系统的可调度性(如果每个任务的截止时间小于总周期时间,那么系统将是可调度的。)。

5.9.1 抽象(Abstract)

在实时系统设计中,紧急性(urgency)和关键性(criticality)是两个重要概念。紧急性指的是截止时间的临近程度,而关键性指的是按时完成任务在系统功能或正确性方面的重要性。尽管这两个概念明显不同,操作系统通常提供的是一个概念:优先级。操作系统使用任务的优先级来决定当多个任务准备运行时,哪个任务应该优先执行。

在嵌入式系统中,"紧急性(Urgency)"和"关键性(Criticality)"是两个描述任务重要性的属性,但它们指涉的方面有所不同。

紧急性 (Urgency)

紧急性通常指的是任务完成的时间敏感性。一个紧急的任务意味着它有一个严格的截止时间,必须在此时间之前完成,否则可能导致系统性能下降或者系统行为不正确。实时系统中的许多任务都有高紧急性,需要实时响应。

举例来说,如果嵌入式系统是自动化控制系统,那么响应传感器输入以调整机器状态的任务就具有很高的紧急性,因为延迟响应可能导致控制失稳或安全问题。

关键性 (Criticality)

关键性则是指任务对系统整体功能和安全性的重要程度。一个关键的任务是必须始终正确执行,因为它的失败可能会导致系统失败或者有安全风险。在设计系统时,需要确保关键任务可靠执行,即便在系统资源紧张或其他不利条件下也是如此。

使用同样的自动化控制系统例子,如果有一个任务负责紧急停止全部机器防止伤害操作员的功能,那么这个任务就非常关键,哪怕它的紧急性不如常规的控制任务。

紧急性与关键性的关系

在嵌入式系统的设计和任务调度中,这两个属性通常需要综合考虑:

- **高紧急性但低关键性**:任务必须快速响应,但如果偶尔失败不会造成严重后果。

- **低紧急性但高关键性**:任务不需要立即完成,但任何失败都可能导致严重问题。

- **高紧急性且高关键性**:这类任务既要快速响应,又必须每次都可靠执行。

- **低紧急性且低关键性**:任务不需要立即完成,而且偶尔的失败对系统整体影响不大。

在实时操作系统(RTOS)中,任务的调度通常会基于这些属性。例如,有些实时系统采用的是混合调度模型,它可以同时支持具有不同紧急性和关键性的任务。

设计嵌入式系统时,理解任务的紧急性和关键性及其间的关系对于确定任务的优先级和系统资源分配至关重要,以确保系统既能及时响应也能够维持必要的可靠性。

截止时间重要性

在嵌入式实时操作系统(RTOS)环境中,任务是系统的基本执行单元,通常是响应某种外部事件或满足系统要求的周期性操作。截止时间是指任务必须在指定的时间段内完成的要求。遵守截止时间对于维持整个系统的正常运行至关重要,尤其是在安全关键的应用中,如医疗设备、工业控制系统和交通控制系统。

截止时间类型

任务的截止时间有两种基本类型:

  • 硬截止时间(Hard deadlines):硬截止时间是绝对不可以错过的。违反硬截止时间可能会导致系统失败,有时甚至可能导致财产损失或人身安全事故。例如,在自动驾驶系统中,任务必须在特定时间之前完成对周围环境的探测,否则将导致碰撞。
  • 软截止时间(Soft deadlines):软截止时间允许某种程度的灵活性。偶尔错过软截止时间可能不会造成严重后果,但可能会降低系统性能。例如,在音频播放系统中,任务可以晚于截止时间完成播放,但不能晚于指定的最大延迟,否则将导致音频播放出现卡顿。

截止时间管理

管理RTOS任务的截止时间通常包括以下几个方面:

  • 优先级分配:任务根据其紧急性和截止时间的重要性被赋予不同的优先级。系统确保高优先级任务获得处理器时间,优先于低优先级任务。

  • 调度算法:RTOS使用调度算法来确定哪个任务应当在何时执行。常见算法包括最早截止时间优先(EDF)和固定优先级抢占式调度(RMS)。

  • 时间预算:对任务的执行时间做出严格的预算,包括最坏情况执行时间(WCET)的估计,以确保任务可以在截止时间前完成。

  • 截止时间监测:RTOS经常监控任务的执行状态,以确保它们能够在截止时间内完成。如果某个任务无法按时完成,系统将采取预先规定的补救措施。

  • 抢占和上下文切换:RTOS常允许高优先级任务抢占正在执行的低优先级任务,这要求快速有效的上下文切换技术,确保及时响应。

  • 资源管理:防止优先级反转和死锁等问题,系统可能实现优先级继承或优先级上限协议,确保低优先级任务不会无限阻塞高优先级任务的执行。

结论

截止时间对于确保RTOS能够有效响应其管理的实时任务至关重要。通过使用适当的调度算法和资源管理策略,RTOS可以优化任务执行,降低错过截止时间的风险。这要求开发者具备对任务特性深刻的理解,并在系统设计阶段做出精确的时间分析。在设计这样的系统时,工程师应当考虑各种情况,包括任务中断的处理和对非预期事件的响应策略,以确保系统的稳定性和可预测性。

5.9.2 问题(Problem)

**实时系统要求行为的执行时间必须精确且可预测才能保持正确的功能。**这一要求来自于各种现实世界的情况,例如安全关键系统在发生“事故”之前能够容忍的最大延迟,或 PID 控制环的稳定性特性。

在非实时的响应系统中,PID(比例-积分-微分)控制器广泛应用于持续控制过程。PID控制器通过设定连续的参数值来实施控制,对于监测到的偏差,PID系统能够敏感地进行实时纠正,确保系统的稳定运作。因此,控制器执行的及时性对于系统运行的稳定性具有决定性作用,任何执行上的延误都可能对系统的性能和安全造成不利影响。

5.9.3 模式结构(Pattern Structure)

图 5-17 展示了该模式的基本结构。 

每个“活动”对象(在图中称为 Concrete Thread)都通过调用 createThread 操作并向 Scheduler 传递一个任务执行函数的地址,在 Scheduler 中注册。

每个 Concrete Thread 会一直执行,直到它完成(它通过调用 Scheduler::return() 通知 Scheduler),被更高优先级的任务抢占(将被抢占的任务插入到 Ready Queue 中),或者在试图访问被锁定的 Shared Resource 时被阻塞(将被阻塞的任务插入到 Blocked Queue 中)。

图的上部显示了完整的模式。 在大多数情况下,建模者对调度器及其关联的细节不感兴趣(因为它们是由 操作系统提供的)。当不需要关注基础设施时,则会得到图下半部分所示的简化模式形式。

以下是图 5-17 的简要说明:

  • Concrete Thread: 表示一个活动的对象,执行特定的任务。
  • Scheduler: 操作系统中负责管理线程调度的实体。
  • createThread: 用于创建新的 Concrete Thread 的操作。
  • Ready Queue: 存储等待执行的 Concrete Thread 的队列。
  • Shared Resource: 多个 Concrete Thread 共享的资源。
  • Mutex: 用于保护 Shared Resource 的互斥信号量。

该模式的主要特点包括:

  • 将线程的创建和管理委托给操作系统的 Scheduler。
  • 允许 Concrete Thread 被更高优先级的任务抢占。
  • 支持线程之间的同步和互斥。
  • 简化了并发编程的模型,使开发者可以专注于业务逻辑的实现。

5.9.4 协作角色(Collaboration Roles)

这里讨论的对象通常由操作系统提供:Scheduler、Mutex、Ready Queue和Blocked Queue。

  1. Abstract Thread:这是一个抽象类,为Concrete Thread提供了一个非实例化的超类,定义了线程的基本接口。
  2. Concrete Thread:这是一个具体的线程类,它是Abstract Thread的子类,代表实际执行的线程。
  3. Scheduler:调度器对象负责初始化系统,加载所有任务,并根据任务的优先级来运行它们。
  4. Mutex:互斥量对象,用于保证线程安全,防止多个线程同时访问共享资源。
  5. Ready Queue:就绪队列,存放准备好执行的任务的TCB(任务控制块)引用。
  6. Blocked Queue:阻塞队列,存放因等待资源而被阻塞的任务的TCB引用。
  7. Task Control Block (TCB):任务控制块,包含了线程的调度信息,如优先级、默认起始地址、当前入口地址等。
  8. Timer:计时器对象,向Scheduler发送周期性的时钟信号,告知何时切换当前活动的任务。
  9. Shared Resource:共享资源对象,是由一个或多个线程共享的对象,必须通过互斥量来保护,以确保数据完整性。
  • 抽象线程 (Abstract Thread): 抽象(不可实例化)超类,用于创建具体线程。与调度器关联。具体线程作为子类,拥有与抽象线程相同的调度器接口,确保接口兼容性。
  • 阻塞队列 (Blocked Queue): 任务控制块 (TCB) 引用优先队列。当任务被阻塞(即需要资源可用才能执行)时,其引用会被放入此队列。当任务解除阻塞(所需资源可用)时,它将被从阻塞队列中移除并放入就绪队列。
  • 具体线程 (Concrete Thread): Concrete Thread是一个“活动”对象,它包含了一些被动“语义”对象(用于执行系统实际工作)。具体线程是抽象线程的可实例化子类。
  • 互斥信号量 (Mutex): 互斥访问信号量对象,一次只允许一个调用者访问共享资源。共享资源的操作在调用相关服务时调用它,在开始服务之前锁定,服务完成后解锁。当服务被锁定时尝试调用服务的线程将被阻塞,直到互斥信号量处于解锁状态。互斥信号量向调度器发送信号,通知调度器当前活动线程尝试调用互斥信号量,并提供互斥信号量 ID (用于以后释放时解锁)和入口点(线程继续执行的位置)。
  • 就绪队列 (Ready Queue): 存储当前准备运行的任务的 TCB 引用。只要就绪队列中最高优先级的任务比当前运行任务的优先级更高(或当前运行任务终止),则该任务的 TCB 引用将从就绪队列中移除,其对应的任务开始执行。如果一个线程正在执行,更高优先级的线程被放入就绪队列,则当前执行的线程会被抢占,即停止执行并重新放入就绪队列,高优先级线程优先执行。
  • 调度器 (Scheduler): 根据简单规则(始终运行就绪队列中优先级最高的线程)协调多个线程的执行。一些调度器可能比这更复杂,但这是基本规则。当“活动”线程对象被创建时,它(或其创建者)调用 createThread 操作为“活动”对象创建一个线程。调度器执行此线程时,它会调用 StartAddr:address(除非线程被阻塞或抢占,则调用 EntryPoint 地址)。
  • 共享资源 (Shared Resource): 由一个或多个线程共享的对象。为了在所有情况下系统都能正常运行,所有共享资源要么是可重入的(意味着来自同时访问的破坏不会发生),要么必须受到保护。通过互斥访问信号量进行保护将在受保护调用模式中讨论。对于受保护的资源,当线程尝试使用资源时,会检查关联的互斥信号量,如果被锁定,调用任务将被放入阻塞队列,任务将被终止,其重新进入点记录在 TCB 中。
  • 堆栈 (Stack): 每个抽象线程都有一个用于返回地址和传递参数的堆栈。这通常在应用程序线程的汇编语言级别是显式的,但它是调度基础设施的重要组成部分。
  • 任务控制块 (TCB): TCB 包含与其对应的线程对象相关的调度信息。这包括线程的优先级、默认启动地址以及被抢占或阻塞时的程序入口地址。调度器为每个现有线程维护一个 TCB 对象。注意,TCB 通常也引用该线程的调用和参数堆栈,但图 5-17 中未显示该细节。

5.9.5 结果(Consequences)

在设计实时系统时,紧急性(urgency)和关键性(criticality)是两个重要概念。紧急性指的是截止时间的临近程度,而关键性则指满足截止时间在系统功能或正确性方面的重要性。操作系统通常使用任务的优先级来处理这两个问题,即总是运行当前准备就绪的最高优先级任务。

静态优先级模式是操作系统任务调度的一种普遍方法。它在 UML 中使用“活动”对象来模拟线程,并可针对不同调度策略进行调整。

静态优先级的分配

在这种模式中,任务优先级是在设计阶段就分配好的,这意味着系统在运行时无法动态调整优先级来适应变化的条件。对于大多数系统而言,由于设计时已确保系统能在最坏情况下得以调度,所以此种固定优先级分配方式通常足够。但这也局限了该方法的可扩展性。如果系统环境和系统响应是高度可预测的,则静态优先级可以应用于各种规模的系统。

最常用的优先级分配策略是 RMS

确定优先级的最常用策略是基于速率的单调调度RMS(Rate-Monotonic Scheduling)。RMS调度算法是一种静态调度算法,它根据任务的执行周期来分配任务的优先级。RMS 算法的基本假设如下:

  • 任务是周期性的、可抢占的:
    • 所有任务都是周期性的,即每个任务都有固定的执行周期。任务在周期内执行,周期结束后进入就绪状态,等待下一个周期的执行。
    • 所有任务都是可抢占的,即高优先级的任务可以随时抢占低优先级的任务的执行。
  • 截止时间可以发生在任务周期内的任何时间点:所有任务的截止日期可以发生在周期的任何时间点。RMS 算法保证所有任务都能在截止日期之前完成执行,即使截止时间与周期不相匹配。

在这些条件满足的情况下,RMS 根据任务的周期长度分配优先级——周期越短,优先级越高。这种调度策略被证明是最优和稳定的。如果一组任务可以使用其他策略进行调度,那么也能使用 RMS 调度。在超载情况出现时,其稳定性体现在:能预测出优先级较低的任务会失败。

  • 当 RMS 的第一个假设不成立时,可以使用以下方法来分配优先级:
    • 使用事件驱动型任务的最短到达间隔作为周期
    • 使用其他调度策略
  • 当 RMS 的第二个假设不成立时,可以使用截止时间单调调度(DMS)来分配优先级。在 DMS 中,任务优先级的分配基于截止时间的长度,而不是任务的周期。

5.9.6 实现策略(Implementation Strategies)

步骤:

  1. 识别对象: 首先,从协作对象中找出“活动对象”,即需要多任务处理的对象。
  2. 任务分配: 为每个“活动对象”分配任务。
  3. 对象组合: 将协作对象中的“被动对象”(不需要主动操作的对象)通过组合关系融入“活动对象”内部。
  4. 线程安全: 调整“活动对象”之间的关联,确保线程安全。可以采用之前提到的“Rendezvous 模式”实现资源共享同步,或使用互斥锁等机制防止冲突。

这个模式涉及到的大部分基础设施可由实时操作系统提供,包括阻塞队列、就绪队列、调度器、互斥锁和任务控制块。因此,如果您使用现有操作系统来实现多线程模式,只需关注“抽象线程”、“具体线程”和“共享资源”这三个核心部分。当然,如果您需要自己编写调度器,则需要同时构建操作系统相关对象。

总结:

通过遵循这些步骤并选择合适的工具,您就能够构建安全高效的多线程程序。希望这篇简要说明能帮助您理解和应用多线程模式。

5.9.7 相关模式(Related Patterns)

虽然该模式应用广泛,但在管理多个并发线程时,通常还需要其他模式来解决额外问题。具体而言,以下模式可与之协作:

  • 信息同步和共享: 消息队列模式、受保护调用模式、Rendezvous 模式等,解决线程间高效安全地交换信息和同步行为。
  • 并发资源管理: 静态分配模式、固定大小缓冲区模式、优先级继承模式等,有效管理共享资源和线程对资源的访问。
  • 动态优先级模式: 作为一种可选的替代方案,提供不同的线程调度策略。

通常情况下,线程间需要共享资源。为了保证资源的完整性,常见的一种实现方式是阻塞策略:当优先级较高的线程需要占用低优先级线程持有的资源时,高优先级线程会一直处于阻塞状态,直到资源释放。然而,这种简单方式可能会导致系统无法调度,陷入「无限优先级反转」的困境。针对这一问题,优先级继承、最高锁定人和优先级上限协议等资源共享模式提供了专门的解决方案。

5.9.8 示例模型(Sample Model)

图 5-18 展示了一个多线程模式的示例模型,它基于图 5-17b 的简化形式。在这个模型中,系统创建了三个线程(即主动对象),每个主动对象都在其构造函数中创建了一个操作系统线程来执行任务。主动对象之间可以通过被动对象进行间接通信。被动对象是指在其所在主动对象线程中执行的对象。

  • 数据采集线程 (DataAcqThread) 和过滤线程 (FilteringThread) 共享原始数据 (RawData) 资源,使用互斥信号量 (mutex semaphore) 来序列化访问,防止数据损坏。
  • 过滤线程和显示线程 (DisplayThread) 共享处理后的数据 (CookedData) 资源,同样使用互斥信号量来保护数据完整性。
  • 三个线程以不同的静态优先级运行:数据采集线程优先级最高,显示线程次之,过滤线程最低。调度器决定何时运行每个线程。

执行流程

图 5-18b 展示了该模型的一个典型执行流程:

A. 调度器(Scheduler)运行显示线程(DisplayThread)。显示线程(DisplayThread)从处理后的数据资源(CookedData) 中获取数据。

B. 显示线程(DisplayThread)执行完毕。

C. 调度器(Scheduler)运行过滤线程(FilteringThread) 。过滤线程(FilteringThread) 计划获取原始数据(RawData) ,进行过滤,然后将结果存储为处理后的数据 (CookedData)。然而,在使用原始数据(RawData) 资源期间,它被更高优先级的任务数据采集线程 (DataAcqThread)抢占。

D. 调度器(Scheduler)运行数据采集线程(DataAcqThread)。由于其优先级高于过滤线程(FilteringThread) ,过滤线程(FilteringThread) 被抢占。数据采集线程(DataAcqThread)尝试将数据写入原始数据(RawData)资源。

E. 原始数据(RawData)上的互斥信号量(图中未显示)阻止数据采集线程向原始数据(RawData)资源写入数据,这是为了保护资源的完整性。

F. 由于更高优先级的任务被阻塞,过滤线程(FilteringThread) 被允许继续运行,直到它释放原始数据(RawData)资源。原始数据(RawData)资源释放后,数据采集线程(DataAcqThread)解除阻塞,立即抢占过滤线程(FilteringThread)。数据采集线程(DataAcqThread)执行完毕后,过滤线程(FilteringThread)才被允许继续。它更新处理后的数据 (CookedData)资源,然后终止。

要点总结

  • 该模型展示了三个线程如何共享资源并协作完成任务。
  • 线程间的优先级设置影响了它们的执行顺序,高优先级线程可以抢占低优先级线程的资源。
  • 互斥信号量等同步机制用于保护共享资源的完整性,防止数据损坏。
C#构建可调度语音机器人:TTS自动决策与多引擎路由 语音自动朗读本质是任务驱动的实时音频决策系统,其核心在于文本语义解析、动态TTS引擎路由与异常状态下的自动恢复能力。区别于简单调用SpeechSynthesizer,工业级语音机器人需融合数字单位标准化、多音字消歧、SSML韵律控制等关键技术,实现‘读得准、停得稳、切得快’。C#凭借对Windows音频子系统深度适配、强类型状态机建模及.NET跨版本工程化能力,成为医疗陪护、工控播报、无障碍辅助等高可靠性场景的首选开发语言。本文聚焦可嵌入、可干预、可压测的语音执行体构建实践。 阅读详情

相关推荐

【BlueZ】 log 模块:日志系统的实现与自定义日志输出配置

BlueZ5.x的log模块作为蓝牙守护进程的“听诊器”,采用双路日志架构(syslog+HCILoggingChannel),实现本地持久化与远程实时传输。通过ELF段属性自动注册调试点,支持glob模式过滤与SIGUSR2信号动态启用,结合btmon工具实现协议栈可观测性。核心机制涵盖日志分级、条件输出、HCI二进制协议传输及运行时控制,为嵌入式蓝牙开发提供高效排错能力。

byte轻骑兵的技术小窝 7883

OptiScaler 免费超分替换与帧生成完整指南:从安装到调参的新手配置教程

OptiScaler 是免费开源的超分替换与帧生成工具,拦截游戏里的 DLSS、FSR、XeSS 调用改走你指定的后端,还能给没有帧生成的 DX12 游戏补帧。AMD 卡的游戏只有 DLSS 选项、画面怎么调都糊?交给它。 ## 先判断:它能不能帮你 先说结论:OptiScaler 干的是"替换"的活,不是"无中生有"的活。它拦下游戏发出的超分调用(DLSS 2+、FSR 2+、XeSS),把

gitblog_06899的博客 187

【信息科学与工程学】【数据中心】 第二十七篇 AI领域各类通讯模式01

类型业务特性数据要求数据Pipeline工作流程Pipeline应用场景限制条件机器学习​模式识别、预测分析、决策支持结构化数据、标注数据、特征工程数据采集 → 数据清洗 → 特征提取 → 特征选择 → 数据集划分问题定义 → 数据准备 → 模型选择 → 训练 → 评估 → 调优 → 部署推荐系统、风险评估、客户分群、销售预测依赖数据质量、过拟合风险、解释性差、需要持续更新深度学习​端到端学习、复杂模式提取、自动特征工程大规模数据、标注数据、图像/文本/语音数据增强 → 标准化 → 批处理 → 数据加载器架

weixin_49199313的博客 731

Python代码安全左移:10个Pylint静态分析技巧实战

静态分析是一种在不运行程序的情况下,通过分析源代码的语法、结构和数据流来发现潜在问题的技术。其核心原理是通过预定义的规则集,对代码进行模式匹配和语义分析,从而识别出可能引发运行时错误或安全漏洞的代码模式。这项技术的价值在于能够将缺陷检测“左移”到开发早期,显著降低修复成本并提升软件质量。在Python开发领域,静态分析广泛应用于代码规范检查、类型错误检测以及安全漏洞扫描等场景。本文聚焦于如何深度配置Pylint,结合其内置检查器与pylint-bandit等插件,构建一套自动化安全分析流水线,重点覆盖eva

weixin_34354173的博客 446

C++生产级算法实现:从可运行到可交付

算法在工程落地中远不止时间复杂度推导——它需满足内存确定性、调试可见性、编译期约束与实时性保障等硬性要求。现代C++17/20特性(如constexpr、std::optional、Concepts、std::string_view)为重写经典算法提供了语义清晰、边界可控、零开销抽象的工具链。通过Introsort避免堆分配与退化、KMP实现可单步调试的字符串匹配、数值函数用optional替代magic number错误码,工程师得以将排序、搜索、图算法等‘有用算法’转化为可单元测试、可静态分析、可嵌入部

weixin_34087307的博客 402

GD32F470实战:如何用EXMC+SDRAM为LVGL打造超大内存池(附完整配置代码)

本文详细介绍了如何利用GD32F470的EXMC接口与SDRAM深度整合,为LVGL构建高性能内存解决方案。通过硬件架构设计、EXMC接口配置、高级内存管理策略及LVGL性能优化技巧,开发者可以突破微控制器内存限制,实现高分辨率显示和复杂动画效果。附完整配置代码,助力嵌入式GUI开发。

rrr55的博客 548

REA 快速上手:4 条命令把 AI 编码助手接入本地逆向工程工具链

REA(Reverse Engineer Anything)是面向 AI Agent 的逆向工程工具链:它通过一个 MCP 服务把 Claude Code、Codex、Cursor、VS Code 等 AI 编码助手接入同一套本地分析工具,覆盖原生二进制、JavaScript / Electron 应用、.NET 程序集和网站。分析全程在本机运行,目标文件不会上传;每条结论都附带证据(Eviden

gitblog_00952的博客 439

Modem2G/3G/4G/5G:RFFE Driver(射频前端驱动):高通平台GRFC配置方法

文 | GentlemanTsao 文章目录前言1.什么是GRFC2.GRFC的配置流程概览3.msm_sig_info的配置与分析msm_sig_info Table位置:msm_sig_info Table示例:Table元素解读:rfc_msm_sig_info_type结构体signal typemsm_gpio |grfc_num:GPIO到GRFC的映射output_typefunction_select4._sig_cfg的配置与分析_sig_cfg table位置:_sig_cfg tabl

GentelmanTsao的博客 7315

FreeRTOS-Kernel MISRA C:2012 合规实践:偏差管理体系、Coverity 静态分析与源码级实现剖析

FreeRTOS-Kernel 作为面向小型嵌入式设备的实时操作系统内核,在追求极致的小内存占用与执行效率的同时,宣称全面遵循 MISRA C:2012 编程指南。本篇文章以仓库根目录的 [MISRA.md](https://link.gitcode.com/i/9a21314b7cbc2045f6e83bf2333b8427) 为核心骨架,完整梳理其偏差分类体系、每一条偏差的源码依据与合理解释,

gitblog_00068的博客 322

SAP MM自动化进阶:STO交货单自动创建的配置与优化

本文深入解析了SAP MM模块中实现公司间库存调拨订单(STO)交货单自动创建的完整配置流程与优化策略。通过激活自动交货与绑定发货点两大核心配置,打通自动化链路。重点探讨了如何集成ATP可用性检查以智能处理库存不足等异常场景,确保自动化流程的可靠性与业务贴合度,并提供了进阶监控与问题排查方法,助力企业显著提升供应链效率。

weixin_29206669的博客 124

用Python实现斗地主游戏(终端版)

马上就要过年了 大家也都放假了吧 过年必不可少的活动 打牌! 今天带大家来写一份斗地主 (又是好多天没怎么更新,忙成狗啊) 那么实现一个斗地主呢 我们肯定要先完善卡牌系统 from collections import Counter import numpy as np import itertools def cmp_to_key(mycmp): 'Convert a cmp= function into a key= function' class K: def _

Miku_wx的博客 9856

RuView/wifi-densepose 代码质量与复杂度全量剖析:四语言 Cyclomatic Complexity 扫描、代码异味定位与重构路线图

本文基于仓库内 QE(Quality Engineering)团队生成的[代码质量与复杂度分析报告](https://link.gitcode.com/i/6fe9b8f8ca7d21cd3fd406adfc5eeeae),系统解读 RuView / wifi-densepose 全代码库(Rust 153,139 行、Python 21,399 行、C 固件 7,987 行、TypeScript

gitblog_00180的博客 668

FPGA实现PI控制

FPGA实现PI控制

m0_57319166的博客 3897

Filter路径匹配原理与生产级配置避坑指南

Servlet Filter路径匹配是Java Web请求生命周期中首个关键拦截点,其本质是基于HTTP请求URI的字符串模式匹配,依赖容器对url-pattern的解析规则(如ANT风格、正则、前缀/扩展名匹配)。理解其底层原理,可避免因Tomcat/Jetty/Undertow容器差异、反向代理路径改写、Servlet规范版本演进(如Servlet 3.0+对`/api/*`多级匹配的支持)导致的线上拦截失效。该机制支撑权限控制、日志审计、灰度路由等核心治理能力,广泛应用于Spring Boot Fil

weixin_33858336的博客 362

文献解读:结构方程模型SEM基础,小白看这个就基本够了

今天要解读的依然是一篇教学文献:The Basics of Structural Equation Modeling,文献作者是Diana Suhr, Ph.D. University of Northern Colorado。 文献链接: https://www.lexjansen.com/wuss/2006/tutorials/TUT-Suhr.pdf 结构方程模型是: 用来检验显变量与潜变量关系假设的综合性的统计技巧 用来表示,估计或者检验变量间理论关系的技巧 用来探究一系列潜变量和显变量因

Codewar的博客 6万+

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

天天酷科研的博客 896

mruby 4.0 全面解读:模式匹配、ROM 方法表、GC 优化与 VM 新指令

本文基于 mruby 仓库的 [mruby4.0 变更说明](https://link.gitcode.com/i/f8df4d04dfa54f8b35b4278fe7758f1f),系统梳理 mruby 从 3.4 升级到 4.0 的核心变化。你将掌握 mruby 4.0 新增的 `case/in` 模式匹配语法与各类模式写法、C API 的命名与行为变更、ROM 方法表与 GC 内存优化的底层

gitblog_00062的博客 550

RestFul API 详解

RESTful API 经常也被叫做 REST API,它是基于 REST 构建的 API。RESTful API 可以让你看到 URL+Http Method 就知道这个 URL 是干什么的,让你看到了 HTTP 状态码(status code)就知道请求结果如何。

wynn的博客 7582

CMSIS-5:嵌入式开发的硬件抽象层宪法与工程治理核心

CMSIS-5并非传统标准库,而是ARM Cortex-M系列芯片的底层硬件抽象契约,它定义CPU寄存器访问、中断向量表结构和系统启动流程三大内核级规范。其核心价值在于统一跨厂商、跨工具链的底层编程接口,支撑裸机驱动、RTOS移植与DSP加速等关键能力。通过core_cm7.h等头文件将ARM架构手册转化为可读C结构体,并借助device.h实现芯片外设地址与中断编号的精准映射,显著提升代码可移植性与维护性。在电机控制、医疗设备、工业PLC等对实时性与可靠性要求严苛的场景中,CMSIS-5的版本一致性、启动

weixin_34239169的博客 298

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

企业级AI办公私有闭环:DeepSeek V4+Hermes+ClaudeCode落地实践

私有化大模型办公系统是企业AI落地的核心范式,其本质是将模型推理、智能体编排与消息协同全链路部署于内网环境。技术原理上依赖本地化推理服务(如DeepSeek V4的HTTPS直启与请求级上下文隔离)、生产级Agent运行时(Hermes插件化Executor与声明式路由)及去中心化代码分析引擎(ClaudeCode静态分析管道+本地模型适配)。该架构显著提升数据安全、审计合规与流程嵌入能力,广泛适用于制造业代码理解、金融风控问答、电商运营提效等强敏感、高定制场景。本文聚焦‘零商业授权依赖、零云服务绑定、零前

weixin_30632883的博客 341

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

不用注册密钥,一条URL拿到JSON天气数据:wttr.in上手速查

市面上多数天气API都要先注册账号、申请API key,还要盯着每日调用配额。wttr.in 走的是另一条路:免费、免密钥,你只管在URL后面挂上参数,它返回的就是一份结构化的JSON天气数据,curl 一下就能取。这篇文章按"先看效果—看懂字段—参数速查—接入工具—避坑"的顺序讲,照着做就行。 [![wttr.in 在 Raycast 工具中的天气面板集成效果](https://raw.git

gitblog_00642的博客 377

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

FreeRTOS-Kernel examples 实战指南:从最小 CMake 工程到 Coverity MISRA 合规检查

本指南以 FreeRTOS-Kernel 仓库的 [examples 目录](https://link.gitcode.com/i/2a8b48341761b1c7e42649cb131aa017) 为骨架,系统讲解如何基于内核源码搭建你的第一个 FreeRTOS 工程、如何用模板 `FreeRTOSConfig.h` 完成内核配置,以及如何借助 Coverity 静态分析工具验证内核的 MISR

gitblog_00697的博客 84

Agentic Awesome Skills 代码库重构实战:从 Code Smell 识别到 Clean Code 落地的完整实施手册

在 AAS(Agentic Awesome Skills)的开源仓库中,`codebase-cleanup-refactor-clean` 技能为 Agent 提供了一套可执行的代码重构方法论:从识别坏味道、制定重构策略、应用 SOLID 原则,到输出可验证的测试与质量度量报告。本文以该技能的 [implementation-playbook.md](https://pre-link.gitcod

gitblog_01192的博客 225

从非结构化文本到结构化数据:可配置解析器的设计与实现

数据解析是数据处理流程中的关键环节,其核心原理是通过模式识别与规则匹配,将非结构化或半结构化的原始文本转换为程序可直接使用的结构化数据。这一技术对于提升数据可用性、支持自动化分析具有重要价值,广泛应用于日志处理、数据清洗、信息抽取等场景。本文聚焦于游戏与电竞领域,针对如“2026VCT CN STAGE2 | BLOG 04 湘刃争先”这类混合格式的赛事信息字符串,深入探讨如何设计一个健壮且可扩展的解析器。通过引入可配置的字段提取器(FieldExtractor)与解析策略,并结合正则表达式等模式匹配技术,

weixin_30570101的博客 408

Nim 语言手册深度解读:从词法、语法到类型系统与宏的完整技术指南

本指南以 Nim 官方语言手册([doc/manual.md](https://link.gitcode.com/i/a6fb20f96395a9a32bb82cbcc81d63c5))为核心骨架,系统讲解 Nim 语言的词法、语法、类型系统、语句与表达式、过程与模板宏、泛型、效果系统、异常处理、模块与包、Pragmas 以及 FFI 与线程等核心机制。读者将掌握 Nim 的编译模型与关键语义细节

gitblog_00476的博客 414

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 289
上一篇: 5.8 轮询调度模式
下一篇: 5.10 动态优先级模式
Let's Chat Coding
博客等级 码龄3年 1020粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值