Отговори на тема  [ 3 мнения ] 
Масив от 8 бита (MPLAB, XC8, PIC18F4550) 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Масив от 8 бита (MPLAB, XC8, PIC18F4550)
//Процесора е PIC18F4550 , работна среда MPLAB IDE v8.92, компилатор XC8

За мое удобство използвам един тип наречен bittype
Код:

typedef union{
    struct{
        unsigned B0 : 1;
        unsigned B1 : 1;
        unsigned B2 : 1;
        unsigned B3 : 1;
        unsigned B4 : 1;
        unsigned B5 : 1;
        unsigned B6 : 1;
        unsigned B7 : 1;
        unsigned B8 : 1;
    }bits;
    unsigned char byte;
}bittype;

bittype variable;

variable.byte = 0xFF; // променливата я разглеждам като байт и го задавам да е 255 (0xFF)

variable.bits.B7 = 0; // тука вече нулирам бит номер 7 (най-старшия) и тя става 127 (0x7F)

Това е доста удобно и ми върши работа. Днес обаче в един мой проект ми потрябва да укажа номера на бита чрез променлива. Опитах се да направя масив от битове, но уви не се получи. Накрая успях като добавих следния ред в моя union:
Код:
struct{
   bitindex[8] : 1;
}bitarray;

И така моят union вече е union от три неща които са по 8 бита : от една структура от 8 бита с имена, от един байт, и от един масив от 8 бита. Всичко изглеждаше добре. Дори в програмата имах следната проверка if(variable.bitarray.bitindex[0] == 1) която се оказа, че работи. Когато обаче в проверката задам друг номер на бита от масива, компилатора (XC8) дава грешка. Това нещо може ли да се направи изобщо ? Проблема е че ми трябва да управлявам 1000 светодиода, а процесора има само 2048 байта които не ми стигат, понеже искам да имам за всеки светодиод по 2 страници на паметта.

_________________
https://github.com/slav4ocom/


Съб Ное 26, 2016 9:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Re: Масив от 8 бита (MPLAB, XC8, PIC18F4550)
slav4o.com написа:
//Процесора е PIC18F4550 , работна среда MPLAB IDE v8.92, компилатор XC8
... Днес обаче в един мой проект ми потрябва да укажа номера на бита чрез променлива. Опитах се да направя масив от битове, но уви не се получи. ....

Това мисля, че няма как да се получи. Номерът на бита трябва да е известен към момента на компилиране.
Вариантът е да го направиш с лог. оператор И или ИЛИ и преместване (шифтване).

_________________
Хайде де!


Съб Ное 26, 2016 9:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: Масив от 8 бита (MPLAB, XC8, PIC18F4550)
Не разбирам защо се опитваш да правиш подобни гимнастики. Какво му има на стандартния начин?
Код:
variable.bits |= (1<<i);

Код:
variable.bits &= ^(1<<i);

където i е номера на бита дето ще разбутваш.


Съб Ное 26, 2016 11:07 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни