|
|
  |
Определение указателя |
|
|
|
Sep 3 2011, 13:07
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата А, я то - попробовал в IAR для AVR... И, кстати, - не работает и в таком, упращенном примере. ARMовый 6-й IAR компили-т без умножения...
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Sep 4 2011, 06:43
|

Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Sep 4 2011, 08:51
|

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

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