2016-12-20 17 views
1

в C, если мы структура определены какчтения битого/запись из структуры

struct PortBreg { 
unsigned int B0 :1; 
unsigned int B1 :1; 
unsigned int B2 :1; 
unsigned int B3 :1; 
unsigned int B4 :1; 
unsigned int B5 :1; 
unsigned int B6 :1; 
unsigned int B7 :1; 
}; 

#define Breg (*(volatile struct PortBreg *)(0x38)), 

Если я хочу прочитать значение из порта B битного B3 и записать значение в порт B битный B2, я могу сделать, как

int i=Breg.B3;  //to read 
Breg.B2=i;   //to write ? 

ответ

0

это может зависеть, если порт для чтения и записи, но и для обычной переменной этот код работает: копирование B3 до B2. Пожалуйста, согласитесь с вашими типами, int i не unsigned int i. Также обратите внимание, что я печатаю каждый элемент в обычной последовательности, но определение структуры фактического считывания порта может быть отменено, так что сначала B7.

#include <stdio.h> 

struct PortBreg { 
    unsigned int B0 :1; 
    unsigned int B1 :1; 
    unsigned int B2 :1; 
    unsigned int B3 :1; 
    unsigned int B4 :1; 
    unsigned int B5 :1; 
    unsigned int B6 :1; 
    unsigned int B7 :1; 
}; 

void show(struct PortBreg Qreg) 
// bit order MSB -> LSB 
{ 
    printf("%u%u%u%u%u%u%u%u\n", 
     Qreg.B7, Qreg.B6, Qreg.B5, Qreg.B4, Qreg.B3, Qreg.B2, Qreg.B1, Qreg.B0); 
} 

int main(void) 
{ 
    struct PortBreg Breg = {0, 0, 0, 1,}; 
    unsigned i; 
    show(Breg); 
    i = Breg.B3; 
    Breg.B2 = i; 
    show(Breg); 
    return 0; 
} 

выход программы:

 
00001000 
00001100 
0

Не всегда. Если порт отображается в памяти, простой акт чтения и записи в правый бит с C может быть достаточным для запуска сигнала на проводах. Но вам, возможно, придется делать другие вещи. Часто вам приходится отключать прерывания. И чтение часто также очищает порт, часто вам нужно немного проверить, есть ли данные, затем читать и очищать.

Итак, вам нужно взглянуть на документацию по оборудованию. В принципе, порт управляется путем записи в биты, как если бы они были простой памятью.

 Смежные вопросы

  • Нет связанных вопросов^_^