如何将结构成员作为参数传递给函数? - C
How to pass a struct member as an argument to a function? − C
我正在尝试将结构的成员 TRISCbits.TRISC2
传递给函数。
microcontroller.h:
typedef union {
struct {
unsigned TRISC0 :1;
unsigned TRISC1 :1;
unsigned TRISC2 :1;
};
} TRISCbits_t;
extern volatile TRISCbits_t TRISCbits @ 0x014;
我想做什么:
user.c:
static void pwm5Init(volatile unsigned __bit* trisBit){
*trisBit = 0;
}
我想将 TRISC2
位作为参数传递:pwm5Init(&TRISCbits.TRISC2)
。
我希望我的函数 pwm5Init
修改地址 0x14+3 位处的真实 TRISC2
位 - 而不是本地副本 -
指针有点不能指向,你会怎么做?有哪些好的做法?
我想不出比 linux kernel
更好的例子了
这里是修改单个位的代码片段
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));
pattern是从内存中读一个字,然后修改位,再写一个字。
我相信内存是在字节级别上寻址的。在某些架构上,甚至在单词级别上。所以用 "native" 指令修改单个位是不可能的。
也许你的例子并没有真正反映你想做的事情,但给出了:
static unsigned pwm5Init()
{
return 0 ;
}
然后:
TRISCbits.TRISC2 = pwm5Init() ;
将实现您为 不可能 提出的确切结果:
static void pwm5Init(volatile unsigned __bit* trisBit){
*trisBit = 0;
}
也就是"good practice"。如果这没有达到您的要求,那么您可能需要一个更现实的例子?
如果您可能需要当前值,则:
static unsigned pwm5Init( unsigned bit )
{
// flip the bit (for example)
return ~bit & 1 ;
}
然后:
TRISCbits.TRISC2 = pwm5Init( TRISCbits.TRISC2 ) ;
我正在尝试将结构的成员 TRISCbits.TRISC2
传递给函数。
microcontroller.h:
typedef union {
struct {
unsigned TRISC0 :1;
unsigned TRISC1 :1;
unsigned TRISC2 :1;
};
} TRISCbits_t;
extern volatile TRISCbits_t TRISCbits @ 0x014;
我想做什么:
user.c:
static void pwm5Init(volatile unsigned __bit* trisBit){
*trisBit = 0;
}
我想将 TRISC2
位作为参数传递:pwm5Init(&TRISCbits.TRISC2)
。
我希望我的函数 pwm5Init
修改地址 0x14+3 位处的真实 TRISC2
位 - 而不是本地副本 -
指针有点不能指向,你会怎么做?有哪些好的做法?
我想不出比 linux kernel
更好的例子了这里是修改单个位的代码片段
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));
pattern是从内存中读一个字,然后修改位,再写一个字。 我相信内存是在字节级别上寻址的。在某些架构上,甚至在单词级别上。所以用 "native" 指令修改单个位是不可能的。
也许你的例子并没有真正反映你想做的事情,但给出了:
static unsigned pwm5Init()
{
return 0 ;
}
然后:
TRISCbits.TRISC2 = pwm5Init() ;
将实现您为 不可能 提出的确切结果:
static void pwm5Init(volatile unsigned __bit* trisBit){
*trisBit = 0;
}
也就是"good practice"。如果这没有达到您的要求,那么您可能需要一个更现实的例子?
如果您可能需要当前值,则:
static unsigned pwm5Init( unsigned bit )
{
// flip the bit (for example)
return ~bit & 1 ;
}
然后:
TRISCbits.TRISC2 = pwm5Init( TRISCbits.TRISC2 ) ;