91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

淺析Zephyr應(yīng)用的代碼結(jié)構(gòu)中的自定義驅(qū)動(dòng)

智芯原動(dòng)ICETech ? 來源:HalfCoder ? 作者:lgl88911 ? 2021-08-18 09:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇是《《Zephyr應(yīng)用的代碼結(jié)構(gòu)》》系列的終篇和下面兩篇文章一起可以構(gòu)建出一個(gè)有app獨(dú)立管理的zephyr項(xiàng)目

Zephyr應(yīng)用的代碼結(jié)構(gòu)--West提貨單: zephyr和zephyr外部項(xiàng)目納入到應(yīng)用代碼目錄管理

Zephyr應(yīng)用的代碼結(jié)構(gòu)--自定義開發(fā)板: 將自定義board納入到應(yīng)用代碼目錄管理

除了上面兩個(gè)場(chǎng)景外,我們的硬件可能也有新的驅(qū)動(dòng)需求,而該驅(qū)動(dòng)不被Zephyr支持,如果不想將驅(qū)動(dòng)放入Zephyr中,就需要將驅(qū)動(dòng)納入到應(yīng)用代碼目錄。

Zephyr驅(qū)動(dòng)的添加可以分為3個(gè)級(jí)別:

有驅(qū)動(dòng)API抽象,有設(shè)備樹綁定:只用添加驅(qū)動(dòng)代碼

有驅(qū)動(dòng)API抽象,無設(shè)備樹綁定:添加設(shè)備樹綁定文件和驅(qū)動(dòng)代碼

無驅(qū)動(dòng)API抽象,無設(shè)備樹綁定:添加抽象API頭文件,添加設(shè)備樹綁定文件,添加驅(qū)動(dòng)代碼

驅(qū)動(dòng)代碼目錄

驅(qū)動(dòng)代碼目錄添加

在app/目錄下添加drivers目錄,如下

app

├── drivers

│ └── zephyr

│ ├── CMakeLists.txt

│ ├── Kconfig

│ └── sensor

│ ├── CMakeLists.txt

│ ├── Kconfig

│ └── rotary_encoder

├── CMakeLists.txt

├── Kconfig

├── rotary_encoder.c

└── rotary_encoder.h

在drivers/zephyr下的將要添加的驅(qū)動(dòng)類型分類,例如我需要添加傳感器類型的驅(qū)動(dòng),就增加一個(gè)sensor文件夾

zephyr/CMakeLists.txt中指定該文件夾, 如果有其它驅(qū)動(dòng)類型的文件夾也加入到該文件中

1

add_subdirectory(sensor)

zephyr/Kconfig包含各個(gè)驅(qū)動(dòng)類型文件夾的Kconfig

1

rsource “sensor/Kconfig”

zephyr/sensor/CMakeLists.txt中指定要使用的驅(qū)動(dòng)文件夾,例如這里要指定選擇編碼器

1

add_subdirectory_ifdef(CONFIG_ROTARY_ENCODER rotary_encoder)

zephyr/sensor/Kconfig包含該類型下各個(gè)驅(qū)動(dòng)的Kconfig

1

rsource “rotary_encoder/Kconfig”

zephyr/sensor/rotary_encoder/CMakeLists.txt指定驅(qū)動(dòng)的源代碼

zephyr_include_directories(。)

zephyr_library()

zephyr_library_sources(rotary_encoder.c)

zephyr/sensor/rotary_encoder/Kconfig則是該驅(qū)動(dòng)代碼rotary_encoder.c要使用的配置選項(xiàng)

menuconfig ROTARY_ENCODER

bool “Rotary Encoder Sensor”

depends on GPIO

help

Enable driver for Rotary encoder sensors.

if ROTARY_ENCODER

config ROTARY_ENCODER_THREAD_PRIORITY

int “Thread priority”

default 10

help

Priority of thread used by the driver to handle interrupts.

config ROTARY_ENCODER_THREAD_STACK_SIZE

int “Thread stack size”

default 1024

help

Stack size of thread used by the driver to handle interrupts.

驅(qū)動(dòng)代碼由rotary_encoder.c和rotary_encoder.h組成,不是本文說明重點(diǎn),如何實(shí)現(xiàn)驅(qū)動(dòng)可以參考Zephyr驅(qū)動(dòng)實(shí)現(xiàn)方式

指定使用驅(qū)動(dòng)目錄

Zephyr建議將外部目錄的驅(qū)動(dòng)作為module添加,在app/CMakeLists.txt中添加下面內(nèi)容,構(gòu)建時(shí)就會(huì)編譯app/drivers

list(APPEND ZEPHYR_EXTRA_MODULES

${CMAKE_CURRENT_SOURCE_DIR}/drivers

設(shè)備樹綁定文件目錄

為了硬件上的靈活性,Zephyr引入了設(shè)備樹,通過設(shè)備樹綁定的方式將設(shè)備樹轉(zhuǎn)換為C宏來使用。Zephyr的設(shè)備樹綁定文件可能不包含我們要用的硬件設(shè)備,這就需要我們自己添加。同樣設(shè)備樹綁定文件也可以納入app的目錄進(jìn)行管理,在app目錄下添加dts目錄,里面放置設(shè)備樹綁定文件

app

├── dts

│ └── bindings

│ └── sensor

│ └── rotary-encoder.yaml

rotary-encoder.yaml的編寫和使用方法不是本文重點(diǎn),詳細(xì)可以參考Zephyr添加旋轉(zhuǎn)編碼器驅(qū)動(dòng)

在app/CMakeLists.txt中添加下面內(nèi)容,構(gòu)建時(shí)編譯設(shè)備樹會(huì)查找到app/dts目錄

1

list(APPEND DTS_ROOT ${CMAKE_SOURCE_DIR})

設(shè)備驅(qū)動(dòng)API頭文件目錄

對(duì)于個(gè)人項(xiàng)目開發(fā)來說,設(shè)備驅(qū)動(dòng)API一般是項(xiàng)目?jī)?nèi)使用,API抽象的普遍覆蓋性并不一定要非常全,此外使用的人員也不需要大范圍討論,根據(jù)需求進(jìn)行自定義就可以, 所形成的頭文件放到對(duì)應(yīng)的驅(qū)動(dòng)目錄即可,例如zephyr/sensor/rotary_encoder/rotary_encoder.h, 為了方便應(yīng)用直接使用,可以在app/CMakeLists中添加

1

include_directories(drivers/zephyr/sensor/rotary_encoder/)

之后應(yīng)用代碼中就可以直接”#include “rotary_encoder.h”

結(jié)束語

到此為止我們通過三篇文章可以將Zephyr代碼, Zephyr外部項(xiàng)目,自定義board, 驅(qū)動(dòng)都納入到一個(gè)app的倉庫進(jìn)行管理,通過一個(gè)獨(dú)立的app倉庫可以驅(qū)動(dòng)編譯所必須的代碼,既方便管理,又十分精簡(jiǎn)。

如果你使用的SOC都還未被Zephyr支持,也可以將soc的移植納入到應(yīng)用目錄下進(jìn)行管理,這部分目前我并沒有使用過無法做實(shí)例解釋可以參考https://docs.zephyrproject.org/latest/application/index.html#soc-definitions進(jìn)行操作。

參考

https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/application_development/out_of_tree_driver

https://docs.zephyrproject.org/latest/samples/application_development/out_of_tree_driver/README.html

編輯:jq

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

    關(guān)注

    12

    文章

    1918

    瀏覽量

    86949
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1620

    瀏覽量

    64063
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70768

原文標(biāo)題:Zephyr應(yīng)用的代碼結(jié)構(gòu)--自定義驅(qū)動(dòng)

文章出處:【微信號(hào):智芯原動(dòng)ICETech,微信公眾號(hào):智芯原動(dòng)ICETech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    大彩講堂:VisualTFT軟件如何自定義圓形進(jìn)度條

    VisualTFT軟件如何自定義圓形進(jìn)度條
    的頭像 發(fā)表于 07-07 17:10 ?510次閱讀
    大彩講堂:VisualTFT軟件如何<b class='flag-5'>自定義</b>圓形進(jìn)度條

    KiCad 自定義規(guī)則(KiCon 演講)

    “ ?Seth Hillbrand 在 KiCon US 2025 上為大家介紹了 KiCad 的規(guī)則系統(tǒng),并詳細(xì)講解了自定義規(guī)則的設(shè)計(jì)與實(shí)例。? ” ? 演講主要圍繞 加強(qiáng) KiCad 自定義
    的頭像 發(fā)表于 06-16 11:17 ?620次閱讀
    KiCad <b class='flag-5'>中</b>的<b class='flag-5'>自定義</b>規(guī)則(KiCon 演講)

    HarmonyOS應(yīng)用自定義鍵盤解決方案

    自定義鍵盤是一種替換系統(tǒng)默認(rèn)鍵盤的解決方案,可實(shí)現(xiàn)鍵盤個(gè)性化交互。允許用戶結(jié)合業(yè)務(wù)需求與操作習(xí)慣,對(duì)按鍵布局進(jìn)行可視化重構(gòu)、設(shè)置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護(hù)層面,自定義鍵盤可以
    的頭像 發(fā)表于 06-05 14:19 ?691次閱讀

    LabVIEW運(yùn)動(dòng)控制(三):EtherCAT運(yùn)動(dòng)控制器的高效加工指令自定義封裝

    LabVIEW高效加工指令自定義封裝
    的頭像 發(fā)表于 04-08 13:49 ?2700次閱讀
    LabVIEW運(yùn)動(dòng)控制(三):EtherCAT運(yùn)動(dòng)控制器的高效加工指令<b class='flag-5'>自定義</b>封裝

    custom.c自定義代碼無法自動(dòng)保存怎么解決?

    我在custom.c插入自定義代碼,當(dāng)我不保存就切換到其他文件時(shí),custom.c自定義代碼
    發(fā)表于 04-08 06:00

    如何添加自定義單板

    在開發(fā)過程,用戶有時(shí)需要?jiǎng)?chuàng)建自定義板配置。本節(jié)將通過一個(gè)實(shí)例講解用戶如何創(chuàng)建屬于自己的machine,下面以g2l-test.conf為例進(jìn)行說明。
    的頭像 發(fā)表于 03-12 14:43 ?592次閱讀

    使用Python API在OpenVINO?創(chuàng)建了用于異步推理的自定義代碼,輸出張量的打印結(jié)果會(huì)重復(fù),為什么?

    使用 Python* API 在 OpenVINO? 創(chuàng)建了用于異步推理的自定義代碼。 遇到輸出張量的打印結(jié)果會(huì)重復(fù)的問題,即使輸入圖像不同。
    發(fā)表于 03-06 07:53

    創(chuàng)建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼獲得的結(jié)果與Python代碼不同是為什么?

    創(chuàng)建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個(gè)推理過程中使用相同的圖像和模型。 從 C++ 代碼獲得的結(jié)果與 Python*
    發(fā)表于 03-06 06:22

    如何快速創(chuàng)建用戶自定義Board和App工程

    可將該文件夾復(fù)制到用戶自定義的工作目錄(workspace),基于此模板進(jìn)行開發(fā)。本模板主要牽涉到的用戶自定義的文件有:用戶板級(jí)文件Board用戶應(yīng)用程序App用
    的頭像 發(fā)表于 02-08 13:38 ?524次閱讀
    如何快速創(chuàng)建用戶<b class='flag-5'>自定義</b>Board和App工程

    Altium Designer 15.0自定義元件設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《Altium Designer 15.0自定義元件設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 01-21 15:04 ?0次下載
    Altium Designer 15.0<b class='flag-5'>自定義</b>元件設(shè)計(jì)

    think-cell:自定義think-cell(四)

    C.5 設(shè)置默認(rèn)議程幻燈片布局 think-cell 議程可以在演示文稿中使用特定的自定義布局來定義議程、位置和議程幻燈片上的其他形狀,例如標(biāo)題或圖片。通過將此自定義布局添加到模板,您可以為整個(gè)組織
    的頭像 發(fā)表于 01-13 10:37 ?514次閱讀
    think-cell:<b class='flag-5'>自定義</b>think-cell(四)

    think-cell;自定義think-cell(一)

    本章介紹如何自定義 think-cell,即如何更改默認(rèn)顏色和其他默認(rèn)屬性;這是通過 think-cell 的樣式文件完成的,這些文件將在前四個(gè)部分中進(jìn)行討論。 第五部分 C.5 設(shè)置默認(rèn)議程幻燈片
    的頭像 發(fā)表于 01-08 11:31 ?744次閱讀
    think-cell;<b class='flag-5'>自定義</b>think-cell(一)

    創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL)

    電子發(fā)燒友網(wǎng)站提供《創(chuàng)建自定義的基于閃存的引導(dǎo)加載程序(BSL).pdf》資料免費(fèi)下載
    發(fā)表于 09-19 10:50 ?0次下載
    創(chuàng)建<b class='flag-5'>自定義</b>的基于閃存的引導(dǎo)加載程序(BSL)

    如何創(chuàng)建TestStand自定義步驟

    在之前的課程簡(jiǎn)單地介紹過TestStand自帶的一些步驟類型,如測(cè)試、消息彈窗、賦值、標(biāo)簽等等,這些簡(jiǎn)單的步驟從TestStand的插入選版中就可以添加到序列。那么在使用如果碰到需要實(shí)現(xiàn)更加靈活、復(fù)雜的功能,使用自帶的一些
    的頭像 發(fā)表于 09-11 14:46 ?2537次閱讀
    如何創(chuàng)建TestStand<b class='flag-5'>自定義</b>步驟

    NVIDIA NeMo加速并簡(jiǎn)化自定義模型開發(fā)

    如果企業(yè)希望充分發(fā)揮出 AI 的力量,就需要根據(jù)其行業(yè)需求量身定制的自定義模型。
    的頭像 發(fā)表于 07-26 11:17 ?1265次閱讀
    NVIDIA NeMo加速并簡(jiǎn)化<b class='flag-5'>自定義</b>模型開發(fā)
    主站蜘蛛池模板: 羞羞漫画喷水漫画yy漫画 | 特黄特色三级在线观看 | 97影院3 | 午夜福免费福利在线观看 | 成人国产亚洲欧美成人综合网 | 亚洲第一永久在线观看 | 久久精品高清视频 | 天堂电影在线观看免费入口 | 久久精品94精品久久精品 | 日本免费小视频 | 好紧好湿好黄的视频 | 国产主播一区二区 | 2021国产精品午夜久久 | 午夜看大片 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片图片 | 免费操人视频 | 爱情社保片鲁丝片一区 | 欧美深深色噜噜狠狠yyy | 日韩毛片在线看 | 天天狠狠 | 午夜色大片在线观看 | 99午夜高清在线视频在观看 | 狠狠色狠狠色综合婷婷tag | 喷潮白浆直流在线播放 | 色多多免费视频 | 国产中出视频 | 美女扒开尿口让男人桶 | 五月激情啪啪 | 欧美特黄特色aaa大片免费看 | 久久草在线免费 | 四虎成人免费网站在线 | 婷婷爱五月| 99久久精品费精品国产 | 天堂网免费 | 天天做天天爱天天影视综合 | 4399一级成人毛片 | 亚色中文 | 久插视频 | 性猛交╳xxx乱大交 性免费视频 | 久久美女精品国产精品亚洲 | 5g影院天天|