亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

i.MX RT1170:VGLite移植RT-Thread Nano過(guò)程講解(上)

恩智浦MCU加油站 ? 來(lái)源:恩智浦MCU加油站 ? 2023-11-09 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

RT-Thread 是國(guó)人自主研發(fā)的開(kāi)源實(shí)時(shí)操作系統(tǒng)(RTOS),RT-Thread Nano 是極簡(jiǎn)版的硬實(shí)時(shí)內(nèi)核,內(nèi)存占用小,移植簡(jiǎn)單。VGLite 是 NXP 提供的輕量級(jí) 2D 圖形 API,基于 FreeRTOS 實(shí)現(xiàn)。

文章分為上、下兩篇,將手把手教您移植。上篇對(duì) RT-Thread Nano 內(nèi)核與 Finsh 組件進(jìn)行移植,下篇?jiǎng)t教您改寫(xiě) SDK 中的 VGLite 代碼以將其適配到 RT-Thread Nano 中。

所有工作已上傳至Github,歡迎有興趣的讀者學(xué)習(xí)交流!

硬件準(zhǔn)備

本文采用 i.MX RT1170 EVKB 開(kāi)發(fā)板與 RK055HDMIPI4M 顯示屏,顯示屏與開(kāi)發(fā)板 J48 相連,使用 MIPI DSI 協(xié)議通信。連接 5V 輸入到開(kāi)發(fā)板 J43,跳線連接 J38 的 1-2,電源開(kāi)關(guān)為 SW5 ,Debug 時(shí)使用 Micro-USB 數(shù)據(jù)線連接 PC 與開(kāi)發(fā)板的 J86. 總體連接圖如下:

ab2491f4-7eae-11ee-939d-92fbcf53809c.pngab32f078-7eae-11ee-939d-92fbcf53809c.png

軟件準(zhǔn)備

下載RT-Thread Nano源碼并解壓。構(gòu)建并下載RT1170 SDK。

解壓 SDK 壓縮包,使用 IAR 打開(kāi) /boards/evkbmimxrt1170/vglite_examples/clock_freertos/cm7/iar/clock_freertos_cm7.eww,后續(xù)以此為例進(jìn)行移植。

需在工程 /board/display_support.h 中確保當(dāng)前屏幕與 DEMO_PANEL 宏定義的型號(hào)一致。

ab44eddc-7eae-11ee-939d-92fbcf53809c.png

編譯并運(yùn)行,正常運(yùn)行時(shí)屏幕顯示時(shí)鐘圖像,且串口持續(xù)輸出幀數(shù)信息。

ab4f9b6a-7eae-11ee-939d-92fbcf53809c.png

NOTE: 本文中使用的 SDK 版本為 v2.14.0,RT-Thread Nano 為 v3.1.3,IAR 為 9.40.1。

Free RTOS 移除

首先刪除原工程中的 freertos 組與/source/FreeRTOSConfig.h 文件。

ab59bc30-7eae-11ee-939d-92fbcf53809c.png右鍵工程名點(diǎn)擊 Options... 選項(xiàng),在下圖界面可刪除 FreeRTOS 頭文件路徑:ab6801be-7eae-11ee-939d-92fbcf53809c.png全局搜索代碼中以下 FreeRTOS 相關(guān)頭文件,注釋或刪除:

#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include"queue.h"
因原有的 VGLite 源文件仍會(huì)調(diào)用已移除的 FreeRTOS 函數(shù),會(huì)導(dǎo)致編譯報(bào)錯(cuò)??上扔益I以下文件后點(diǎn)擊 Options... 選項(xiàng),選擇 Exclude from build 排除編譯。

/board/display_support.c 與 .h 文件

/board/vglite_support.c 與 .h 文件

/source/vglite_window.c 與 .h 文件

/elementary/ 組

/vglite/ 組

/video/ 組

ab74c340-7eae-11ee-939d-92fbcf53809c.png

既然已移除了 FreeRTOS,那么文件名中的"freertos" 也可更換掉, 比如"clock_freertos.eww" 可改為"clock_rtthread.eww"。 此外,.ewd、.ewp、.eww 文件中有關(guān) "freertos" 的文本也可用記事本等搜索替換。

移植 RT-Thread Nano 內(nèi)核

1. 添加源文件

在 SDK 解壓包的 /rtos/ 中創(chuàng)建 rt-thread 文件夾,并將 RT-Thread Nano 解壓包中以下文件復(fù)制到 /rtos/rt-thread/ 文件夾內(nèi)。

/rt-thread/ 文件夾中的 include、libcpu、src 文件夾

/rt-thread/bsp/ 文件夾中的 board.c 與 rtconfig.h 文件

ab7fdece-7eae-11ee-939d-92fbcf53809c.png

打開(kāi) clock_rtthread.eww,新建 rtthread 組并添加以下文件:

/rtos/rt-thread/src/ 文件夾中所有文件

/rtos/rt-thread/libcpu/arm/cortex-m7/

文件夾中 cpuport.c 與 context_iar.S 文件(RT1170 芯片為 Cortex-M7 架構(gòu),若對(duì)其他開(kāi)發(fā)板移植,需選取芯片對(duì)應(yīng)架構(gòu)的文件)

/rtos/rt-thread/ 文件夾中的 board.c,也可添加 rtconfig.h 文件方便 RT-Thread 配置

ab8a15b0-7eae-11ee-939d-92fbcf53809c.png

2. 添加頭文件路徑

IAR 中右鍵工程名點(diǎn)擊 Options... 選項(xiàng),進(jìn)入下圖界面添加以下路徑:

rtconfig.h 頭文件所在位置的路徑

RT-Thread 的 include 文件夾下的頭文件路徑

ab97f662-7eae-11ee-939d-92fbcf53809c.png

若添加的路徑為絕對(duì)路徑而非以 "$PROJ_DIR$" 開(kāi)頭的相對(duì)路徑,可以先關(guān)閉 IAR,使用記事本打開(kāi) clock_rtthread.ewp 進(jìn)行搜索替換,再重新打開(kāi) IAR。

3. 配置 RT-Thread Nano

后續(xù)的代碼需對(duì)線程動(dòng)態(tài)分配,故在 rtconfig.h 文件中取消下行注釋以提供內(nèi)存堆支持:

#define RT_USING_HEAP
同時(shí),需在工程 /rtthread/board.c 中增大內(nèi)存堆,更改 RT_HEAP_SIZE 宏為 (1024 * 10):

#define RT_HEAP_SIZE (1024 * 10)

其余 RT-Thread 配置將在下篇講解,上篇主要聚焦內(nèi)核移植所用到的配置。

4.編寫(xiě)測(cè)試應(yīng)用程序

編寫(xiě)一個(gè)簡(jiǎn)單的 RT-Thread 代碼以測(cè)試移植的內(nèi)核。備份工程中 /source/colock_freertos.c的原有代碼后,更改為以下測(cè)試代碼:

#include "rtthread.h"
#include "fsl_debug_console.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"


static void test_thread(void *parameter) {
    while (1) {
        PRINTF("Hello RT-Thread
");
        rt_thread_mdelay(500);
    }
}
int main(void) {
    /* Init board hardware. */
    BOARD_ConfigMPU();
    BOARD_BootClockRUN();
    BOARD_InitLpuartPins();
    BOARD_InitDebugConsole();


    rt_thread_t test_thread_handle = rt_thread_create("test_thread", test_thread, RT_NULL, 512, 1, 1);
    if (test_thread_handle != RT_NULL)
        rt_thread_startup(test_thread_handle);
}

編譯并運(yùn)行,若開(kāi)發(fā)板每隔 500 毫秒通過(guò)串口發(fā)送 "HelloRT-Thread", 則說(shuō)明內(nèi)核移植成功,恭喜您已完成了近一半的路程!

五移植 Finsh 控制臺(tái)組件到 RT1170

Finsh 是 RT-Thread 的命令行組件(shell),提供一套可以在命令行調(diào)用的操作接口。此組件是可選項(xiàng),若不需要可跳過(guò)此章節(jié)。

Finsh 移植分為兩部分:添加 UART 控制臺(tái)實(shí)現(xiàn)打印輸出、添加 Finsh 組件實(shí)現(xiàn)命令輸入。

1. 添加 UART 控制臺(tái)實(shí)現(xiàn)打印輸出

UART 初始化

原工程中,UART 等初始化在 main()函數(shù)中完成。移植 RT-Thread Nano 后,可將初始化轉(zhuǎn)移到工程 /rtthread/board.c 中的 rt_hw_board_init()函數(shù)中,如下所示。

#include 
#include 
......
void rt_hw_board_init() {
    /* Init board hardware. */
    BOARD_ConfigMPU();
    BOARD_BootClockRUN();
    BOARD_InitLpuartPins();
    BOARD_InitDebugConsole();
    BOARD_InitMipiPanelPins();
    ......
}

rt_hw_console_output() 實(shí)現(xiàn)

RT-Thread 使用 rt_kprintf()調(diào)用 rt_hw_console_output()函數(shù)打印輸出,此函數(shù)位于工程 /rtthread/kservice.c 文件中,需要自己實(shí)現(xiàn)??梢灾苯影こ?utilities/fsl_debug_console.h 文件, 使用 PRINTF 宏輸出。不過(guò)打印已以 ' ' 結(jié)尾,故還需輸出 ' ',以完成回車(chē)與換行。實(shí)現(xiàn)后的函數(shù)如下:

#include 
......
RT_WEAK void rt_hw_console_output(const char *str) {
    PRINTF(str);
    PRINTF("
");
}

UART 輸出測(cè)試

更改 PRINTF 宏為 rt_kprintf()函數(shù),以此測(cè)試是否正常輸出。更改的代碼如下,原先的初始化操作已轉(zhuǎn)移到了工程/rtthread/board.c 的 rt_hw_board_init()函數(shù)中。

#include "rtthread.h"


static void test_thread(void *parameter) {
    while (1) {
        rt_kprintf("Hello RT-Thread");
        rt_thread_mdelay(500);
    }
}
int main(void) {
    rt_thread_t test_thread_handle = rt_thread_create("test_thread", test_thread, RT_NULL, 512, 1, 1);
    if (test_thread_handle != RT_NULL)
        rt_thread_startup(test_thread_handle);
}

編譯并運(yùn)行,若開(kāi)發(fā)板仍持續(xù)通過(guò)串口發(fā)送 "Hello RT-Thread",則可正常輸出。

2.添加Finsh組件實(shí)現(xiàn)命令輸入

源文件添加

aba2af1c-7eae-11ee-939d-92fbcf53809c.png

Finsh 源文件位于 RT-Thread Nano 解壓包的/rt-thread/components/finsh/ 內(nèi),將 finsh 文件夾復(fù)制到 SDK 解壓包的/rtos/rt-thread/ 中。

在工程 /rtthread 組中新建 finsh 組,添加復(fù)制的 finsh 文件夾中所有 .c 文件。

abad6498-7eae-11ee-939d-92fbcf53809c.png

IAR 中右鍵工程名點(diǎn)擊 Options... 選項(xiàng),添加 finsh 文件夾路徑。

abb85f42-7eae-11ee-939d-92fbcf53809c.png

使能 Finsh

在 rtconfig.h 中包含添加的 Finsh 頭文件:

#include "finsh_config.h"

rtconfig.h 與 finsh_config.h 中存在部分重復(fù)的宏,可注釋掉 finsh_config.h 中重復(fù)的宏以避免編譯時(shí)的警告。

rt_hw_console_getchar() 實(shí)現(xiàn)

也需手動(dòng)實(shí)現(xiàn)工程 /rtthread/finsh/finsh_port.c 中的函數(shù) rt_hw_console_getchar()用于命令輸入。

注釋原有的 rt_hw_console_getchar()函數(shù)中的 #error 開(kāi)頭語(yǔ)句以停止報(bào)錯(cuò)??捎迷こ?/utilities/fsl_debug_console.h 文件中的 GETCHAR 宏實(shí)現(xiàn)輸入,函數(shù)如下:

#include 
......
RT_WEAK char rt_hw_console_getchar(void) {
    int ch = -1;
    ch = GETCHAR();
    return ch;
}

Finsh 控制臺(tái)測(cè)試

編譯并運(yùn)行,使用 PUTTY 等工具打開(kāi)串口。按下 tab 鍵或輸入 help 命令并回車(chē),會(huì)輸出以下信息。否則說(shuō)明移植失敗,需再檢查上述步驟。

abc7a240-7eae-11ee-939d-92fbcf53809c.png

小結(jié)

本篇主要介紹了如何移植 RT-Thread Nano 內(nèi)核與 Finsh 控制臺(tái),為下篇講解移植 VGLite 到 RT-Thread Nano 提供了內(nèi)核基礎(chǔ)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    406

    瀏覽量

    29144
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    860

    瀏覽量

    122447
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    6063

    瀏覽量

    111538
  • 實(shí)時(shí)操作系統(tǒng)

    關(guān)注

    1

    文章

    206

    瀏覽量

    31734
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1518

    瀏覽量

    44031

原文標(biāo)題:泄密了! i.MX RT1170:VGLite移植RT-Thread Nano全過(guò)程圖解,這也太詳細(xì)了吧?。ㄉ希?/p>

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    i.MX RT1170VGLite移植RT-Thread Nano過(guò)程講解(下)

    上篇介紹了如何移植 RT-Thread Nano 內(nèi)核與 Finsh 控制臺(tái)到 RT1170。本篇繼續(xù)介紹如何將 NXP 官方的 VGLite
    的頭像 發(fā)表于 11-09 11:22 ?1661次閱讀

    RT-Thread Nano硬核移植指南:手把手實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    VGLite是NXP提供的輕量級(jí)2D圖形API,本文將手把手帶你實(shí)現(xiàn)VGLite圖形驅(qū)動(dòng)適配RT-Thread。文章分為、下兩篇,將手把手教您移植
    的頭像 發(fā)表于 07-17 14:40 ?2874次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>硬核<b class='flag-5'>移植</b>指南:手把手實(shí)現(xiàn)<b class='flag-5'>VGLite</b>圖形驅(qū)動(dòng)適配 | 技術(shù)集結(jié)

    i.MX RT1170自定義引導(dǎo)加載程序,如何在i.MX RT處理器完成?

    我將在我的自定義 i.MX RT1170開(kāi)發(fā)自定義引導(dǎo)加載程序。在我的例子中,閃存驅(qū)動(dòng)程序?qū)⑼ㄟ^(guò) USB 讀取以更新主要應(yīng)用程序。 我正在研究
    發(fā)表于 05-17 08:13

    野火電子基于RT-Threadi.MX RT1052 EVK Pro板卡特點(diǎn)介紹

    RT-Thread合作伙伴野火電子攜RT-Thread Inside板卡i.MX RT1052 EVK Pro參展NXP技術(shù)日,現(xiàn)場(chǎng)展示了多個(gè)基于R
    的頭像 發(fā)表于 07-16 09:44 ?9847次閱讀

    恩智浦i.MX RT1170開(kāi)創(chuàng)GHz MCU時(shí)代

    自2017年上市以來(lái),i.MX RT系列取得了優(yōu)秀的市場(chǎng)表現(xiàn)。i.MX RT1170跨界MCU是恩智浦i.MX
    的頭像 發(fā)表于 03-22 11:14 ?4126次閱讀

    恩智浦i.MX RT1170在將該系列帶上了更高的層面

    自2017年上市以來(lái),i.MX RT系列取得了優(yōu)秀的市場(chǎng)表現(xiàn)。i.MX RT1170跨界MCU是恩智浦i.MX
    的頭像 發(fā)表于 05-18 11:15 ?4532次閱讀

    【國(guó)產(chǎn)MCU系列】在 HK32F030 移植 RT-Thread Nano

    這是一個(gè)航順 HK32F030 的 RT-Thread Nano 移植示例,記錄了在 Keil 裸機(jī)工程的基礎(chǔ)上進(jìn)行 RT-Thread Nano
    發(fā)表于 01-25 17:42 ?4次下載
    【國(guó)產(chǎn)MCU系列】在 HK32F030 <b class='flag-5'>上</b><b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個(gè) stm32f103 的基礎(chǔ)工程作為示例進(jìn)行講解RT-Thre
    發(fā)表于 01-26 17:04 ?17次下載
    基于 Keil MDK <b class='flag-5'>移植</b> <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    如何創(chuàng)建RT-Thread Nano工程

    簡(jiǎn)單(比f(wàn)reeRTOS移植還簡(jiǎn)單)等,本文將講解如何將RT-Thread Nano移植到GD32L233C。
    的頭像 發(fā)表于 03-19 12:13 ?4940次閱讀

    RT-Thread文檔_野火 I.MX RT1052上手指南

    RT-Thread文檔_野火 I.MX RT1052 上手指南
    發(fā)表于 02-22 18:25 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_野火 <b class='flag-5'>I.MX</b> <b class='flag-5'>RT</b>1052上手指南

    RT-Thread文檔_正點(diǎn)原子 I.MX RT1052號(hào)令者上手指南

    RT-Thread文檔_正點(diǎn)原子 I.MX RT1052 號(hào)令者上手指南
    發(fā)表于 02-22 18:26 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_正點(diǎn)原子 <b class='flag-5'>I.MX</b> <b class='flag-5'>RT</b>1052號(hào)令者上手指南

    I.MX RT1170配套PMIC PF5020使用方法

    I.MX RT1170將先進(jìn)的電源管理模塊與DC-DC和LDO集成在一起,可降低外部電源的復(fù)雜性并簡(jiǎn)化電源時(shí)序。
    的頭像 發(fā)表于 04-01 15:54 ?3183次閱讀

    i.MX RT1170評(píng)估套件快速入門(mén):這份保姆級(jí)教程,請(qǐng)收藏!

    -EVK 是與i.MX RT1170相配套的評(píng)估套件,它在6層PCB提供了一個(gè)高度集成的高性能解決方案,豐富的板載資源包括了關(guān)鍵組
    的頭像 發(fā)表于 05-12 11:55 ?2916次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>評(píng)估套件快速入門(mén):這份保姆級(jí)教程,請(qǐng)收藏!

    基于NXP微控制器i.MX RT1170的多人體實(shí)時(shí)檢測(cè)算法和系統(tǒng)

    基于NXP微控制器i.MX RT1170的多人體實(shí)時(shí)檢測(cè)算法和系統(tǒng)
    的頭像 發(fā)表于 10-26 16:27 ?1637次閱讀
    基于NXP微控制器<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b>的多人體實(shí)時(shí)檢測(cè)算法和系統(tǒng)

    恩智浦i.MX RT1170 uSDHC eMMC啟動(dòng)時(shí)間

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT1170 uSDHC eMMC啟動(dòng)時(shí)間。
    的頭像 發(fā)表于 08-08 15:32 ?1506次閱讀
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1170</b> uSDHC eMMC啟動(dòng)時(shí)間