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

 
 
> Определение указателя
ISK2010
сообщение Sep 2 2011, 13:05
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



Использую Keil....

Есть переменная a. Теперь каким-то образом хочу указатель на int "b" не просто определить как адрес переменной "а", а используя некое константное выражение:

CODE
u32 a;

u32 *b = (u32*)(((u32)(&a) - 0x40000000)*32 + 0x42000000);


Но компилятор выдает ошибку типа "не константное выражение". Но я то знаю, что константное.

Что делать? Вариант проинициализировать этот указатель b перед использованием отпадает, т.к. он уже используется)

P.S. Это мне нужно для побитовых операций с некоторыми переменными в STM32F1xx.




Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Sep 4 2011, 17:29
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Можно использовать макроопределение такого вида (и пример применения):
Код
#define ALIAS_PTR(VarPtr, BitNum) \
  *((__IO uint32_t *) (((uint32_t) &(VarPtr) & 0xf0000000) | 0x02000000 \
  + (((uint32_t) &(VarPtr) & 0xfffff)<<5) | (BitNum<<2)))

  ALIAS_PTR(GPIOC->ODR, 8) = ~ALIAS_PTR(GPIOC->ODR, 8);

Но лучше задать атрибут для структуры из битовых полей, и Keil сам будет обращаться к битам через bit-band
Код
typedef struct {
  int  HelpEna : 1;
  int  Lang : 2;
  int  Vect : 1;
  int  Wide : 1;
  int  Scale : 2;
  int  dummy : 1;
} DPY_t __attribute__((bitband));


Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ISK2010   Определение указателя   Sep 2 2011, 13:05
- - GetSmart   ЦитатаЧто делать? Вариант проинициализировать этот...   Sep 2 2011, 13:38
- - xemul   Цитата(ISK2010 @ Sep 2 2011, 17:05) Но ко...   Sep 2 2011, 13:47
- - 777777   Цитата(ISK2010 @ Sep 2 2011, 17:05) Есть ...   Sep 2 2011, 14:19
- - ISK2010   Цитата(GetSmart @ Sep 2 2011, 17:38) Непо...   Sep 2 2011, 17:13
- - sigmaN   Цитатаu32 *b = (u32*)(((u32)(&a) - 0x40000000)...   Sep 2 2011, 20:49
- - alexeyv   ЦитатаА вот стоит добавить что-то сложнее вычитани...   Sep 3 2011, 05:26
- - GetSmart   В рунтайме любые операции работают. На этапе компи...   Sep 3 2011, 05:48
|- - Палыч   Цитата(GetSmart @ Sep 3 2011, 09:48) В ру...   Sep 3 2011, 07:05
- - ISK2010   Цитата(Палыч @ Sep 3 2011, 11:05) Какие о...   Sep 3 2011, 08:15
- - alexeyv   КодТоже - всё нормально. Так почему же не "раб...   Sep 3 2011, 08:28
|- - Палыч   Цитата(ISK2010 @ Sep 3 2011, 12:15) приме...   Sep 3 2011, 13:00
- - ISK2010   Нашел еще одно решение) Тупо заставил запихнуть мо...   Sep 3 2011, 08:44
- - alexeyv   У вас в начале топика в корне не правильная формул...   Sep 3 2011, 09:34
|- - ReAl   Цитата(alexeyv @ Sep 3 2011, 12:34) Дело ...   Sep 3 2011, 10:40
- - skripach   ЦитатаА пример u32 * b = (u32 *)( (u32)(&a) );...   Sep 3 2011, 10:02
- - skripach   ЦитатаА, я то - попробовал в IAR для AVR... И, кст...   Sep 3 2011, 13:07
- - sigmaN   Все тут пишут, что умножение указателей не поддерж...   Sep 3 2011, 19:59
- - toweroff   Цитата(sigmaN @ Sep 3 2011, 23:59) Мне по...   Sep 3 2011, 20:02
- - sigmaN   Ааа, ну да! Вообще-то логично, что считать дол...   Sep 3 2011, 20:13
|- - toweroff   Цитата(sigmaN @ Sep 4 2011, 00:13) И он н...   Sep 3 2011, 20:20
|- - Палыч   Цитата(toweroff @ Sep 4 2011, 00:20) без ...   Sep 3 2011, 20:32
||- - toweroff   Цитата(Палыч @ Sep 4 2011, 00:32) Конечно...   Sep 3 2011, 20:40
|- - XVR   Цитата(toweroff @ Sep 4 2011, 00:20) не т...   Sep 5 2011, 08:51
- - sigmaN   Хехе, а интересный же вопрос, а! Особенно вари...   Sep 3 2011, 23:11
- - skripach   ЦитатаА как правильно? Сейчас подойдет товарищ из ...   Sep 4 2011, 00:28
|- - toweroff   Цитата(skripach @ Sep 4 2011, 04:28) Сейч...   Sep 4 2011, 00:45
- - sigmaN   ЦитатаСейчас подойдет товарищ из Риги и всем всё о...   Sep 4 2011, 00:59
- - ISK2010   А что в выражении u32 * b = (u32 *)( (u32)(&a)...   Sep 4 2011, 06:43
- - sigmaN   Лично я всегда думал, что изобилие в коде приведен...   Sep 4 2011, 08:51
- - ISK2010   Читаете что я пишу? Всякие там вычисления номера с...   Sep 4 2011, 10:51
- - ISK2010   Да, у меня уже используется что-то подобное :CODEt...   Sep 4 2011, 18:15


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:16
Рейтинг@Mail.ru


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