1. gzyueqian
      13352868059

      嵌入式開發(fā):嵌入式基礎——使用指針數(shù)組映射外設

      更新時間: 2022-08-10 09:27:48來源: 粵嵌教育瀏覽量:8100

        驅動器設計的一個基本問題是決定如何映射到外設寄存器。多年來,嵌入式開發(fā)人員已經(jīng)使用了許多不同的方法,例如建立結構來定義位圖,或者簡單地將所需的值寫入寄存器;然而,我一直最喜歡的方法是創(chuàng)建一個映射到外設寄存器的指針數(shù)組。這種方法提供了一種將外設寄存器分組到邏輯通道的優(yōu)雅方式,并提供了一種簡單的方法來初始化外設以及訪問其數(shù)據(jù)。指針數(shù)組方法很容易移植,可以用來創(chuàng)建標準的API和應用程序代碼,它們可以在不同的硬件平臺上工作,允許共享應用程序代碼。如果編寫得當,它還可以創(chuàng)建更容易閱讀和理解的代碼,從而使軟件維護更容易。

        指針數(shù)組的概念是一種相對直接的映射到外設的方法。其思想是創(chuàng)建一個數(shù)組,其中數(shù)組的每個索引都是指向特定類型的外圍寄存器的指針。例如,對于具有多個GPIO端口的微控制器,將設置一個指針數(shù)組來訪問每個可用端口的方向寄存器(清單1)。將設置另一個指針數(shù)組來訪問輸入和輸出寄存器。每個寄存器類型都將與其自己的指針數(shù)組相關聯(lián)。

        

        清單1–GPIO的指針數(shù)組

        注意指針數(shù)組的聲明方式是很重要的。指針數(shù)組portsddr是一個指向可變uint16的常量指針。請注意,聲明是從右向左定義的。指向寄存器的指針是一個常量指針,但將其聲明為易失性uint16_t會通知編譯器,所指向的值可能會自行改變,而無需軟件的交互。

        嵌入式開發(fā)人員使用這種方法進行內(nèi)存映射有很多好處。首先,它允許將功能相同的寄存器邏輯地組合在一起。這使得軟件工程師可以將每個外設視為MCU的一個獨立通道。例如,定時器1和定時器2可以看作是兩個不同的定時器通道。設置每個定時器的周期寄存器只需要簡單地寫入周期指針陣列的適當通道索引。指針數(shù)組的索引變成了通道訪問索引。例如,指針數(shù)組索引0將與定時器1相關聯(lián);指針數(shù)組索引1將與定時器2相關聯(lián)。

        接下來,當外設開始看起來像通道時,創(chuàng)建一個抽象的方法就變得容易了,不僅可以初始化,還可以訪問每個外設數(shù)據(jù)。這允許使用一個簡單的循環(huán)來初始化每個外設(清單2)。只需使用正確的通道索引,就可以訪問外設的數(shù)據(jù)。這使得驅動程序框架不僅易于理解和重用,而且是一個抽象設備寄存器的框架。

        

        清單2–定時器初始化循環(huán)

        最后,它允許開發(fā)人員為每個外設創(chuàng)建配置表。嵌入式開發(fā)人員可以創(chuàng)建一個可重用的驅動程序,將配置表作為參數(shù),而不是總是編寫定制的初始化代碼。然后,初始化函數(shù)一次循環(huán)一個通道,并通過指針數(shù)組初始化外設寄存器。這使得驅動程序成為一個庫模塊,一次又一次地被測試,產(chǎn)生可以加速下一個項目的經(jīng)過驗證的代碼。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 午夜福利757永久网站 | 亚洲国产精品久久 | 日韩精品成人区中文字幕 | 在线观看亚洲人成网站 | 日韩视频中文字幕在线一区 | 在线观看日本免费a∨下 |