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

 
 
 
Reply to this topicStart new topic
> структуры и указатели, lpc214x
AD_Wolf
сообщение Aug 19 2008, 14:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 27-01-08
Из: Пушкин
Пользователь №: 34 464



People,
подскажите...

Есть 3 регистра с адресами:
Цитата
/* Pin Connect Block */
#define PINSEL0 (*((volatile unsigned long *) 0xE002C000))
#define PINSEL1 (*((volatile unsigned long *) 0xE002C004))
#define PINSEL2 (*((volatile unsigned long *) 0xE002C014))


хочу, чтобы было, как в хидере для at91, что-то типа

Код
typedef struct PIN_CONNECT
{
volatile unsigned long PINSEL0;
volatile unsigned long PINSEL1;
...
} PIN_CON, *pPIN_CON;

#define BASE_PIN_CON ( (pPIN_CON) 0xE002C000 )


вопрос: как в структуру вместо "..." добавить PINSEL2 если его адрес 0xE002C014, а не 0xE002C008?
P.S.
по поводу использования структур и указателей на них в хидерах - уже начитался в предыдущем посте at91.
данный вопрос интересует просто для самообразования
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 19 2008, 14:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AD_Wolf @ Aug 19 2008, 16:18) *
вопрос: как в структуру вместо

Вписать пустой long


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AD_Wolf
сообщение Aug 19 2008, 14:32
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 27-01-08
Из: Пушкин
Пользователь №: 34 464



Цитата(zltigo @ Aug 19 2008, 18:24) *
Вписать пустой long


Вот так?

Код
typedef struct PIN_CONNECT
{
volatile unsigned long PINSEL0;
volatile unsigned long PINSEL1;
volatile unsigned long;
volatile unsigned short;
volatile unsigned long PINSEL2;
} PIN_CON, *pPIN_CON;

#define BASE_PIN_CON ( (pPIN_CON) 0xE002C000 )


В Keil не проверял, быстро в visual попробовл, он ругнулся
no members defined using this type
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 19 2008, 14:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AD_Wolf @ Aug 19 2008, 16:32) *
В Keil не проверял, быстро в visual попробовл, он ругнулся
no members defined using this type

Либо фиктивные имена, либо
Код
volatile unsigned long PINSEL0;
volatile unsigned long PINSEL1;
volatile unsigned long :32;
volatile unsigned short :16;
volatile unsigned long PINSEL2;
} PIN_CON, *pPIN_CON;

Ну и паковать структуру не забыть. Но похоже Вас куда-то совсем неправильно понесло c выравниванием по 16 bit. Я кажется предвижу следующий вопрос sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AD_Wolf
сообщение Aug 19 2008, 15:13
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 27-01-08
Из: Пушкин
Пользователь №: 34 464



Цитата(zltigo @ Aug 19 2008, 18:36) *
Либо фиктивное имя, либо
Код
volatile unsigned long PINSEL0;
volatile unsigned long PINSEL1;
volatile unsigned long :32;
volatile unsigned short :16;
volatile unsigned long PINSEL2;
} PIN_CON, *pPIN_CON;

спасибо, работает

а если адреса такие:
#define MAMCR (*((volatile unsigned char *) 0xE01FC000))
#define MAMTIM (*((volatile unsigned char *) 0xE01FC004))
#define MEMMAP (*((volatile unsigned char *) 0xE01FC040))
то после MAMTIM нужно 15 пустых лонгов. по-другому никак нельзя сделать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 19 2008, 15:15
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AD_Wolf @ Aug 19 2008, 17:13) *
то после MAMTIM нужно 15 пустых лонгов. по-другому никак нельзя сделать?

В общем случае нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 19 2008, 15:18
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(AD_Wolf @ Aug 19 2008, 19:13) *
то после MAMTIM нужно 15 пустых лонгов. по-другому никак нельзя сделать?

Массив лонгов поставьте. Все это есть в атмеловских хидерах.
Go to the top of the page
 
+Quote Post
Alex03
сообщение Aug 20 2008, 03:36
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(AD_Wolf @ Aug 19 2008, 20:18) *
Цитата
/* Pin Connect Block */
#define PINSEL0 (*((volatile unsigned long *) 0xE002C000))
#define PINSEL1 (*((volatile unsigned long *) 0xE002C004))
#define PINSEL2 (*((volatile unsigned long *) 0xE002C014))

вопрос: как в структуру вместо "..." добавить PINSEL2 если его адрес 0xE002C014, а не 0xE002C008?


Цитата(AD_Wolf @ Aug 19 2008, 20:32) *
Вот так?
Код
typedef struct PIN_CONNECT
{
volatile unsigned long PINSEL0;
volatile unsigned long PINSEL1;
volatile unsigned long;
volatile unsigned short;
volatile unsigned long PINSEL2;
} PIN_CON, *pPIN_CON;


Почему short то? 8 и 14 шестнадцатеричные, соответственно 3 лонга д.б.. Можно массив из 3-х лонгов.


Цитата(AD_Wolf @ Aug 19 2008, 21:13) *
а если адреса такие:
#define MAMCR (*((volatile unsigned char *) 0xE01FC000))
#define MAMTIM (*((volatile unsigned char *) 0xE01FC004))
#define MEMMAP (*((volatile unsigned char *) 0xE01FC040))
то после MAMTIM нужно 15 пустых лонгов. по-другому никак нельзя сделать?

Не 15 а 14.

А смысл?
Типа MAM.MEMMAP (ну или по аналогии BASE_MAM_CON.MEMMAP) приятней читается чем MEMMAP?
Да и ИМХО MEMMAP к MAM-у отношения не имеет.
Go to the top of the page
 
+Quote Post
i.dmitry
сообщение Aug 20 2008, 07:55
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 8-07-07
Пользователь №: 28 963



Цитата(Alex03 @ Aug 20 2008, 07:36) *
вопрос: как в структуру вместо "..." добавить PINSEL2 если его адрес 0xE002C014, а не 0xE002C008?
Почему short то? 8 и 14 шестнадцатеричные, соответственно 3 лонга д.б.. Можно массив из 3-х лонгов.
Не 15 а 14.

А смысл?
Типа MAM.MEMMAP (ну или по аналогии BASE_MAM_CON.MEMMAP) приятней читается чем MEMMAP?
Да и ИМХО MEMMAP к MAM-у отношения не имеет.


ааа точно 3 лонга, это же HEX

( 0xE01FC040 - 0xE01FC004 ) = 3С/4 = F
т.е. 15 volatile unsigned char
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 05:56
Рейтинг@Mail.ru


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