<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

瑞薩CTSU程序在向嵌入式OS操作系統移植時的注意事項

瑞薩MCU小百科 ? 來源:瑞薩 ? 作者:瑞薩 ? 2023-08-11 12:15 ? 次閱讀

CTSU觸摸按鍵程序

運行要求

在裸機系統中,以一定的時間間隔循環調用CTSU APIs

QE for Cap Touch工具生成的Cap Touch Sample Code

?使用While(true)實現循環調用CTSU APIs

?使用R_BSP_SoftwareDelay()實現適當的定時間隔

嵌入式多任務系統中,也需要以一定的時間間隔循環運行CTSU APIs

?CTSU運行涉及的相關ISR以及API可直接移植到多任務系統中

?需要對QE for Cap Touch工具生成的CapTouch Sample Codee進行改寫

嵌入式操作系統移植時

需要考慮的基本內容

CTSU底層驅動程序和應用程序在向RTOS系統中移植時,一般需要考慮的基本內容

?RTOSSystick的設定

?RTOS延時函數的使用

?MCU中斷優先級與RTOS任務優先級的設置

?QE for Cap Touch工具生成的CTSU CapTouch Sample Code的改寫

Systick的設定

FreeRTOS為例,使用e2 studio新建的FreeRTOS工程中, Systick的默認設定為1ms

e792dd92-37fc-11ee-9e74-dac502259ad0.png

RTOS延時函數的使用

以FreeRTOS為例,FreeRTOS延時函數vTaskDelay()和vTaskDelayUntil()

? FreeRTOS提供了兩個系統延時函數:相對延時函數vTaskDelay()和絕對延時vTaskDelayUntil()。

?這兩個延時函數和自己實現的延時函數不同,這兩個延時函數一旦被調用,當前任務會立刻進入阻塞狀態,而自己寫的延時函數(以for循環等形式實現的軟件延時)會被當做有效任務而一直執行。

?相對延時是指每次延時都是從任務執行函數vTaskDelay()開始,延時指定的時間結束;

vTaskDelay()函數的參數xTicksToDelay表示延時多少個系統節拍時鐘周期(Systick)。

void vTaskDelay( const TickType_t xTicksToDelay )

?絕對延時是指每隔指定的時間,執行一次調用vTaskDelayUntil()函數的任務。換句話說:任務以固定的頻率執行

MCU中斷優先級與RTOS任務優先級的設置

以FreeRTOS任務優先級為例說明

FreeRTOS中任務的最高優先級是通過FreeRTOSConfig.h文件中的configMAX_PRIORITIES進行配置的,用戶實際可以使用的優先級范圍是0到configMAX_PRIORITIES – 1,建議用戶配置宏定義configMAX_PRIORITIES的最大值不要超過32。根據實際應用配置,配置越大,需要的內存空間越大

使用e2 studio新建的FreeRTOS工程中, configMAX_PRIORITIES默認為5

e7a7c50e-37fc-11ee-9e74-dac502259ad0.png

MCU中斷優先級和FreeRTOS任務優先級區別

簡單地說,這兩者之間沒有任何關系,不管中斷的優先級是多少, MCU中斷的優先級永遠高于任何FreeRTOS任務的優先級,即在執行的過程中, MCU中斷來了就開始執行中斷服務程序。

MCU中斷優先級數值越小,優先級就越高;而FreeRTOS的任務優先級是,任務優先級數值越小,任務優先級越低。

MCU中斷優先級與RTOS任務優先級

通常的優先級分配方案:

? IRQ任務:IRQ任務是指通過中斷服務程序進行觸發的任務,所有任務中優先級最高

?高優先級后臺任務:比如按鍵檢測、觸摸檢測、USB消息處理

?低優先級時間調度任務:比如LCD界面顯示、LED數碼管顯示

IRQ任務和高優先級任務必須設置為阻塞式(調用消息等待或者延遲等函數),只有這樣高優先級任務才會 釋放CPU的使用權,從而低優先級任務才會有機會得到執行。

CTSU CapTouch觸摸按鍵任務建議配置成高優先級任務,并且設置成阻塞式。

CTSU CapTouch Sample Code的改寫

默認的CTSU CapTouch Sample Code

?QE for Cap Touch工具可生成默認的CapTouch Sample Code

?Sample Code中使用While(1)死循環等待測量完成,以及使用R_BSP_SoftwareDelay()實現CTSU APIs20ms左右定時間隔的循環調用

?CapTouch觸摸按鍵對于實時性的要求并不高,但是涉及CTSU運行的很多參數都與循環調用的定時間隔有關,因此較大程度決定了觸摸按鍵的靈敏度

例如Drift Correction Interval

下圖中的設定值為255,實際值為255 x API定時調用間隔,按鍵按下的positive noise filter和按鍵釋放的Negative Noise Filter也是如此。

e7d4207c-37fc-11ee-9e74-dac502259ad0.png

因此,用戶需要根據系統對Cap Touch觸摸按鍵的實時性和靈敏度的要求,合理的改寫默認的CTSU CapTouch Sample Code

e81d612e-37fc-11ee-9e74-dac502259ad0.png

對默認的CTSU CapTouch Sample Code進行改寫

FreeRTOS為例

? 合理設定Cap Touch Thread的優先級,例如設定為最高優先級

?API調用報錯時的改寫

while(ture){} 改為 return

?延時R_BSP_SoftwareDelay() 的改寫

可改為vTaskDelay()

?Qe_touch_main()以及CTSU_FN_ISR測量完成中斷Callback函數的改寫

增加OS TimerSemaphore,定時啟動CTSU的測量,釋放while(1)等待測量完成中斷時的CPU時間,此時可取消while(0 == g_qe_touch_flag)R_BSP_SoftwareDelay() / vTaskDelay()

e83a81d2-37fc-11ee-9e74-dac502259ad0.png

使用RTOS分析工具分析

CapTouch線程的運行時序

目的:分析整個系統中CapTouch線程與用戶線程的運行關系

根據觸摸按鍵的數量:

?確保CapTouch線程以合適的時間間隔循環運行

?確保CapTouch線程的按鍵處理階段,不被其他用戶線程搶占

?確保CapTouch線程的觸摸按鍵測量階段,其他用戶線程可以運行

一些RTOS支持的分析工具

FreeRTOS:SEGGER Systemviewer

Azure ThreadX:TraceX

RT-Thread:SEGGER Systemviewer

借助SEGGER SystemView分析CapTouch觸摸按鍵的基本運行過程

SEGGER SystemViewer應用示例

CapTouch觸摸按鍵的基本運行過程

e86fc270-37fc-11ee-9e74-dac502259ad0.png

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

    關注

    146

    文章

    16093

    瀏覽量

    344482
  • 嵌入式
    +關注

    關注

    5001

    文章

    18388

    瀏覽量

    290832
  • 瑞薩
    +關注

    關注

    32

    文章

    22217

    瀏覽量

    85041
  • 移植
    +關注

    關注

    1

    文章

    369

    瀏覽量

    27877
  • 觸摸按鍵
    +關注

    關注

    7

    文章

    114

    瀏覽量

    67140

原文標題:瑞薩CTSU程序在向嵌入式OS操作系統移植時的注意事項

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    [原創]嵌入式操作系統的可移植

    從一個硬件平臺移植到另一個硬件平臺的難易度,這根本就是舍本逐末的提法。試問,一個含嵌入式系統的產品中,操作系統重要還是應用程序重要?我們說
    發表于 03-16 22:11

    嵌入式實時操作系統μC/OS-IIS12單片機上的移植

    ,它的內核可以做到很小,很適合在單片機系統移植。移植了μC/OS-II的嵌入式系統可以使各個任
    發表于 03-08 13:44

    ARM嵌入式操作系統匯總

    (令牌環網)、光纖甚至衛星的支持。 移植步驟:1.Bootloader的移植;2.嵌入式Linux操作系統內核的移植;3.
    發表于 03-25 14:15

    嵌入式操作系統及其特點

    嵌入式操作系統嵌入式應用軟件的開發平臺,嵌入式操作系統(OPerating System,OS
    發表于 07-11 16:51

    嵌入式操作系統上的FreeRTOS操作系統分析

    嵌入式領域中,嵌入式實時操作系統正得到越來越廣泛的應用。采用嵌入式實時操作系統(rtos)可以
    發表于 07-01 08:19

    嵌入式操作系統怎么選擇?

    要的是嵌入式操作系統對應用程序可以起到屏蔽的作用,使應用程序員面向操作系統級開發應用軟件,并易于
    發表于 04-07 07:13

    嵌入式操作系統有哪些

    /IP網絡協議棧?! ≡俅?,Linux具備一套完整的工具鏈,容易自行建立嵌入式系統的開發環境和交叉運行環境,并且可以跨越嵌入式系統開發中仿真工具的障礙。一般,
    發表于 06-20 15:13

    適合STM32的三大嵌入式操作系統

    ,μC/OS-II的移植相對比較簡單,只需要修改與處理器相關的代碼就可以。綜上可知,μC/OS-II是一個結構簡單、功能完備和實時性很強的嵌入式操作
    發表于 06-29 11:32

    嵌入式實時操作系統μC/OS-IILPC2378上怎么移植?

    操作系統及CPU是什么 μC/OS-Ⅱ內核結構及工作原理嵌入式實時操作系統μC/OS-IILP
    發表于 04-26 06:32

    怎樣一步一步移植μC/OS嵌入式操作系統

    基于STM32F1怎樣去移植μC/OS嵌入式操作系統呢?基于MDK-ARM V5怎樣去移植μC/OS
    發表于 11-02 09:09

    嵌入式操作系統UCOSII移植筆記

    是STM32F103ZET6開發工具是Keil5 MDK為什么要進行操作系統移植?一般的嵌入式程序51上運行的時候很少用到
    發表于 12-27 06:35

    嵌入式操作系統IJLC/OS一Ⅱ通信電源監控中應用

    的查詢分析和統計等功能也必不可少。通信電源設備運行參數多,實時效果強,設備當中選擇功能強大的控制芯片.應用嵌入式操作系統.使其盡可能地發揮出強大的軟件控制功能,滿足用戶對通信電源控制的各種要求。與傳統
    發表于 09-20 06:46

    嵌入式實時操作系統的應用詳細教程說明

    本文檔的主要內容詳細介紹的是嵌入式實時操作系統的應用詳細教程說明包括了:1 嵌入式系統嵌入式操作系統
    發表于 12-05 08:00 ?2次下載
    <b class='flag-5'>嵌入式</b>實時<b class='flag-5'>操作系統</b>的應用詳細教程說明

    嵌入式操作系統FREERTOS的移植.

    嵌入式操作系統FREERTOS的移植.(濟南嵌入式開發招聘)-嵌入式操作系統FREERTOS
    發表于 07-30 12:01 ?15次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>FREERTOS的<b class='flag-5'>移植</b>.

    嵌入式實時操作系統μC、OS-II在ARM上的移植.

    嵌入式實時操作系統μC、OS-II在ARM上的移植.(嵌入式開發環境是什么)-本文主要研究基于嵌入式
    發表于 08-04 14:20 ?13次下載
    <b class='flag-5'>嵌入式</b>實時<b class='flag-5'>操作系統</b>μC、<b class='flag-5'>OS</b>-II在ARM上的<b class='flag-5'>移植</b>.
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>