この記事では、ChinaMobileのOneOSWeChatパブリックアカウントの「IntroductiontoClocksourceDriver」を共有しています。
1インチの時間は1インチの金の価値があり、1インチの金は1インチの時間を買うことはできません〜カーネルで時間がどのように決定されるか知っていますか?
最初に、今日の主人公のクロックソースによって提供されるタイムベースラインが必要です。現在の時刻を取得すると、カーネルは最初に現在のクロックソースを読み取り、次に変換して適切な時間単位に戻って表示します。それがどのように機能するかを知るために読んでください!
Clocksourceとは何ですか?
まず、基本的な質問について考えます。時間は何ですか。
時間の一般的な定義は次のとおりです。物質的存在の客観的な形、過去、現在、未来で構成される連続的なシステム。それは物質の動きと変化の連続性と連続性の現れです。
言葉では、時間は始点も終点もない直線(タイムライン)であることがわかります。このタイムラインのどこにいるかを理解するには、相対的な基準点と線を分割する目盛りが必要です。たとえば、イエスの誕生の時間は0時と定義され、セシウム133原子の基底状態の2つの超微細エネルギーレベル間の遷移中に放射される電磁波の周期の9,192,631,770倍の時間です。 1秒と定義されています。easy〜)。そして、年、月、日、時、分の概念で時間をサイクルに分けて、お互いに会う約束をすることができます〜
カーネルの場合、タイムラインをどのように分割する必要がありますか?
まず、ハードウェアが無期限にカウントすることは不可能です。カウントするビット数が限られているハードウェアしか使用できないため、連続して繰り返される線分として理解できます。
クロックソースは、ラインセグメントの長さを決定するために使用できます。これは、指定された入力周波数のクロックで動作するクロックサイクルを抽象化します。通常、システムで最も精度の高いハードウェアタイマーがクロックソースとして選択されます。システムにより、高精度のリアルタイムタイミングを提供します。パフォーマンステストのタイミング、正確な遅延、グローバルタイムライン、およびその他のシナリオで使用でき、nsレベルの高精度タイムスタンプインターフェイスとnsレベルの遅延インターフェイスを提供します。
OneOSがタイマーおよびクロックソースプロジェクトの基本的な構成とテストをどのように実行するかを見てみましょう。
プロジェクトの構成と生成
以下の構成はすべて、例としてWandu世代開発ボード(STML475)に基づいており、ハードウェアタイマーを構成し、プロジェクトを生成します。
STM32CUBEMX構成ハードウェア
1. oneos \ projects \ xxxxx(プロジェクトフォルダ)\ board\CubeMX_Configの下にあるCUBEプロジェクトファイルを開きます。
2.次の図に示すように、CUBEプロジェクトでタイマーを構成し、[タイマー]を選択して、動作モードとクロックソースを構成します。
3. [GENARATE CODE]をクリックして、コードを生成します。
プロジェクトの構成と生成
1.対応するoneos\projects \ xxxxx(プロジェクトフォルダー)ディレクトリにあるOneOS-Cubeツールを開き、コマンドラインでmenuconfigと入力して、ビジュアル構成インターフェイスを開きます。
2.次の図に示すように、スペースまたは右矢印キーを使用して、[ドライバー]-> [タイマー]でオプションのクロックソースを選択し、クロックソースが高精度のタイムスタンプを提供できるようにします。
(Top) → Drivers→ Timer
OneOS Configuration
[*] Using timer driver
[*] clocksource
[] clocksource show
[] Timekeeping
[] clockevent
[] hrtimer(soft timer)
cortex-m hardware timer config --->
3. stm32チップは、タイムスタンプとしてDWTおよびSysTickを使用できます。タイムスタンプとしてDWTまたはSysTickが有効になっている場合、タイムスタンプとして最適なタイマーが選択されます。このオプションが有効になっていない場合、前のステップが選択されます。タイマーstm32cubeによって設定されたものがタイムスタンプとして使用されます。以下は、DWTを無効にするための設定インターフェイスです。
(Top) → Drivers→ Timer→ Using timer driver → cortex-m hardware timer config
↑↑↑↑↑↑↑ OneOS Configuration
cortex-m systick config (systick for kernel tick) --->
[ ] cortex-m dwt for clocksource
4. Escキーを押してmenuconfigを終了し、変更した設定を保存するように注意してください。
5.前の手順で開いたOneOS-Cubeツールのコマンドラインでscons--ide= mdk5と入力して、プロジェクトをビルドします。
プロジェクトのコンパイルと実装
1.対応するoneos\projects \ xxxxx(プロジェクトフォルダ)ディレクトリにあるproject.uvprojxプロジェクトファイルを開きます。
2.テストファイルoneos\demos \ driver \ clocksource_test.c(詳細なコードについてはOneOS公式Webサイトの技術文書を参照)をプロジェクトに追加します。
3.プロジェクトをコンパイルしてダウンロードし、プログラムを実行します。
4. xshellなどのシリアルポートツールを開きます。通信が成功したら、clocksourceコマンドを入力してテストできます。
5.クロックソースのマイクロレベルのクロック精度をシステムティックと比較してテストします。
テストは次のとおりです。
sh>clocksource_test
msleep start tick: 40072
msleep now tick: 40073 delta tick: 1
msleep start time: 400.716546668
msleep now time: 400.726546743 8, delta time: 10000 us
msleep start tick: 40075
msleep now tick: 40077 delta tick: 2
msleep start time: 400.746546706
msleep now time: 400.766546843 16, delta time: 20000 us
msleep start tick: 40079
msleep now tick: 40083 delta tick: 4
msleep start time: 400.786546756
msleep now time: 400.826546231 32, delta time: 39999 us
さて、これでクロックソースドライバーの紹介は終わりです。より詳細なコンテンツを知りたい場合は、OneOS公式ウェブサイトのアカデミーコースまたは技術文書で詳細を学ぶことができます。
リンクをクリックしてOneOSAcademyにジャンプし、関連するコース「clocksource&clockevent driver Introductionanduse 」を学習します。