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

 
 
> Определение указателя
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
Ответов
sigmaN
сообщение Sep 4 2011, 08:51
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Лично я всегда думал, что изобилие в коде приведений к типу - есть признак не совсем корректного использования возможностей языка...
Нет сомнений в том, что это работает, однако же не исключено, что смена дизайна позволит существенно упростить какие-то вещи.
Мне сложно предложить что-то конкретное, т.к. я не вижу картину целиком, но мне точно не очень нравится видеть такое
Код
*(u32*)(MB_Addr_BB_Coils + NumberOfFlag*4) = 1;
Ну точно же можно заставить компилятор всё это сделать автоматически. Например, если у вас в массиве структуры с полем флаг, то почему бы не писать
Код
MB_Coils[номер структуры].флаг = 1;
строкой выше вычислить номер структуры, если требуется получить её из общего номера флага, например..
Это всего-лишь догадка, т.к. я пока не совсем понял, что конкретно должен сделать Ваш код. Просто идея в том, чтобы использовать возможности языка, а не просто манипулировать указателями, на всю катушку пользуясь тем, что язык и это позволяет.
Как-то так, в общем ))

P.S. Очень жаль, что не удастся следить за дискуссией дальше sad.gif Ближайшие пару дней буду трястись в поезде....


--------------------
The truth is out there...
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
- - ISK2010   Читаете что я пишу? Всякие там вычисления номера с...   Sep 4 2011, 10:51
- - ViKo   Можно использовать макроопределение такого вида (и...   Sep 4 2011, 17:29
- - ISK2010   Да, у меня уже используется что-то подобное :CODEt...   Sep 4 2011, 18:15


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 04:50
Рейтинг@Mail.ru


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