реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> struct - непонятка с косвенной адресацией
tag
сообщение Dec 18 2007, 10:45
Сообщение #31


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(sergik_vrn @ Dec 17 2007, 15:20) *
убедился, что все понял правильно, просто формулировка про адреса меня смутила.
посмотрите в треде Вам кто-то уже советовал использовать enum, присоединяюсь. наиболее правильно собирать однотипные элементы в массив, а для адресации на уровне идентификатора использовать enum




...как вариант

#define BAUD_RATE 2


unsigned int Settings[64];


....


Settings[BAUD_RATE] = 9600;
Go to the top of the page
 
+Quote Post
Andrei_S
сообщение Dec 18 2007, 11:48
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535



Цитата(tag @ Dec 18 2007, 13:45) *
...как вариант
#define BAUD_RATE 2
unsigned int Settings[64];
....
Settings[BAUD_RATE] = 9600;

В принципе, ничего, и ремарки не нужны... Но годится в случае одного типа переменных.
Go to the top of the page
 
+Quote Post
_dem
сообщение Dec 18 2007, 12:31
Сообщение #33


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970




Цитата
..как вариант#define BAUD_RATE 2

и до этого доходили аж 3 страницы smile.gif
Go to the top of the page
 
+Quote Post
Andrei_S
сообщение Dec 18 2007, 13:01
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 3-08-07
Из: Орловская обл.
Пользователь №: 29 535



Код
Read_EEPROM((u8 *)&config.info_1, MEM_ADDR + offsetof(Config_Type, info_1), sizeof(config.info_1));

Но а все-таки, а как уйти от названия элементов структуры к порядковому номеру элемента этой структуры?

Хотелось бы вместо названия поля info_1 писать номер этого поля, например 1

Например, я последовательно вывожу на индикацию эти 100 параметров структуры:
N1 120
N2 300
....
и т.д.

При нажатии кнопок я могу изменять значения и перезаписывать их в ПЗУ
Если я, например, изменил один из параметров, то для записи в ПЗУ я должен сначала сопоставить значение переменной N и название соответствующего поля типа:
Код
switsh(N)
{
  case 0: Addr = offsetof(Config_Type, info_1); break;
  case 1: Addr = offsetof(Config_Type, info_2); break;
....
и так все 100 параметров


Можно ли это модифицировать?
Go to the top of the page
 
+Quote Post
vmp
сообщение Dec 18 2007, 13:10
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(Andrei_S @ Dec 18 2007, 11:34) *
Но, допустим, мне необходимо перезаписать всего один элемент структуры - пускай 5 элемент.
Мне нужно узнать его адрес и размерность.

Код
//-------------------------------------------------------------
// Вычисление смещения до поля в структуре
//-------------------------------------------------------------
#define OFFSET(type,field) ((char *)&(((type *)0)->field) - (char *)0)


Как пользоваться - OFFSET(тип_структуры, имя_элемента) выдаст смещение от начала структуры до указанного элемента. Размер элемента можно получить по sizeof(type.field).

Цитата(Andrei_S @ Dec 18 2007, 16:01) *
Но а все-таки, а как уйти от названия элементов структуры к порядковому номеру элемента этой структуры?

Хотелось бы вместо названия поля info_1 писать номер этого поля, например 1


Тогда я бы сделал еще одну табличку с дескрипторами полей. Например, массив структур с описателями параметров. В него заносил бы тип поля, смещение от начала, размер, формат вывода, строку с именем, минимальное и максимальное значения и т.д. А индекс этого массива для читабельности описал как enum. smile.gif
Go to the top of the page
 
+Quote Post
_dem
сообщение Dec 18 2007, 14:07
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Если типов данных сравнительно немного, сделайте отдельные массивы на отдельные типы, а потом адресуйтесь по define по смещениям
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 16:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016