簡體   English   中英

如何將結構成員作為參數傳遞給函數? - C

[英]How to pass a struct member as an argument to a function? − C

我正在嘗試將結構的成員TRISCbits.TRISC2傳遞給函數。

微控制器.h:

typedef union {
    struct {
        unsigned TRISC0                 :1;
        unsigned TRISC1                 :1;
        unsigned TRISC2                 :1;
    };
} TRISCbits_t;
extern volatile TRISCbits_t TRISCbits @ 0x014;

我想做什么:

用戶.c:

static void pwm5Init(volatile unsigned __bit* trisBit){
    *trisBit = 0;
}

我想將TRISC2位作為參數傳遞: pwm5Init(&TRISCbits.TRISC2) 我希望我的函數pwm5Init修改地址 0x14+ TRISC2處的真實TRISC2位 - 不是本地TRISC2 -

由於您不能使指針指向一點,您會怎么做? 有哪些好的做法?

我想不出比linux 內核更好的例子

這是如何修改單個位的代碼片段

unsigned tmp;
// some code here
tmp = pmu_raw_readl(EXYNOS_L2_OPTION(0));
tmp &= ~EXYNOS_L2_USE_RETENTION;
pmu_raw_writel(tmp, EXYNOS_L2_OPTION(0));

該模式是從內存中讀取一個字,然后修改該位,然后寫入一個字。 我相信內存是在字節級別尋址的。 在某些架構上,甚至在字級上。 因此,不可能使用“本機”指令修改單個位。

也許你的例子並沒有真正反映你想要做什么,但給出了:

static unsigned pwm5Init()
{
    return 0 ;
}

然后:

TRISCbits.TRISC2 = pwm5Init() ;

將實現您為不可能的事情提出的確切結果:

static void pwm5Init(volatile unsigned __bit* trisBit){
    *trisBit = 0;
}

這就是“良好做法”。 如果這不能達到您的要求,那么您也許需要一個更現實的例子?

如果您可能需要當前值,則:

static unsigned pwm5Init( unsigned bit )
{
    // flip the bit (for example)
    return ~bit & 1 ;
}

然后:

TRISCbits.TRISC2 = pwm5Init( TRISCbits.TRISC2 ) ;

暫無
暫無

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

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