簡體   English   中英

將指針傳遞到內存映射的接口

[英]Passing pointer to memory-mapped interface

我有一個指向內存映射設備的全局指針,初始化如下:

volatile char *base_address = (char *) 0xa0000000;

在程序執行期間,我有一個switch語句,根據輸入,必須調整base_address指針,如下所示:

    switch (input) {
        case 'S': 
        base_address = (char *) 0xa0001000;
        InitDevice();
    break;
        case 'A': 
        base_address = (char *) 0xa0001000;
        InitDevice();
            break

TBH,對我來說這似乎是一個骯臟的技巧,將base_address傳遞給函數InitDevice((char *) 0xa0001000)可能會更好。 后者是執行此操作的正確方法還是有更好的方法?

非常感謝,亞歷克斯

是的,顯式地將必需參數傳遞給函數總是比通過全局變量傳遞參數更好。

在嵌入式環境中,您可能必須考慮使用參數調用函數可能需要將參數壓入堆棧並以其他方式彈出(除非編譯器對其進行優化並將其傳遞到寄存器中)。 但是除非基於(通過測量)確定速度增益實際上值得污染代碼,否則我不會基於此進行優化。
(並且由於您的示例正在切換輸入,與堆棧操作相比,輸入切換通常以很高的速度進行,因此無論如何這都不是問題。)

但是,正如Lars在評論中所說,如果將這些文字地址替換為符號常量可能會更好:

volatile char* const A_base_address = (char *) 0xa0001000;
volatile char* const S_base_address = (char *) 0xa0001000;

switch (input) {
case 'S': 
    InitDevice(S_base_address);
    break;
case 'A': 
    InitDevice(A_base_address);
    break;

暫無
暫無

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

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