ARMにて、ビット操作をバイト操作に変換する定義方法を教えてください。
Posted: 2016年2月24日(水) 09:39
ARMでC言語を使用しています。
ARMのビット操作は、メモリマップで行っていますが、この任意ビットを8個集め、unionとstructを使用して、バイトアクセスをしたいのですが、可能でしょうか?
もし可能ならば、その宣言方法を教えてください。下記にこんな感じに組みたいプログラムを記述させて頂きます。ただし、コンパイルエラーが出たり、正常動作しませんが
参考にして頂ければ、幸いです。
code=c
union {
unsigned char byte_data ;
struct {
volatile unsigned int *b0:1 ;
volatile unsigned int *b1:1 ;
volatile unsigned int *b2:1 ;
volatile unsigned int *b3:1 ;
volatile unsigned int *b4:1 ;
volatile unsigned int *b5:1 ;
volatile unsigned int *b6:1 ;
volatile unsigned int *b7:1 ;
} bit_data = { &(bFM3_GPIO_PDOR3_P1),
&(bFM3_GPIO_PDOR3_P2),
&(bFM3_GPIO_PDOR3_P3),
&(bFM3_GPIO_PDOR3_PA),
&(bFM3_GPIO_PDOR3_PB),
&(bFM3_GPIO_PDOR3_PC),
&(bFM3_GPIO_PDOR3_PD),
&(bFM3_GPIO_PDOR3_PF) } ;
} data ;
void sub(void)
{
data.bit_data = 0x12 ;
}
/code
こんな感じで宣言したいのですが???
現在は、下記の様なプログラムを組んで対処していますが上記の様な方法がありませんか?
code=c
void bit_bytes( unsigned char data )
{
bFM3_GPIO_PDOR3_P1 = data ; data >>= data ;
bFM3_GPIO_PDOR3_P2 = data ; data >>= data ;
bFM3_GPIO_PDOR3_P3 = data ; data >>= data ;
bFM3_GPIO_PDOR3_PA = data ; data >>= data ;
bFM3_GPIO_PDOR3_PB = data ; data >>= data ;
bFM3_GPIO_PDOR3_PC = data ; data >>= data ;
bFM3_GPIO_PDOR3_PD = data ; data >>= data ;
bFM3_GPIO_PDOR3_PF = data ; data >>= data ;
{
/code
コンパイルは、keilを使用しています。
ご存知に方、ご回答宜しくお願いいたします。
ARMのビット操作は、メモリマップで行っていますが、この任意ビットを8個集め、unionとstructを使用して、バイトアクセスをしたいのですが、可能でしょうか?
もし可能ならば、その宣言方法を教えてください。下記にこんな感じに組みたいプログラムを記述させて頂きます。ただし、コンパイルエラーが出たり、正常動作しませんが
参考にして頂ければ、幸いです。
code=c
union {
unsigned char byte_data ;
struct {
volatile unsigned int *b0:1 ;
volatile unsigned int *b1:1 ;
volatile unsigned int *b2:1 ;
volatile unsigned int *b3:1 ;
volatile unsigned int *b4:1 ;
volatile unsigned int *b5:1 ;
volatile unsigned int *b6:1 ;
volatile unsigned int *b7:1 ;
} bit_data = { &(bFM3_GPIO_PDOR3_P1),
&(bFM3_GPIO_PDOR3_P2),
&(bFM3_GPIO_PDOR3_P3),
&(bFM3_GPIO_PDOR3_PA),
&(bFM3_GPIO_PDOR3_PB),
&(bFM3_GPIO_PDOR3_PC),
&(bFM3_GPIO_PDOR3_PD),
&(bFM3_GPIO_PDOR3_PF) } ;
} data ;
void sub(void)
{
data.bit_data = 0x12 ;
}
/code
こんな感じで宣言したいのですが???
現在は、下記の様なプログラムを組んで対処していますが上記の様な方法がありませんか?
code=c
void bit_bytes( unsigned char data )
{
bFM3_GPIO_PDOR3_P1 = data ; data >>= data ;
bFM3_GPIO_PDOR3_P2 = data ; data >>= data ;
bFM3_GPIO_PDOR3_P3 = data ; data >>= data ;
bFM3_GPIO_PDOR3_PA = data ; data >>= data ;
bFM3_GPIO_PDOR3_PB = data ; data >>= data ;
bFM3_GPIO_PDOR3_PC = data ; data >>= data ;
bFM3_GPIO_PDOR3_PD = data ; data >>= data ;
bFM3_GPIO_PDOR3_PF = data ; data >>= data ;
{
/code
コンパイルは、keilを使用しています。
ご存知に方、ご回答宜しくお願いいたします。