[英]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.