簡體   English   中英

寫入 Ada 中可能存在或不存在的寄存器

[英]Writing to a register which may or may not exist in Ada

我有一個驅動程序,其代碼庫是為多個目標構建的,每個目標都有自己的 Registers.ads,它定義了該目標的寄存器集。 驅動程序需要寫入寄存器,該寄存器可能存在也可能不存在於 Registers.ads 中(取決於配置)。

在 C 中,我會做這樣的事情:

#ifdef REG1
    reg_write(REG1, 0x1234);
#endif

但是在 Ada 中,沒有預處理器,我不能用常規的 if 語句來做到這一點:

if REG1_EXISTS then
    reg_write(REG1, 0x1234);
end if;

這無法在沒有寄存器的目標上編譯,因為 REG1 是未定義的符號。

有什么方法可以實現與 C 代碼類似的行為嗎? 理論上我可以創建一個具有 write_reg1 function 和 select 的多個實現的 HAL,其中一個是根據目標編譯的,但我想避免這種情況,因為有很多這樣的寄存器,它會使代碼混亂。

如果 REG1 在特定目標中不存在,您仍然可以聲明一個具有正確類型的虛擬符號 REG1,只要您還將 REG1_EXISTS 聲明為 False,或者有一些保留值“No_Register”可以讓您這樣做

if REG1 /= No_Register then
   reg_write(REG1, ...)
end if;

如果這樣的寄存器寫入非常普遍,您可以通過在 reg_write 操作中嵌入對 No_Register 的檢查來減少條件語句的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM