色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread記錄(十一、UART設備—源碼解析)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-07-01 11:24 ? 次閱讀
深入理解 RT-Thread I/O 設備模型 — 分析 UART設備源碼。

目錄

前言
一、初識 UART 操作函數(應用程序)
二、UART 的初始化

2.1 UART 設備初始化位置
2.2 UART 設備初始化函數分析
stm32_uart 結構體
UARTX_CONFIG
stm32_uart 結構體初始化
2.3 UART 設備初始化結果圖

三、UART 設備驅動框架層

設備驅動框架層如何與設備驅動層關聯

四、UART 設備驅動層

前言

上文我們認識了解了 RT-Thread I/O 設備模型,本來計劃是從最簡單的設備 GPIO 口開始講解 RT-Thread 的設備模型,但是實際上 PIN 設備模型有點特殊,并不是完美符合上一篇博文中 《2.3 訪問 I/O 設備相關》小結介紹的函數,所以這個我們放在后面文章說明。

而 UART 設備模型的操作完美貼合上一篇博文的介紹,所以我把 UART 設備先說明了,這樣更加加深一下對 RT-Thread I/O 設備模型的認識。

本文從 UART 設備驅動層 和 設備驅動框架層 分析 RT-Thread 中 UART 設備的實現。目的在于通過官方一個成熟的設備驅動的實例,讓我們確實的理解體會 RT-Thread I/O 設備模型。

本 RT-Thread 專欄記錄的開發環境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及 配合CubeMX開發快速上手)
RT-Thread記錄(二、RT-Thread內核啟動流程 — 啟動文件和源碼分析)
RT-Thread 設備篇系列博文鏈接:
RT-Thread記錄(十、全面認識 RT-Thread I/O 設備模型)

一、初識 UART 操作函數(應用程序)

首先我們來看一下在 RT-Thread 中 UART 操作函數,這是模型框架中最上層的應用層所需要調用的函數,如下面的表格:

rt_device_find() 查找設備
rt_device_open() 打開設備
rt_device_read() 讀取數據
rt_device_write() 寫入數據
rt_device_control() 控制設備
rt_device_set_rx_indicate() 設置接收回調函數
rt_device_set_tx_complete() 設置發送完成回調函數
rt_device_close() 關閉設備

可以看到,對 UART 的操作和上一篇文章 《RT-Thread記錄(十、全面認識 RT-Thread I/O 設備模型)》 幾乎一模一樣,這也是前言中我說的為什么 UART 設備模型 是復習理解 RT-Thread I/O 設備模型的完美設備。

對于這些操作函數,是給最上層的應用程序使用的,我們要使用一個 UART 設備,應用程序最開始肯定是需要使用rt_device_find()查找設備,在上一篇文章說過,大部分常用的設備 RT-Thread 已經幫我們寫好了驅動,我們直接在應用層調用操作接口即可,UART的驅動也是 RT-Thread 已經寫好的。

那么我們該查找什么名字呢?RT-Thread 底層是如何實現的呢? 帶著這些問題,我們從最開始來分析說明一下 RT-Thread 的 UART 設備。

?? 先列出 RT-Thread 的 UART 操作函數,讓我們對 UART 應用層的函數有個了解,然后帶著一些好奇讓我們從底層源碼來分析一下 RT-Thread 的 UART 設備。

二、UART 的初始化

首先,UART 設備作為一個外設,肯定需要初始化,我們在系列博文第二篇《RT-Thread記錄(二、RT-Thread內核啟動流程 — 啟動文件和源碼分析)》分析過 RT-Thread 初始化。

2.1 UART 設備初始化位置

在文中章節 “2.2.1 板級硬件初始化 — rt_hw_board_init” 講到了硬件初始化相關,如下圖:

pYYBAGK-aP6AI8ddAAUCUc387t0000.png

rt_hw_board_init() 函數中有一個 hw_board_init,使用到的 UART 設備的初始化就在這個函數里面,如圖:

poYBAGK-aP6AFAtJAAD0rsvycHg822.png

說明一下,這個hw_board_init里面初始化的哪些設備是和 RT-Thread 配置一一對應的。

注意到他們都是條件編譯,在 env 工具中配置了使用的外設之后,都會在這里進行初始化,對于我們使用 RT-Thread Studio 來說,就是如下圖所示:

pYYBAGK-aP6AT6pNAAEMRYaBInM193.png

2.2 UART 設備初始化函數分析

通過上文介紹,我們找到了 UART 設備的初始化函數 rt_hw_usart_init

int rt_hw_usart_init(void)
{
    rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);
    struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
    rt_err_t result = 0;

    stm32_uart_get_dma_config();

    for (int i = 0; i < obj_num; i++)
    {
        uart_obj[i].config = &uart_config[i];
        uart_obj[i].serial.ops    = &stm32_uart_ops;
        uart_obj[i].serial.config = config;
        /* register UART device */
        result = rt_hw_serial_register(&uart_obj[i].serial, uart_obj[i].config->name,
                                       RT_DEVICE_FLAG_RDWR
                                       | RT_DEVICE_FLAG_INT_RX
                                       | RT_DEVICE_FLAG_INT_TX
                                       | uart_obj[i].uart_dma_flag
                                       , NULL);
        RT_ASSERT(result == RT_EOK);
    }

    return result;
}

這個初始化函數直接看上去,只有一個函數我們比較熟悉rt_hw_serial_register,顧名思義,串口設備注冊函數,不同于簡單的 I/O 設備注冊函數 rt_device_register,說明它 UART 設備還有設備驅動框架層,這個rt_hw_serial_register就是 UART 設備驅動框架層定義的函數。

這個設備驅動層 和 設備驅動框架層我們待會再來說明,我們先從頭簡單分析一下這個 UART 設備驅動程序。

第一句,這個語句是為了確認一下有幾個串口設備需要進行初始化:

rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);

其中 uart_obj 有如下定義:

static struct stm32_uart uart_obj[sizeof(uart_config) / sizeof(uart_config[0])] = {0};

uart_objstm32_uart 類型的結構體數組,其數組長度為sizeof(uart_config)/sizeof(uart_config[0])

stm32_uart 結構體

在 RT-Thread 操作系統中,對 UART設備的初始化,可以理解為就是對 stm32_uart 結構體對象 的初始化 。

我畫了一張結構圖如下:

poYBAGK-aP-AOaGMAAIYqo2jgbM159.png

stm32_uart 結構體這里我們先不分析里面具體的含義,在后文對應的地方都會有響應的說明,我們先回到初始化的問題上來。

我們接著上面分析,數組變量 uart_obj 的長度是多少呢?看一下 uart_config 是什么,如下圖:

pYYBAGK-aP-ARAwPAABBDBB6dzc752.png

uart_configstm32_uart_config 類型的結構體數組,其數組長度是根據 RT-Thread 配置使用哪些串口決定的。

比如我們使用了 串口1 和 串口3,那么uart_config 就等于:

static struct stm32_uart_config uart_config[2] =
{
    UART1_CONFIG,
    UART3_CONFIG,
};

UARTX_CONFIG

這里講到 UART1_CONFIG 就順帶提一下,UART1_CONFIGstm32_uart_config 類型的結構體,在RT-Thread 中是通過 宏定義來定義的:

poYBAGK-aP-AWPnSAADaoWOSzhs336.png

引出這么多,我們回到最初的rt_hw_usart_init函數第一句的代碼:

rt_size_t obj_num = sizeof(uart_obj) / sizeof(struct stm32_uart);

以上面為例,只使用了 UART1 和 UART3 ,uart_obj數組長度為2,也就表明有2個stm32_uart 結構體的成員需要進行初始化,也就是需要初始化 2個 UART 設備。 上面句子中 obj_num = 2;

接下來的語句:

struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;

串口配置結構體,初始化等于默認配置,這里具體也好理解,看下圖便知:

pYYBAGK-aQCAXfcyAAB4hf1K84U099.png

再往下看,獲取串口 DMA 配置:

stm32_uart_get_dma_config();

函數如下,如果沒有使用DMA ,那么只會有一條語句,就是 uart_dma_flag = 0; 表示沒有使用DMA。

在上面我們介紹stm32_uart 結構體的時候,uart_dma_flag 就是這個結構體的一個成員變量。

poYBAGK-aQCAMbkiAAA5d8oDF6M762.png

stm32_uart 結構體初始化

再接下來就是uart_obj[i]的初始化了,有幾個串口就初始化幾遍:

 for (int i = 0; i < obj_num; i++)
    {
        uart_obj[i].config = &uart_config[i];
        uart_obj[i].serial.ops    = &stm32_uart_ops;
        uart_obj[i].serial.config = config;
        /* register UART device */
        result = rt_hw_serial_register(&uart_obj[i].serial, uart_obj[i].config->name,
                                       RT_DEVICE_FLAG_RDWR
                                       | RT_DEVICE_FLAG_INT_RX
                                       | RT_DEVICE_FLAG_INT_TX
                                       | uart_obj[i].uart_dma_flag
                                       , NULL);
        RT_ASSERT(result == RT_EOK);
    }

首先里面第一句:

uart_obj[i].config = &uart_config[i];

其中 uart_config[i] 就是我們上文說的 UARTX_CONFIG,通過宏定義定義的 stm32_uart_config 類型的結構體。

第二句:

 uart_obj[i].serial.ops    = &stm32_uart_ops;

上文分析過stm32_uart 結構體,但是并沒有深入分析其中的成員serial,它是 RT-Thread 的 UART 設備對象控制塊,其中ops為結構體類型的指針:

pYYBAGK-aQKAcyjmAACvJPnkQEY073.png

stm32_uart_ops為 RT-Thread 設備驅動層定義好的,其作用是指定 UART 設備的操作函數:

poYBAGK-aQKAZPytAAB796sf4Eg968.png

第三句:

uart_obj[i].serial.config = config;

上文講過的,默認都是RT_SERIAL_CONFIG_DEFAULT,如果我們需要修改,可以通過rt_device_control修改。

第四句:

result = rt_hw_serial_register(&uart_obj[i].serial, uart_obj[i].config->name,
                                       RT_DEVICE_FLAG_RDWR
                                       | RT_DEVICE_FLAG_INT_RX
                                       | RT_DEVICE_FLAG_INT_TX
                                       | uart_obj[i].uart_dma_flag
                                       , NULL);

這個函數就是我們講過的 I/O 設備模型中的設備注冊函數,如圖:

pYYBAGK-aQSATbznAADw5qJAYZE500.png

在上面初始化中:
uart_obj[i].serial 為 rt_serial_device 類型,就是 UART 設備的控制塊,它付給注冊函數第一個參數;
uart_obj[i].config->name 中的name名字,就是設備注冊后 使用rt_device_find() 尋找的名字。

其中rt_hw_serial_register函數屬于(設備驅動框架層的函數),他會調用通用的 rt_device_register(I/O設備管理層的函數)對 UART 設備進行注冊。

2.3 UART 設備初始化結果圖

經過上面的一系列分析,最終一個 UART設備初始化以后的結果如下圖所示:

poYBAGK-aQSAaj9iAAGJbquQ-Ys326.png

?? UART 的初始化,最主要的是要了解 stm32_uart 結構體(以STM32驅動為例),通過對結構體的認識,初始化步驟的分析,讓我們認識到了RT-Thread 對于 UART 設備驅動層的設計,也讓我們接下來對認識 不同層之間如何聯系打下了一定的基礎。

三、UART 設備驅動框架層

我們回頭來看本文開頭說的 UART 那些操作函數,再結合上文所提到的初始,再結合上一篇文章《RT-Thread記錄(十、全面認識 RT-Thread I/O 設備模型)》的基礎,我們可以確定,上層應用所用到的UART 操作函數就是在使用rt_hw_serial_register 時候關聯到驅動框架層的:

pYYBAGK-aQSAPkSVAACp37-m6_w697.png

而且再復習一下, 設備驅動框架層是 RT-Thread 系統的東西,官方已經寫好的,UART 設備驅動框架層的代碼為 serial.c,其位置如下圖:

poYBAGK-aQWATtfIAABDIGPzXOc288.png

在其對應的 serial.h 頭文件中包含了許多 UART 設備通用的宏定義,大家可以自行查看。

設備驅動框架層如何與設備驅動層關聯

☆在這里我們主要需要關注的就是,設備驅動框架層是如何 和 設備驅動層關聯起來的。☆

首先我們先看一下其中的幾個串口操作函數:

poYBAGK-Z6CAI8BZAABSl4W1__o037.png

我們隨意查看其中一個函數查看,如下圖:

pYYBAGK-aQaADSrRAAB5PM0POoA051.png

可以看到上圖有一句關鍵的代碼:

if (serial->ops->configure)
        result = serial->ops->configure(serial, &serial->config);

上面我們在將初始化的時候有過代碼:

/*
static const struct rt_uart_ops stm32_uart_ops =
{
    .configure = stm32_configure,
    .control = stm32_control,
    .putc = stm32_putc,
    .getc = stm32_getc,
    .dma_transmit = stm32_dma_transmit
};
*/
uart_obj[i].serial.ops    = &stm32_uart_ops;

所以上面的表格可進一步的改為如下對應表格:

poYBAGK-Z8yAfndsAABtzlXAgXE528.png

通過上面的分析,基本上有點撥云見日的感覺!

?? UART 設備驅動框架層是 RT-Thread 系統通用的,他上連接 I/O 設備管理層,下連接 設備驅動層。 通過分析,我們已經知道他們之間如何關聯。

四、UART 設備驅動層

其實在上面的文章分析的時候已經說清楚了 UART 設備驅動是如何與 設備驅動層關聯起來的。

在 RT-Thread 中,我們的 UART 設備驅動文件為:drv_usart.c ,其位置位于 drivers 文件夾下面:

poYBAGK-aQaAMxmqAABbnP0HkwI644.png

這一層就是與我們使用的硬件設備直接關聯的一層,我們在上面介紹的 UART 設備初始化函數也在這個驅動文件中。

再次復習一下,設備驅動層是與使用的硬件直接關聯的,因為使用的是STM32 ,其很多地方都調用了 ST官方 HAL 庫的定義,是在 HAL 庫的基礎之上實現的驅動代碼。

我們只選幾個部分做示例說明,在驅動中下面幾個函數肯定是有的:

pYYBAGK-aQeACu5QAAA1Kz0wHXw457.png

配置函數

我們看一下驅動層的配置函數stm32_configure,不難發現這個函數其實和裸機中的差不多,其中還調用了 HAL 庫中的 HAL_UART_Init函數(函數還是比較簡單的,我們這里說明一下舉個例子即可):

static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_configure *cfg)
{
    struct stm32_uart *uart;
    RT_ASSERT(serial != RT_NULL);
    RT_ASSERT(cfg != RT_NULL);

    uart = rt_container_of(serial, struct stm32_uart, serial);

    /* uart clock enable */
    stm32_uart_clk_enable(uart->config);
    /* uart gpio clock enable and gpio pin init */
    stm32_gpio_configure(uart->config);

    uart->handle.Instance          = uart->config->Instance;
    uart->handle.Init.BaudRate     = cfg->baud_rate;
    uart->handle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
    uart->handle.Init.Mode         = UART_MODE_TX_RX;
    uart->handle.Init.OverSampling = UART_OVERSAMPLING_16;
    switch (cfg->data_bits)
    {
    case DATA_BITS_8:
        uart->handle.Init.WordLength = UART_WORDLENGTH_8B;
        break;
    case DATA_BITS_9:
        uart->handle.Init.WordLength = UART_WORDLENGTH_9B;
        break;
    default:
        uart->handle.Init.WordLength = UART_WORDLENGTH_8B;
        break;
    }
    switch (cfg->stop_bits)
    {
    case STOP_BITS_1:
        uart->handle.Init.StopBits   = UART_STOPBITS_1;
        break;
    case STOP_BITS_2:
        uart->handle.Init.StopBits   = UART_STOPBITS_2;
        break;
    default:
        uart->handle.Init.StopBits   = UART_STOPBITS_1;
        break;
    }
    switch (cfg->parity)
    {
    case PARITY_NONE:
        uart->handle.Init.Parity     = UART_PARITY_NONE;
        break;
    case PARITY_ODD:
        uart->handle.Init.Parity     = UART_PARITY_ODD;
        break;
    case PARITY_EVEN:
        uart->handle.Init.Parity     = UART_PARITY_EVEN;
        break;
    default:
        uart->handle.Init.Parity     = UART_PARITY_NONE;
        break;
    }

    if (HAL_UART_Init(&uart->handle) != HAL_OK)
    {
        return -RT_ERROR;
    }

    return RT_EOK;

發送函數:

poYBAGK-aQeABQ-gAACNaHq4BII898.png

關于中斷:

中斷入口函數還是我們熟悉的USART1_IRQHandler,其流程如下圖所示:

pYYBAGK-aQeAAvkLAAHtLNo0LHo955.png

UART 設備驅動層直接與 UART 硬件相關,其中函數都可以直接對硬件進行操作,其實上層應用可以直接調用 驅動層的函數使用,很多函數的實現基于官方的HAL 庫。

結語

本文通過對 UART設備初始化分析,對 UART 設備模型各層次的源碼關聯進行對應說明,通過現成的UART 設備模型,我們更加的理解了 RT-Thread 的I/O 設備模型,最后總結如圖所示:

pYYBAGK-aFKADW2-AAAjihC0LhI462.png

其實從應用來說,知道不知道底層的這些實現都沒有太大的關系,所以即便一下子看不懂也沒有關系,多看看源碼,靜下心來好看還是不難理解的。

?? 如果上一篇博文還沒能理解 RT-Thread I/O 設備模型,那么加上這篇文章,你一定行 (* ̄︶ ̄) ??

為了加深對 RT-Thread 的I/O 設備模型的說明,本文花了不少時間,在接下來的設備使用測試中,如果不是特除情況,應該就不會再進行這樣的分析了,我們就要正式進入 RT-Thread 設備的使用學習過程。

下一篇文章我們就要從 UART 設備使用開始學習 RT-Thread 設備的使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • uart
    +關注

    關注

    22

    文章

    1264

    瀏覽量

    103176
  • 源碼
    +關注

    關注

    8

    文章

    667

    瀏覽量

    30126
  • GPIO
    +關注

    關注

    16

    文章

    1267

    瀏覽量

    53505
  • RT-Thread
    +關注

    關注

    32

    文章

    1367

    瀏覽量

    41485
收藏 1人收藏
  • 晨起晨雨1
  • 麒麟其粦1
  • just_20101

評論

相關推薦
熱點推薦

RT-Thread 上如何實現 SLAAC?

大佬們,本菜鳥有一些網絡上的問題需要幫助: RT-Thread 上如何實現 SLAAC(無狀態地址自動分配),給連接到我的板子的設備分配 IPv6 地址; RT-Thread 如何發送以太網報文,要求從報文頭開始都是我自己組,
發表于 05-27 07:21

RT-Thread審核團招募: 深度參與開源RTOS社區治理與演進

全球開發者招募:RT-Thread審核團(ReviewTeam)正式開放申請!在開源的世界里,代碼審查(CodeReview)是保證軟件質量、促進技術交流的關鍵環節。RT-Thread作為全球領先
的頭像 發表于 05-21 18:02 ?379次閱讀
<b class='flag-5'>RT-Thread</b>審核團招募: 深度參與開源RTOS社區治理與演進

RT-Thread Nano源碼bsp工程無法正常使用msh,輸入msh命令無響應怎么解決?

最近想使用RT-Thread-Nano進行開發,在官網下載了RT-Thread Nano的源碼,發現源碼內有一些提供好的工程,便找了一個支持msh的工程進行調試,但是發現工程基礎配置存
發表于 04-14 07:51

如何將RT-Thread移植到NXP MCUXPressoIDE上

RT-Thread默認支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
的頭像 發表于 02-13 10:37 ?1709次閱讀
如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上

從開源中來到開源中去-RT-Thread北京社區篇

RT-Thread今年全域推行不同區域社區網,通過建立區域社區網,構建更加緊密聯系的開源社區,實現更廣泛的開源資源共享,讓更多的RT-Thread開發者受益。今年8月份RT-Thread正式啟動北京
的頭像 發表于 11-29 01:05 ?388次閱讀
從開源中來到開源中去-<b class='flag-5'>RT-Thread</b>北京社區篇

RT-Thread上CAN實踐

開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅動移植,并正常啟動
的頭像 發表于 11-13 01:03 ?1860次閱讀
<b class='flag-5'>RT-Thread</b>上CAN實踐

【S32K146 RT-thread】之 SPI驅動適配

概述RT-Thread對SPI總線的驅動,抽象出了spibus的設備驅動,我們基于S32K146的硬件學習spibus設備驅動。
的頭像 發表于 11-01 08:11 ?1135次閱讀
【S32K146 <b class='flag-5'>RT-thread</b>】之 SPI驅動適配

開源共生 商業共贏 | RT-Thread 2024開發者大會報名啟動!

親愛的RT-Thread開發者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發者大會)正式啟動報名!2024RT-Threa
的頭像 發表于 10-29 08:06 ?841次閱讀
開源共生 商業共贏 | <b class='flag-5'>RT-Thread</b> 2024開發者大會報名啟動!

【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

親愛的RT-Thread社區成員們:2024年RT-Thread全球開發者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳
的頭像 發表于 09-01 08:02 ?2932次閱讀
【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

2024 RT-Thread全球巡回 線下培訓火熱來襲!

親愛的RT-Thread社區成員們:我們非常高興地宣布,2024年RT-Thread全球開發者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳機會。
的頭像 發表于 08-07 08:35 ?2335次閱讀
2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

【好書推薦】RT-Thread設備驅動開發指南

強烈,他們迫切地希望有一本可以指導他們在RT-Thread上開發驅動的指南。為了解決開發者的燃眉之急,《RT-Thread設備驅動開發指南》來了!希望幫助RT-Thre
的頭像 發表于 08-01 08:35 ?1139次閱讀
【好書推薦】<b class='flag-5'>RT-Thread</b><b class='flag-5'>設備</b>驅動開發指南

RT-Thread內部機制大揭秘,帶你深入操作系統內核

一、RT-Thread概述RT-Thread是一款具有顯著優勢的開源嵌入式實時操作系統。它不僅具備輕量級、實時性強的特點,還擁有廣泛的開源社區支持和豐富的應用場景。在輕量級方面,RT-Thread
的頭像 發表于 08-01 08:11 ?4818次閱讀
<b class='flag-5'>RT-Thread</b>內部機制大揭秘,帶你深入操作系統內核

RT-Thread 新里程碑達成——GitHub Star 破萬!

RT-Thread實時操作系統開源項目在GitHub上的star數量突破一萬!截止發文,RT-Thread作為實時操作系統在業界Star數量排名第一!倉庫地址:https://github.com
的頭像 發表于 07-04 08:35 ?687次閱讀
<b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!

基于 RT-Thread專業版的EtherCAT主站方案

(一)方案介紹本方案基于RT-Thread專業版,在RT-Thread端集成EtherCAT主站協議,通過EtherCAT對伺服電機或遠程IO進行實時控制,具備傳輸速度快,實時性高,擴展設備靈活等
的頭像 發表于 06-19 08:35 ?1640次閱讀
基于 <b class='flag-5'>RT-Thread</b>專業版的EtherCAT主站方案

6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
的頭像 發表于 05-28 08:35 ?627次閱讀
6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!
主站蜘蛛池模板: 日本人添下面的全过程 | 第一会所欧美无码原创 | 色爰情人网站 | 色欲无码国产喷水AV精品 | 99久久无码热高清精品 | 大肥女ass樱桃 | 国产精品久久免费视频 | 特级淫片大乳女子高清视频 | 影888午夜理论不卡 樱桃熟了A级毛片 | 理论片午午伦夜理片久久 | 男同志china免费视频 | 国产AV无码熟妇人妻麻豆 | 亚洲三级视频在线 | 国产网红主播精品福利大秀专区 | 日本欧美高清一区二区视频 | 看免费人成va视频全 | 啊轻点啊再深点视频免费 | 久久综合久综合久久鬼色 | 德国xxxx | 人人舔人人爱 | 三级黄色在线视频 | 么公在浴室了我的奶 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片潮喷动漫 | 亚洲人视频在线 | 亚洲 欧美 中文字幕 在线 | 99er4久久视频精品首页 | 最近2019年日本中文免费字幕 | 医生含着我的奶边摸边做 | 忘忧草在线影院WWW日本动漫 | 国产精品久久久亚洲偷窥女厕 | 亚洲AV國產国产久青草 | 国产熟妇无码一区二 | 久久成人免费观看全部免费 | 久久999视频 | 色欲AV亚洲永久无码精品麻豆 | np高h肉辣一女多男 no视频在线观看 | 视频三区 国产盗摄 | 风车动漫(p)_在线观看官网 | 国产综合自拍 偷拍在线 | 四川少妇大战4黑人 | 精品区2区3区4区产品乱码9 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品