一起学习下RT-Thread的C语言编码规范

RT-Thread实时操作系统简介 阅读详情

作者:架构师李肯

前言

最近博主在学习 RT-Thread 这个开源项目,开始慢慢学习和理解它的开源代码,慢慢开始接触了它的代码规范。
我个人认为,参与一个开源项目的第一步,就是要好好理解它的规范,其中代码编写规范就是很重要的一环。

RT-Thread 编程风格

这是一份 RT-Thread 开发人员的开发指引。RT-Thread 做为一份开源软件,它需要由不同的人采用合作的方式完成,这份文档是开发人员的一个指引。RT-Thread 的开发人员请遵守这样的编程风格。同时对于使用 RT-Thread 的用户,也可通过这份文档了解 RT-Thread代码内部一些约定从而比较容易的把握到 RT-Thread 的实现方式。

1.目录名称

目录名称如果无特殊的需求,请使用全小写的形式;目录名称应能够反映部分的意思,例如各芯片移植由其芯片名称构成或芯片类别构成;components 目录下能够反映组件的意义。

2.文件名称

文件名称如果无特殊的需求(如果是引用其他地方,可以保留相应的名称),请使用全小写的形式。另外为了避免文件名重名的问题,一些地方请尽量不要使用通用化、使用频率高的名称。

设备驱动源码文件:drv_class.c 的命名方式,如:

  • drv_spi.c

  • drv_gpio.c

3.头文件定义

C 语言头文件为了避免多次重复包含,需要定义一个符号。这个符号的定义形式请采用如下的风格:

1    #ifndef __FILE_H__
2    #define __FILE_H__
3    /* header file content */
4    #endif

即定义的符号两侧采用 “__” 以避免重名,另外也可以根据文件名中是否包含多个词语而采用 “_” 连接起来。

4.文件头注释

在每个源文件文件头上,应该包括相应的版权信息,Change Log 记录:

1/*
 2 * Copyright (c) 2006-2020, RT-Thread Development Team
 3 *
 4 * SPDX-License-Identifier: Apache-2.0
 5 *
 6 * Change Logs:
 7 * Date           Author       Notes
 8 * 2006-03-18     Bernard      the first version
 9 * 2006-04-26     Bernard      add semaphore APIs
10 */

例如采用如上的形式。

5.结构体定义

结构体名称请使用小写英文名的形式,单词与单词之间采用 “_” 连接,例如:

1    struct rt_list_node
2    {
3        struct rt_list_node *next;
4        struct rt_list_node *prev;
5    };

其中,"{","}" 独立占用一行,后面的成员定义使用缩进的方式定义。

结构体等的类型定义请以结构体名称加上 “_t” 的形式作为名称,例如:

1    typedef struct rt_list_node rt_list_t;

因为内核中对象引用方便的缘故,采用了对象内核指针作为类型定义的形式,例如:

1    typedef struct rt_timer* rt_timer_t;

6.宏定义

在RT-Thread中,请使用大写英文名称作为宏定义,单词之间使用 “_” 连接,例如:

1    #define RT_TRUE                         1

7.函数名称、声明

函数名称请使用小写英文的形式,单词之间使用 “_” 连接。提供给上层应用使用的 API接口,必须在相应的头文件中声明;如果函数入口参数是空,必须使用 void 作为入口参数,例如:

1rt_thread_t rt_thread_self(void);

内部静态函数命名:以下划线开头,使用 _class_method 格式,不携带_rt_开头,如内核或驱动文件中的函数命名:

1/* IPC object init */
2static rt_err_t _ipc_object_init()
3
4/* UART driver ops */
5static rt_err_t _uart_configure()
6static rt_err_t _uart_control()

调用注册设备接口的函数命名:使用 rt_hw_class_init() 格式,举例:

1int rt_hw_uart_init(void)
2int rt_hw_spi_init(void)

8.注释编写

请使用英文做为注释,使用中文注释将意味着在编写代码时需要来回不停的切换中英文输入法从而打断编写代码的思路。并且使用英文注释也能够比较好的与中国以外的技术者进行交流。

语句注释:

源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些相应提示性的注释以解释一段复杂的算法它是如何工作的。对语句的注释只能写在它的上方或右方,其他位置都是非法的。

1/* 你的英文注释 */

函数注释:

注释以 /** 开头,以 */ 结尾,中间写入函数注释,组成元素如下,每个元素描述之间空一行,且首列对齐:

  • @brief + 简述函数作用。在描述中,着重说明该函数的作用,每句话首字母大写,句尾加英文句号。

  • @note + 函数说明。在上述简述中未能体现到的函数功能或作用的一些点,可以做解释说明,每句话首字母大写,句尾加英文句号。

  • @see + 相关 API 罗列。若有与当前函数相关度较高的 API,可以进行列举。

  • @param + 以参数为主语 + be 动词 + 描述,说明参数的意义或来源。

  • @return + 枚举返回值 + 返回值的意思,若返回值为数据,则直接介绍数据的功能。

  • @warning + 函数使用注意要点。在函数使用时,描述需要注意的事项,如使用环境、使用方式等。每句话首字母大写,句尾加英文句号。

注释模版请参见:rt-thread/src/ipc.c 源码文件,英文注释请参考使用 grammarly 以及谷歌翻译。

1/**
 2 * @brief    The function will initialize a static event object.
 3 *
 4 * @note     For the static event object, its memory space is allocated by the compiler during compiling,
 5 *           and shall placed on the read-write data segment or on the uninitialized data segment.
 6 *           By contrast, the rt_event_create() function will allocate memory space automatically
 7 *           and initialize the event.
 8 *
 9 * @see      rt_event_create()
10 *
11 * @param    event is a pointer to the event to initialize. It is assumed that storage for the event
12 *           will be allocated in your application.
13 *
14 * @param    name is a pointer to the name that given to the event.
15 *
16 * @param    value is the initial value for the event.
17 *           If want to share resources, you should initialize the value as the number of available resources.
18 *           If want to signal the occurrence of an event, you should initialize the value as 0.
19 *
20 * @param    flag is the event flag, which determines the queuing way of how multiple threads wait
21 *           when the event is not available.
22 *           The event flag can be ONE of the following values:
23 *
24 *               RT_IPC_FLAG_PRIO          The pending threads will queue in order of priority.
25 *
26 *               RT_IPC_FLAG_FIFO          The pending threads will queue in the first-in-first-out method
27 *                                         (also known as first-come-first-served (FCFS) scheduling strategy).
28 *
29 *               NOTE: RT_IPC_FLAG_FIFO is a non-real-time scheduling mode. It is strongly recommended to
30 *               use RT_IPC_FLAG_PRIO to ensure the thread is real-time UNLESS your applications concern about
31 *               the first-in-first-out principle, and you clearly understand that all threads involved in
32 *               this event will become non-real-time threads.
33 *
34 * @return   Return the operation status. When the return value is RT_EOK, the initialization is successful.
35 *           If the return value is any other values, it represents the initialization failed.
36 *
37 * @warning  This function can ONLY be called from threads.
38 */
39rt_err_t rt_event_init(rt_event_t event, const char *name, rt_uint8_t flag)
40{
41   ... 
42}

9.缩进及分行

缩进请采用 4 个空格的方式。如果没有什么特殊意义,请在 “{” 后进行分行,并在下一行都采用缩进的方式,例如:

1    if (condition)
2    {
3        /* others */
4    }

唯一的例外是 switch 语句,switch-case 语句采用 case 语句与 switch 对齐的方式,例如:

1    switch (value)
2    {
3    case value1:
4        break;
5    }

case 语句与前面的 switch 语句对齐,后续的语句则采用缩进的方式。分行上,如果没有什么特殊考虑,请不要在代码中连续使用两个以上的空行。

10.大括号与空格

从代码阅读角度,建议每个大括号单独占用一行,而不是跟在语句的后面,例如:

1    if (condition)
2    {
3        /* others */
4    }

匹配的大括号单独占用一行,代码阅读起来就会有相应的层次而不会容易出现混淆的情况。空格建议在非函数方式的括号调用前留一个空格以和前面的进行区分,例如:

1    if (x <= y)
2    {
3        /* others */
4    }
5
6    for (index = 0; index < MAX_NUMBER; index ++)
7    {
8        /* others */
9    }

建议在括号前留出一个空格(涉及的包括 if、for、while、switch 语句),而运算表达式中,运算符与字符串间留一个空格。另外,不要在括号的表达式两侧留空格,例如:

1    if ( x <= y )
2    {
3        /* other */
4    }

这样括号内两侧的空格是不允许的。

11.trace、log信息

在 RT-Thread 中,普遍使用的 log 方式是 rt_kprintf。rt_kprintf 在 RT-Thread 被实现成一个采用轮询、非中断方式的字串输出,能够适合于在中断这类"即时"显示日志的场合。因为这种轮询方式的存在,也必然会影响到日志输出的时序关系。

建议在代码中不要频繁的使用 rt_kprintf 作为日志输出,除非你真正的明白,你的代码运行占用的时间多一些也没什么关系。

日志输出应该被设计成正常情况下是关闭状态(例如通过一个变量或宏就能够开启),并且当真正输出日志时,日志是易懂易定位问题的方式。"天书式"的日志系统是糟糕的,不合理的。

12.函数

在内核编程中,函数应该尽量精简,仅完成相对独立的简单功能。函数的实现不应该太长,函数实现太长,应该反思能够如何修改(或拆分)使得函数更为精简、易懂。

13.对象

RT-Thread 内核采用了 C 语言对象化技术,命名表现形式是:对象名结构体表示类定义、对象名 + 动词短语形式表示类方法,例如:

1    struct rt_timer
2    {
3        struct rt_object parent;
4        /* other fields */
5    };
6    typedef struct rt_timer* rt_timer_t;

结构体定义 rt_timer 代表了 timer 对象的类定义;

1rt_timer_t rt_timer_create(const char* name,
2                           void (*timeout)(void* parameter), 
3                           void* parameter,
4                           rt_tick_t time, rt_uint8_t flag);
5rt_err_t rt_timer_delete(rt_timer_t timer);
6rt_err_t rt_timer_start(rt_timer_t timer);
7rt_err_t rt_timer_stop(rt_timer_t timer);

rt_timer + 动词短语的形式表示能够应用于 timer 对象的方法。

在创建一个新的对象时,应该思考好,对象的内存操作处理:是否允许一个静态对象存在,或仅仅支持从堆中动态分配的对象。

14.格式化代码

格式化代码是指通过脚本自动整理你的代码,并使其符合 RT-Thread 的编码规范。本文提供以下两种自动格式化代码方法,可以自行选择或配合使用。

使用 astyle 格式化

用 astyle 自动格式化代码,参数如下:

1      --style=allman
 2      --indent=spaces=4
 3      --indent-preproc-block
 4      --pad-oper
 5      --pad-header
 6      --unpad-paren
 7      --suffix=none
 8      --align-pointer=name
 9      --lineend=linux
10      --convert-tabs
11      --verbose

能满足函数空格、缩进、函数语句等的规范。

使用 formatting 格式化

使用 formatting 扫描文件来格式化代码:formatting 可以满足编码规则的基本要求,如:

  • 将源文件编码统一为 UTF-8

  • 将 TAB 键替换为 4 空格

  • 将每行末尾多余的空格删除,并统一换行符为 ‘\n’


RT-Thread开发者大会

我们将联合重量级合作伙伴,围绕AIoT的发展、产业技术趋势,聚焦控制、连接、行业应用开发,通过主题演讲、技术分享、应用演示等环节,助力开发者探索万物智能的世界,期待与大家一起相聚线上直播间!

现在扫码报名

我们将在报名者中抽取 “幸运参会者100名”

赠送RT-Thread新款开发板(即将揭秘)

17ae07b466081b5a63c9e3a615c2758b.png

本次将在大会当天在直播间宣布中奖名单

更多奖品即将来袭...

你可以添加微信17775982065为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

3af9827bf474696284e626836eb6b0a0.gif

爱我就给我点在看f2502882905354d15912a0aa955b7ab4.gif

👇点击阅读原文进入报名

RT-Thread简介及启动流程分析 RT-Thread是一个来自中国的开源、中英文双语的实时操作系统(RTOS),它适用于各种资源受限的嵌入式系统。自2006年由熊谱翔(Bernard Xiong)创建以来,RT-Thread已经发展成为一个功能丰富、高度可伸缩、完全开源的实时操作系统。实时性能:RT-Thread提供了高实时性能,能够满足嵌入式系统对实时性的需求。可伸缩性:系统设计为可伸缩,可以运行在从几百字节内存的简单嵌入式设备到拥有大量内存的复杂系统。组件丰富。 阅读详情

相关推荐

Notes on learning RT-Thread——线程应用示例

创建线程 /* * 程序清单:创建/删除、初始化线程 * * 这个例子会创建两个线程,一个动态线程,一个静态线程。 * 一个线程在运行完毕后自动被系统删除,另一个线程一直打印计数。 */ #include <rtthread.h> #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 512 ...

HBX_1024的博客 613

[嵌入式系统-15]:RT-Thread -1- 简介与技术架构

RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议)。实时线程操作系统不仅仅是一个单一的实时操作系统内核,它也是一个完整的应用系统,包含了实时、嵌入式系统相关的各个组件:TCP/IP协议栈,libc接口,图形用户界面等。

文火冰糖(王文兵)的博客 5685

RT-Thread C语言编码规范:嵌入式开发团队协作与代码质量的工程实践

在嵌入式系统开发中,编码规范是保障软件质量、提升团队协作效率的基础工程实践。它通过约定俗成的规则,从语法、格式到设计原则,系统性地解决C语言编程中的灵活性与安全性矛盾。其核心原理在于统一代码风格、明确命名规则、约束危险特性,从而提升代码的可读性、可维护性与可移植性。在实时操作系统等对稳定性和资源有严苛要求的场景下,规范的价值尤为凸显,它能有效规避内存越界、野指针等隐蔽陷阱,并减少因风格不一致导致的合并冲突。例如,通过禁用C99变长数组、规范宏定义和使用定长数据类型,可以显著增强代码在资源受限环境下的确定性与

weixin_42523718的博客 581

[嵌入式系统-78]:RT-Thread:线程管理的基本原理与应用

RT_Thread实时操作系统为空闲线程提供了一个钩子函数(钩子函数:用户提供的一段代码,在系统运行的某一路径上设置一个钩子,当系统经过这个位置时,转而执行这个钩子函数,然后再返回到它的正常路径上) ,可以让系统在空闲的时候执行一些特定的任务,例如系统运行指示灯闪烁,电源管理等,除了调用钩子函数,RT_Thread也把线程清理(rt_thread_cleanup)函数,真正的线程删除动作放到了空闲线程中(在删除线程时,仅改变线程的状态为关闭状态不在参与系统调度)。在系统线程切换时,这个钩子函数将被调用。

文火冰糖(王文兵)的博客 3173

RT-Thread嵌入式C语言编码规范:提升代码质量与团队协作效率

在嵌入式系统开发中,编码规范是保障软件质量与可维护性的基石。它通过统一命名、格式、注释等规则,从原理上约束代码的随意性,确保其清晰性与一致性。这一实践的技术价值在于显著降低代码理解与维护成本,预防因风格混乱或常见陷阱(如宏展开错误、指针误用)引入的深层缺陷。在实时操作系统(RTOS)及资源受限的嵌入式应用场景下,遵循规范对于提升团队协作效率、保障系统稳定至关重要。本文以RT-Thread项目为例,详解其C语言编码规范的核心原则与工程实践,涵盖命名规则、格式排版、函数与宏设计、内存操作安全及静态检查工具集成等

weixin_42575325的博客 564

k210芯片用c语言开发,dock_k210_rtt: 在lichee dan dock 的 k210芯片上运行rt-thread,并且实现摄像头与lcd驱动、音频驱动。最后实现人脸识别功能。...

简介RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。RT-Thread有完整版和Nano版,对于资源受限的微控制器(MCU...

weixin_32065293的博客 1673

RT-Thread的C语言编码规范

关注+星标公众号,不错过精彩内容 作者:架构师李肯 来源 | RTThread 一个优秀的项目,必定有优秀的“基因”,而编码规范就是其中之一。 之前给大家分享过很多关于编码规范的内容,今年分享一下RT-Thread的编码规范。RT-Thread 编程风格这是一份 RT-Thread 开发人员的开发指引。RT-Thread 做为一份开源软件,它需要由不同的人采用合作的方式完成,这份文档是开发...

strongerHuang 1588

嵌入式开发学习路线图:从零基础到项目实战的完整指南

嵌入式系统作为专用计算机系统,其核心在于软硬件协同与资源受限环境下的高效运行。其工作原理基于微控制器或微处理器,通过驱动程序和实时操作系统(RTOS)管理硬件资源与任务调度,实现特定功能。这项技术的价值在于为智能设备提供可靠、实时的控制核心,是物联网、汽车电子和工业自动化等领域的基础。应用场景广泛覆盖消费电子、工业控制和边缘计算。本文以**STM32**和**RT-Thread**为例,系统梳理了从C语言基础、外设驱动到RTOS应用的学习路径,并提供了智能温湿度监测终端等综合项目实战,旨在帮助学习者构建清晰

weixin_33704591的博客 663

STM32 RT-Thread工程构建方法

RT-Thread是一款完全由国内团队开发维护的嵌入式实时多线程操作系统,支持多任务调度。通过任务调度器实现快速任务切换,使多个任务看似同时运行。在RT-Thread中,任务通过线程来实现。RT-Thread采用C语言编写,易于理解和移植。它采用面向对象设计,代码优雅且模块化。对于资源受限的MCU系统,可裁剪出仅需3KB Flash和1.2KB RAM的NANO版本;对于资源丰富的物联网设备,则可实现图形界面、智能语音等复杂功能。

qq_41946744的博客 1360

【RT-Thread学习笔记】一起学习下RT-Thread的C语言编码规范

本文主要介绍了RRT开源操作系统的C语言编码规范,大家一起来学习吧。

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 8869

ANSYS Maxwell:创建即用型 3D 轴向磁通电机模型

Magnet Length” 是磁体的径向长度。“Magnet Thickness” 是磁体的轴向长度。为了对 AFM 进行更详细的分析,用户需要在 ANSYS Maxwell 中运行 3D FEA 分析。对于 2D 模型,它们类似于 MotorCAD 中的模型,后者对等效的直线电机进行建模。单击“确定”后,将创建一个 3D Maxwell 模型。“长度”是转子铁的轴向长度。然后需要定义定子的“磁芯”尺寸和材料。“长度”是定子铁芯的轴向长度。“转子”# 的极数必须与“定子”中定义的磁极相同。

jkh920184196的博客 1930

RT-Thread

以及相应的说明,方便用户快速上手。

qq_24093081的博客 1233

用面包板实测MOSFET:手把手教你测量跨导和开关时间

本文详细介绍了如何使用面包板、Arduino和示波器搭建测试平台,实测MOSFET的跨导和开关时间。通过分步测量流程和示波器技巧,帮助电子设计初学者深入理解MOSFET的动态特性,包括跨导计算、开关时间参数解析以及米勒平台现象分析。

beer8的博客 218

RT-Thread内核源码编码规范

RT-Thread 做为一份开源软件,它需要由不同的人采用合作的方式完成,这份文档是开发人员的一个指引。"天书式"的日志系统是糟糕的,不合理的。源代码的注释不应该过多,更多的说明应该是代码做了什么,仅当个别关键点才需要一些相应提示性的注释以解释一段复杂的算法它是如何工作的。建议在代码中不要频繁的使用 rt_kprintf 作为日志输出,除非你真正的明白,你的代码运行占用的时间多一些也没什么关系。在创建一个新的对象时,应该思考好,对象的内存操作处理:是否允许一个静态对象存在,或仅仅支持从堆中动态分配的对象。

strongerHuang 261

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载)

本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。

weixin_29210727的博客 444

缺陷检测:使用PatchCore训练自己的数据集

必须包含有训练图片(无缺陷图片)、测试图片(缺陷图片)和ground_truth,并且ground_truth必须与对应图片的名称相同。同上一篇结果一样,我的输出为原始图片大小,但是不知道是不是因为图片不是正方形的,导致训练结果不好。编写一个脚本,重新规划数据集的路径规则,但是我稍微写复杂了一点,使用了类来操作。第二种(复杂):编写一个自己的Dataset,参考。第一种(简单):将数据集路径规则改成项目中。返回的必须是一个字典类型,可以阅读。本人此次使用的是第一种方法。运行时,参数部分直接输入。

xiaoxTai的博客 6473

RT-Thread笔记 之 编程风格

RT-Thread使用的编码规范

weixin_42517895的博客 522

【CANoe示例分析】0002_SOMEIPDemo

该工程由Vector官方提供,作为仿真SOME/IP节点的示例。Demo中介绍了两种仿真SOME/IP节点的方法,一种是基于arxml数据库的仿真,另一种是没有数据库(arxml、fibex)的仿真。无论是哪种形式的仿真,如果想要通过CAPL程序接收或者发送SOME/IP信息,都需要添加交互层的信息,这些信息可以通过添加DLL文件实现,DLL文件路径在CANoe安装目录下的Exec32文件中。

jasonj333 3513

《嵌入式系统 - RT-Thread开发笔记》 第一部分 前言 - 第1章 RT-Thread简介

RT-Thread介绍 RT-Thread官方网站 RT-Thread版本:3.1.3 1.1 RT-Thread介绍 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接触,你会逐渐发现 RT-Thread 的魅力和它相较于其他同类型 RTOS 的种种优越之处。RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过近 12 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。 R

不问归期的博客 1654

基于YOLOv8和时序模型的异常动作检测系统

异常动作检测是计算机视觉领域的重要应用,广泛应用于智能监控、安防系统、老人看护等场景。本项目结合YOLOv8目标检测和LSTM时序模型,实现对打架、摔倒、奔跑等异常动作的实时检测,并提供了完整的Web界面。多技术融合: 结合YOLOv8目标检测和LSTM时序建模实时检测: 支持实时视频流处理和文件分析用户友好: 提供完整的Web界面可扩展性: 模块化设计便于功能扩展高性能: 包含多种优化策略。

YOLO 763

【NVIDIA-GB200-1】国内第一份生产环境实战安装配置教程,配置安装脚本,nvidia gb200配置教程-复制即用;gb200驱动安装

GB200 的高性能通信依赖。

jundao1997的专栏 704

RT-Thread嵌入式操作系统代码风格指南

在嵌入式系统开发中,良好的代码风格对于项目的可维护性和团队协作至关重要。RT-Thread作为一款开源嵌入式实时操作系统,其代码风格规范经过多年实践积累,形成了独特的编码标准。本文将详细介绍RT-Thread项目的代码风格要求,帮助开发者编写符合规范的代码。 ## 1. 目录与文件命名规范 ### 1.1 目录命名 RT-Thread要求目录名全部使用小写字母,并采用描述性名称。例如: - 芯

gitblog_00151的博客 604

【电源专题】案例:对比不同电池在不同电流下的电池放电曲线

无

一点硬件 2840

RT-Thread 一款小而美的物联网操作系统

本文主要介绍RT-Thread。

weixin_39939185的博客 1261

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RT-Thread Studio编译踩坑实录:从uint8_t报错到宏定义冲突的实战解决

本文针对RT-Thread Studio开发中常见的编译错误,提供了从基础到进阶的实战解决方案。详细解析了uint8_t未定义、宏定义冲突等典型编译错误的根源,并给出了具体的排查步骤与修复方法,帮助开发者高效解决编译问题,提升开发效率。

postgres8guard的博客 660

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RT-Thread国赛项目进阶指南:从硬件选型到调试实战

实时操作系统(RTOS)是嵌入式与物联网设备的核心软件基础,负责管理硬件资源并提供多任务并发执行能力。其工作原理基于任务调度、中断管理和进程间通信,确保了系统的实时性与可靠性。在物联网和边缘计算蓬勃发展的背景下,掌握RTOS技术对于开发高性能、低功耗的智能设备具有重要价值。RT-Thread作为一款国产开源RTOS,凭借其丰富的软件包生态和活跃的社区,为开发者提供了从创意验证到产品落地的完整支持。本文聚焦于如何基于RT-Thread进行高效开发,深入探讨了硬件选型与软件生态的协同策略,并分享了针对系统启动、

weixin_30482181的博客 398

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 【RT-Thread Studio更新】英飞凌 PSOC62-IFX-PROTO-KIT 开发环境搭建指南
下一篇: 基于RoboMasterC型开发板的RT-Thread使用分享(二)
RT-Thread物联网操作系统
博客等级 码龄6年 2万+粉丝 392原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值