女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

ART Pi Smart基于RT-Thread Smart系統(tǒng)的LVGL移植

冬至子 ? 來源:caxfan ? 作者:caxfan ? 2023-11-29 14:29 ? 次閱讀

ART-Pi Smart開發(fā)板為RT-Thread聯(lián)合百問科技出品,使用的是 NXP 公司的 i.MX6ULL 處理器,具備單核 ARM Cortex-A7,最高運行頻率可以達到 800MHz。擁有 1 路 LCD 顯示、1 路數(shù)字攝像頭、8 路 UART、2 路 USB OTG、2 路 CAN、2 路以太網(wǎng)等資源,便于客戶靈活定制。

概述

我申請測試是想實現(xiàn)3D打印機的高級功能的,由于測試時間有限(本來規(guī)定測試時間為一個月,但是板子到手只有不到半個月)。要在這么短的時間內(nèi)移植全部程序是遠遠不夠的,特別是RT-Thread Smart系統(tǒng)還需要時間學習,所以決定移植基于LVGL的圖形UI。查看了RT-Thread官方網(wǎng)站,還沒有基于LVGL的移植報告,這樣就更有意義。

RT-Thread Smart簡介

RT-Thread Smart(簡稱 rt-smart)是基于 RT-Thread 操作系統(tǒng)衍生的新分支,面向帶 MMU,中高端應(yīng)用的芯片,例如 ARM Cortex-A 系列芯片,MIPS 芯片,帶 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系統(tǒng)的基礎(chǔ)上啟用獨立、完整的進程方式,同時以混合微內(nèi)核模式執(zhí)行。rt-smart 是一款高性能混合微內(nèi)核操作系統(tǒng),主要包含內(nèi)核模塊和用戶態(tài)運行時環(huán)境。內(nèi)核模塊包括虛擬地址空間管理、進程管理、線程管理、進程間通信、虛擬文件系統(tǒng)框架、網(wǎng)絡(luò)接口層框架、設(shè)備驅(qū)動框架、msh 控制臺、日志系統(tǒng)、異常中斷管理和系統(tǒng)調(diào)用接口,設(shè)備驅(qū)動框架包含串口驅(qū)動框架和看門狗驅(qū)動框架。用戶態(tài)運行時環(huán)境包括用戶態(tài) C 庫。

1.jpg

LVGL簡介

LVGL(輕量級和通用圖形庫)是一個免費和開源的圖形庫,它提供了創(chuàng)建嵌入式GUI所需的一切,具有易于使用的圖形元素,美麗的視覺效果和低內(nèi)存占用。LVGL的項目作者是來自匈牙利首都布達佩斯的 Gábor Kiss-Vámosi 。Kiss 在2016年將其并發(fā)布在 GitHub 上。當時叫 LittlevGL而不是LVGL,后來作者統(tǒng)一修改為 LVGL。 像一般的開源項目的那樣,它是作為一個人的項目開始的。 從那時起,陸續(xù)有近 100 名貢獻者參與了項目開發(fā),使得 LVGL 逐漸成為最受歡迎的嵌入式圖形庫之一。

1.jpg

開發(fā)環(huán)境

硬件

硬件環(huán)境搭建

1.jpg

電源輸入:5V,500 mA,通過開發(fā)板 USB-TypeC(下面)供電。如下圖所示,通過測試電腦的 USB 直接對開發(fā)板供電

串口連接:下方的 USB-TypeC 接口,既是用作電源供電,同時也是 USB 轉(zhuǎn) UART 接口,主要用于打印系統(tǒng)的控制臺輸入和輸出

| 波特率 |數(shù)據(jù)位|停止位|校驗位|流控|
|—————-|———|———|———|——|
|115200 | 8 |1 |無 |無|

網(wǎng)絡(luò)接口:通過路由器和網(wǎng)線,將開發(fā)板和測試電腦連接在同一個局域網(wǎng)內(nèi)

Micro SD卡:32GB 或 32GB 以下。可使用讀卡器將編譯生成的用戶 APP 固件文件(.elf)復制到 SD 卡

顯示接口:開發(fā)板未上電之前,先將 4.3 寸 LCD 顯示器的 40 Pin FPC 排線連接到 ART-Pi Smart 開發(fā)板背面的 LCD 硬件插槽

ART-Pi Smart 硬件連接圖

1.jpg

2.jpg

軟件
SDK下載
ART-Pi Smart SDK 軟件包
ART-Pi-Smart SDK 倉庫是 RT-Thread 團隊對 ART-Pi Smart 開發(fā)板所作的支持包,用于學習和評估 RT-Thread Smart 微內(nèi)核操作系統(tǒng),讓用戶可以更簡單方便地開發(fā)自己的應(yīng)用程序。
ART-Pi smart 開發(fā)板的 SDK 倉庫,主要包括 RT-Thread Smart 的源碼,BSP 驅(qū)動,應(yīng)用程序 demo 等。
SDK 下載方法:通過 Git 下載 ART-Pi Smart SDK 包:

git clone https://gitee.com/rtthread/ART-Pi-smart.git
下載工具鏈
rt-smart 采用的工具鏈為:arm-linux-musleabi 工具鏈,ART-Pi smart sdk本身并不攜帶工具鏈,所以在下載了sdk后需要自行安裝工具鏈,不過安裝工具鏈非常簡單,只需要在sdk的tools目錄下執(zhí)行下python腳本即可:

python get_toolchain.py
將下載下來的工具鏈,解壓到指定的路徑 /rt-smart/tools/gnu_gcc/ 下面

軟件環(huán)境

安裝Visual Studio Code并安裝插件
安裝Visual Studio Code后要安裝RT-Thread Smart插件,目前VS Code RT-Thread Smart插件已經(jīng)上傳到VS Code市場,所以安裝非常方便,可以直接在VS Code 的擴展市場中搜索 RT-Thread Smart,點擊安裝即可:(推薦安裝Path interestise)

1.jpg

可選安裝Visual Studio
根據(jù)LVGL for VS項目,設(shè)計LVGL的界面,并編譯成基于Windows平臺的仿真軟件,確保UI部分沒有bug。

1.jpg

效果

1.jpg

2.jpg

創(chuàng)建 LVGL Demo

1.jpg

設(shè)置SDK工具鏈路徑

1.jpg

編譯文件路徑

1.jpg

編譯

1.jpg

下載

1.jpg

關(guān)鍵代碼

用戶態(tài)應(yīng)用是一份 elf(Executable Linkable Format)文件,由 GNU GCC 編譯鏈接而產(chǎn)生。在 RT-Thread Smart 中,它被固定加載到虛擬地址 0x100000 處執(zhí)行。當需要系統(tǒng)服務(wù)時通過系統(tǒng)調(diào)用的方式通過 MMU陷入到內(nèi)核中。用戶態(tài)應(yīng)用環(huán)境中,外設(shè)的使用需要先調(diào)用rt_device_find()函數(shù)查找設(shè)備,然后通過rt_device_open()打開,使用rt_device_control()函數(shù)通過命令字實現(xiàn)相應(yīng)的功能。至于設(shè)備的初始化和功能的實現(xiàn)交到內(nèi)核完成,這樣就極大的降低用戶態(tài)應(yīng)用開發(fā)難度,這種思想應(yīng)該大贊一個。
LVGL初始化

#if LV_USE_LOG
static void lv_rt_log(const char buf)
{
LOG_I(buf);
}
#endif /
LV_USE_LOG */
static void lvgl_thread_entry(void parameter)
{
rt_kprintf("Startup lvgl thread.n");
#if LV_USE_LOG
lv_log_register_print_cb(lv_rt_log);
#endif /
LV_USE_LOG /
lv_init();
lv_port_disp_init();
lv_port_indev_init();
lv_user_gui_init();
/
handle the tasks of LVGL */
while(1)
{
lv_task_handler();
rt_thread_mdelay(10);
}
}
int lvgl_thread_init(void)
{
rt_thread_t rtt;
rtt = rt_thread_create("lvgl", lvgl_thread_entry, NULL, 4096, PKG_LVGL_THREAD_PRIO, 100);
if(rtt == RT_NULL)
{
LOG_D("Failed to create LVGL thread");
return -1;
}
rt_thread_startup(rtt);
return 0;
}
LCD設(shè)備接口與lvgl對接

void lv_port_disp_init(void)
{
rt_err_t result;
lcd_device = rt_device_find("lcd");
if (lcd_device == 0)
{
LOG_D("lcd_device error!");
return;
}
result = rt_device_open(lcd_device, 0);
if (result != RT_EOK)
{
LOG_D("device_open error!");
return;
}
result = rt_device_control(lcd_device, FBIOGET_FSCREENINFO, &f_info);
if (result != RT_EOK)
{
LOG_D("device_control error!");
/* get device information failed */
return;
}
rt_kprintf("Display Device: %s - 0x%08x, size %dn", f_info.id, (unsigned int)f_info.smem_start, f_info.smem_len);
rt_device_control(lcd_device, FBIOGET_VSCREENINFO, &v_info);
rt_kprintf("tScreen: %dx%d, %dbppn", v_info.xres, v_info.yres, v_info.bits_per_pixel);
/ Initialize disp_buf with the buffer(s). /
lv_disp_draw_buf_init(&disp_buf, lv_disp_buf1, RT_NULL, DISP_BUF_SIZE);
lv_disp_drv_init(&disp_drv); / Basic initialization /
/ Set the resolution of the display /
disp_drv.hor_res = v_info.xres;
disp_drv.ver_res = v_info.yres;
/ Set a display buffer /
disp_drv.draw_buf = &disp_buf;
/ Used to copy the buffer's content to the display /
disp_drv.flush_cb = lcd_fb_flush;
/ Finally register the driver /
lv_disp_t * disp = lv_disp_drv_register(&disp_drv);
g_disp_drv = disp_drv;
lv_disp_set_default(disp);
lv_theme_t * th = lv_theme_default_init(disp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, LV_FONT_DEFAULT);
lv_disp_set_theme(disp, th);
lv_group_t * gr = lv_group_create();
lv_group_set_default(gr);
}
觸摸采用的芯片是GT911,通過I2C接口獲得

void lv_port_indev_init(void)
{
touch_dev = rt_device_find(TOUCH_DEV_NAME);
if (touch_dev == RT_NULL)
{
rt_kprintf("Can't find device:%sn", TOUCH_DEV_NAME);
return;
}
if (rt_device_open(touch_dev, RT_DEVICE_FLAG_INT_RX) != RT_EOK)
{
rt_kprintf("open device failed!n");
return;
}
void id;
rt_uint16_t x = g_disp_drv.hor_res;
rt_uint16_t y = g_disp_drv.ver_res;
id = rt_malloc(sizeof(rt_uint8_t) * 8);
rt_device_control(touch_dev, RT_TOUCH_CTRL_GET_ID, id);
rt_uint8_t * read_id = (rt_uint8_t )id;
rt_kprintf("Touch device: id = GT%d%d%d n", read_id[0] - '0', read_id[1] - '0', read_id[2] - '0');
rt_device_control(touch_dev, RT_TOUCH_CTRL_SET_X_RANGE, &x); /
if possible you can set your x y coordinate
/
rt_device_control(touch_dev, RT_TOUCH_CTRL_SET_Y_RANGE, &y);
rt_device_control(touch_dev, RT_TOUCH_CTRL_GET_INFO, id);
rt_kprintf("trange_x = %4d, range_y = %4d, point_num = %4dn",
( (struct rt_touch_info )id).range_x, ( (struct rt_touch_info )id).range_y, ( (struct rt_touch_info )id).point_num);
signal(SIGINT, Stop);
static lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv); / Basic initialization /
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = input_read;
/ Register the driver in LVGL and save the created input device object /
g_touch_dev = lv_indev_drv_register(&indev_drv);
}

運行

按復位鍵啟動到msh環(huán)境

1.jpg

運行測試程序

1.jpg

2.jpg

總結(jié)

通過測試,我對RT-Thread smart的印象深刻。以前也開發(fā)過RT-Thread的項目,但對rt-smart這種將內(nèi)核與用戶態(tài)分隔開,以前只在大型桌面操作系統(tǒng)里見到的特征,能在嵌入式系統(tǒng)里運用感到震撼。這樣使開發(fā)板的設(shè)計只需要提供內(nèi)核和驅(qū)動代碼,應(yīng)用開發(fā)只需要掛載使用,極大地降低應(yīng)用開發(fā)難度,提高代碼重用度。而且提高應(yīng)用代碼隔離時系統(tǒng)更加健壯。
在測試過程中,遇到了問題,RT-Thread掌門人——熊譜翔先生很快親自回答。在這里表示感謝。

由于時間太短,其它外設(shè)還沒有來得及測試,頗為遺憾。

同時,希望RT-Thread能夠提供統(tǒng)一的開發(fā)環(huán)境,特別是基于Windows平臺,畢竟用戶多一些。能否像LVGL提供一個模擬器(基于Visual Studio),畢竟Visual Studio調(diào)試功能很強,且有VisualGDB加持。這樣就可在模擬器上消滅與平臺無關(guān)的bug,減少仿真調(diào)試,下載時間。

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

    關(guān)注

    68

    文章

    19813

    瀏覽量

    233619
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5586

    瀏覽量

    174866
  • LCD顯示
    +關(guān)注

    關(guān)注

    0

    文章

    132

    瀏覽量

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

    關(guān)注

    32

    文章

    1371

    瀏覽量

    41534
  • ART-Pi
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    1464
收藏 人收藏

    評論

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

    RT-Thread NUC97x 移植 LVGL

    不涉及 rt-thread 驅(qū)動,但是它是 LVGLrt-thread 的接口。LVGLrt-thread 上運行的基石。
    發(fā)表于 07-08 09:37 ?1647次閱讀

    RT-Thread Smart 入門指南

    RT-Thread Smart 入門指南RT-Thread Smart(簡稱 rt-smart)是基于
    發(fā)表于 03-29 06:40

    基于ART-Pi Smart平臺的設(shè)計方案推薦

    RT-Thread Smart(簡稱 rt-smart)是基于 RT-Thread 操作系統(tǒng)衍生的新分支,面向帶 MMU,中高端應(yīng)用的芯片,
    發(fā)表于 03-24 16:56

    基于RT-Thread操作系統(tǒng)衍生rt-smart實時操作系統(tǒng)簡介

    1、rt-smart 實時操作系統(tǒng)簡介RT-Thread Smart(簡稱 rt-smart)嵌入式實時操作
    發(fā)表于 06-22 17:56

    ART Pi Smart基于RT-Thread Smart系統(tǒng)LVGL移植簡介

    1、基于RT-Thread Smart系統(tǒng)LVGL移植我申請測試申請的高級功能的,由于是有限的(本來要求測試一個月,但是板子只有不到一個月
    發(fā)表于 08-03 16:35

    RT-Thread Smart下怎樣去使用NimBLE軟件包呢

    本文主要介紹 NimBLE 軟件包的在 RT-Thread Smart 下的使用目前官方使用 ART-Pi-Smart 評估板運行 RT-Thread
    發(fā)表于 09-13 15:50

    RT-Thread Smart快速上手

    的RISC-V芯片等。本是程序板程序RT-Thread Smart 移植到C100S(ARM90S-2EJ-2EJ-1000)目錄,所有的bin0S指向S指向,可運行在基于F1C10S芯片的C10S芯片支派
    發(fā)表于 10-26 14:48

    RT-Thread Smart已正式上線,源代碼可下載,采用Apache License 2.0

    (以下簡稱為rt-smart) 是基于RT-Thread操作系統(tǒng)衍生的新分支混合微內(nèi)核操作系統(tǒng),主要面向帶 MMU(內(nèi)存管理單元Memory Management Unit)的中高端處
    的頭像 發(fā)表于 11-26 14:49 ?2983次閱讀

    RT-Thread Smart已正式上線

    rt-smart內(nèi)核即可包含基本功能,同時也可定制裁剪。rt-smart用戶態(tài)應(yīng)用環(huán)境采用musl libc提供POSIX接口調(diào)用及C運行環(huán)境,延續(xù) RT-Thread 原有的生態(tài),使用scons
    的頭像 發(fā)表于 11-29 10:31 ?3038次閱讀

    RT-Thread聯(lián)合百問科技出品ART-Pi Smart開發(fā)板

    ART-Pi Smart 開發(fā)板是RT-Thread聯(lián)合百問科技出品,用于學習和評估RT-Thread Smart微內(nèi)核操作
    的頭像 發(fā)表于 11-16 14:32 ?3253次閱讀

    RT-Thread Smart 上手指南

    RT-Thread Smart(簡稱rt-smart)是基于RT-Thread操作系統(tǒng)衍生的新分支,面向帶MMU,中高端應(yīng)用的芯片,例如AR
    發(fā)表于 01-25 20:09 ?13次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Smart</b> 上手指南

    ART-PI Smart開發(fā)板介紹與開發(fā)環(huán)境的建立

    art-pi smartrt-thread公司推出的一款基于NXP公司imx6ull處理器的開發(fā)板,主要用來測試評估RT公司去年新發(fā)布的混合微內(nèi)核操作
    的頭像 發(fā)表于 05-13 09:45 ?1957次閱讀

    RT-Thread全球技術(shù)大會:RT-Thread Smart更好的兼容Linux生態(tài)

    RT-Thread全球技術(shù)大會:RT-Thread Smart更好的兼容Linux生態(tài) ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:31 ?2045次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Smart</b>更好的兼容Linux生態(tài)

    基于xmake的RT-Thread Smart用戶態(tài)開發(fā)教程

    RT-Thread Smart(以下簡稱 Smart) 是基于 RT-Thread 操作系統(tǒng)上的混合操作
    的頭像 發(fā)表于 06-07 11:44 ?1492次閱讀
    基于xmake的<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Smart</b>用戶態(tài)開發(fā)教程

    基于xmake的RT-Thread Smart用戶態(tài)開發(fā)教程

    RT-Thread Smart(以下簡稱 Smart) 是基于 RT-Thread 操作系統(tǒng)上的混合操作
    的頭像 發(fā)表于 09-14 11:48 ?1372次閱讀
    基于xmake的<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Smart</b>用戶態(tài)開發(fā)教程