Понеділок, 20.11.2017, 23:47
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Листопад 2017  »
ПнВтСрЧтПтСбНд
  12345
6789101112
13141516171819
20212223242526
27282930

Structures(структуры)-2часть."Help" - CodeVisionAVR.Вкладка - "Variables(Переменные)"

Структуры могут быть объединены в массивы.

Пример, как инициализировать и доступ к глобальным массивом структуры хранятся в EEPROM:

 

/* Global structure array located in EEPROM */

eeprom struct eeprom_structure {

             char a;

             int  b;

             char c[15];

             } se[2]={{'a',25,"Hello"},

                     {'b',50,"world"}};

 

void main(void) {

char k1,k2,k3,k4;

int i1, i2;

 

/* define a pointer to the structure */

struct eeprom_structure eeprom *ep;

 

/* direct access to structure members */

k1=se[0].a;

i1=se[0].b;

k2=se[0].c[2];

k3=se[1].a;

i2=se[1].b;

k4=se[1].c[2];

 

/* same access to structure members using a pointer */

ep=&se; /* initialize the pointer with the structure address */

k1=ep->a;

i1=ep->b;

k2=ep->c[2];

++ep;   /* increment the pointer */

k3=ep->a;

i2=ep->b;

k4=ep->c[2];

}

 

Потому что некоторые AVR устройства имеют небольшой объем оперативной памяти, для того, чтобы сохранить размер стека данных небольшой, рекомендуется не пропускать структур как функция параметров и использовать указатели для этой цели.

Пример:

 

struct alpha {

             int a,b, c;

             } s={2,3};

/* define the function */

struct alpha *sum_struct(struct alpha *sp) {

/* member c=member a + member b */

sp->c=sp->a + sp->b;

/* return a pointer to the structure */

return sp;

}

void main(void) {

int i;

/* s->c=s->a + s->b */

/* i=s->c */

i=sum_struct(&s)->c;

}

 

Структура члены также могут быть объявлены как битовые поля, имеющие ширину от 1 до 32.

Битовые поля выделяются в порядке объявления, начиная с младшего бита.

Пример:

 

/* this structure will occupy 1 byte in RAM

   as the bit field data type is unsigned char (эта структура будет занимать 1 байт RAM

    как битовое поле типа данных неподписанные символ )*/

struct alpha1 {

              unsigned char a:1; /* bit 0 */

              unsigned char b:4; /* bits 1..4 */

              unsigned char c:3; /* bits 5..7 */

              };

 

/* this structure will occupy 2 bytes in RAM

   as the bit field data type is unsigned int (эта структура будет занимать 2 байта в оперативной памяти как битовое поле типа данных неподписанных Int )*/

struct alpha2 {

              unsigned int a:2; /* bits 0..1 */

              unsigned int b:8; /* bits 2..9 */

              unsigned int c:4; /* bits 10..13 */

                                /* bits 14..15 are not used (не используется )*/

              };

 

/* this structure will occupy 4 bytes in RAM

   as the bit field data type is unsigned long (эта структура будет занимать 4 байта в оперативной памяти как битовое поле типа unsigned long )*/

struct alpha3 {

              unsigned long a:10; /* bits 0..9 */

              unsigned long b:8;  /* bits 10..17 */

              unsigned long c:6;  /* bits 18..23 */

                                  /* bits 24..31 are not used (не используется )*/

Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0