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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Определение указателя
Палыч
сообщение Sep 3 2011, 13:00
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ISK2010 @ Sep 3 2011, 12:15) *
пример u32 * b = (u32 *)( (u32)(&a) ); работает в keil.

Цитата(alexeyv @ Sep 3 2011, 12:28) *
У меня все работает. Компилируется без ошибок. Правда не в Keil. И синтаксически это правильное выражение.

Ах, вон оно что! В Keil... А, я то - попробовал в IAR для AVR... И, кстати, - не работает и в таком, упращенном примере.
Go to the top of the page
 
+Quote Post
skripach
сообщение Sep 3 2011, 13:07
Сообщение #17


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
А, я то - попробовал в IAR для AVR... И, кстати, - не работает и в таком, упращенном примере.

ARMовый 6-й IAR компили-т без умножения...


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 3 2011, 19:59
Сообщение #18


I WANT TO BELIEVE
******

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



Все тут пишут, что умножение указателей не поддерживается... оно то, конечно, верно, но ведь ТС пытается сначала привести адрес к u32, потом выполнить все действия и привести результат к указателю.
Ситуация с константностью выражения более-менее понятна, но вот где тут операции с указателями? Мне пока не ясно.

P.S. придерживаюсь мнения, что ТС должен пректатить все эти извращения и найти более православный способ сделать то, что он хочет.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 3 2011, 20:02
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(sigmaN @ Sep 3 2011, 23:59) *
Мне пока не ясно.

вот все и пытаются понять, как оно там компилятором поймется и линкером сложится sm.gif
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 3 2011, 20:13
Сообщение #20


I WANT TO BELIEVE
******

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



Ааа, ну да! Вообще-то логично, что считать должен уже линкер, который знает адрес. И он не обязан уметь делить и умножать. Согласен.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 3 2011, 20:20
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(sigmaN @ Sep 4 2011, 00:13) *
И он не обязан уметь делить и умножать

не только к Вам, а к общественности - а ведь действительно, линкер ТОЛЬКО собирает?
ни разу не приходилось разбирать obj файлы, линкер собирает из них только то, что уже явно указано в размещении, без каких-либо вычислений?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Sep 3 2011, 20:32
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(toweroff @ Sep 4 2011, 00:20) *
без каких-либо вычислений?
Конечно же - вычисляет. Вычисления, само-сабой, без наворотов.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 3 2011, 20:40
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(Палыч @ Sep 4 2011, 00:32) *
Конечно же - вычисляет. Вычисления, само-сабой, без наворотов.

я и говорю - относительные размещения
не вычисляет же выражения... компилятору - компиляторово
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 3 2011, 23:11
Сообщение #24


I WANT TO BELIEVE
******

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



Хехе, а интересный же вопрос, а! Особенно вариант как у ТС, когда указатель преобразовывается в int и пошло-поехало...
И, судя по отзывам, разные компиляторы по разному ведут себя.. А как правильно?
Ну и интереснее всего тут именно роль линкера.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
skripach
сообщение Sep 4 2011, 00:28
Сообщение #25


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
А как правильно?

Сейчас подойдет товарищ из Риги и всем всё объяснит. biggrin.gif


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Sep 4 2011, 00:45
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(skripach @ Sep 4 2011, 04:28) *
Сейчас подойдет товарищ из Риги и всем всё объяснит. biggrin.gif

он мне тоже из ответов задолжал немного biggrin.gif, если, конечно, будет желание
Но, такое ощущение, что он ловит омаров/раков/креветок или что там в отпуске делают.. sm.gif

UPD

Хорош прикалываться. Не дай Бог чего bb-offtopic.gif
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 4 2011, 00:59
Сообщение #27


I WANT TO BELIEVE
******

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



Цитата
Сейчас подойдет товарищ из Риги и всем всё объяснит.
Да. Я тоже о нём подумал)))))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
ISK2010
сообщение Sep 4 2011, 06:43
Сообщение #28


Местный
***

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



А что в выражении u32 * b = (u32 *)( (u32)(&a) ) вы считаете извращением? Я таким уже давно пользуюсь и успешно.
Насчет неправильной формулы - это я случайно когда писал тут вставил адрес периферии, для которой, кстати, я также через битбенд флаги всякие юзаю.




Сейчас временно сделал во так:
Код
MB_ByteCoils MB_Coils[MB_QtyBytesCoils]__attribute__((at(0x2004000))); // массив структур флагов
  
  u32 MB_Addr_BB_Coils = 0x220C8000; // численно адрес зеркала
  
  
  
  /*А использую так:*/
  
<p>   *(u32*)(MB_Addr_BB_Coils + NumberOfFlag*4) = 1;
Ну и соответственно на асме это выглядит так:

Код
0x08001AB2 6812      LDR      r2,[r2,#0x00]

0x08001AB4 F04F0101  MOV      r1,#0x01

0x08001AB8 F8421020  STR      r1,[r2,r0,LSL #2]
Куда меньше чем при использовании масок и т.п.

Сообщение отредактировал ISK2010 - Sep 4 2011, 06:58
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 4 2011, 08:51
Сообщение #29


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 4 2011, 10:51
Сообщение #30


Местный
***

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



Читаете что я пишу? Всякие там вычисления номера структуры и номера флага в ней раньше как-раз и использовались. А используя битбендинг все превратилось в одну строку на С. При этом использую макрос #define MB_FLAG_SET(a) (*(u32*)(MB_Addr_BB_Coils + a*4) = 1). Ну и что тут не нравится? Зря вы так боитесь приведения типов. Язык не то что "позволяет", а обязан такое позволять. Я к примеру ненавижу использовать union.
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 July 2025 - 23:56
Рейтинг@Mail.ru


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