Перейти к содержанию

    

Разъясните эту строчку:

((GPIO_TypeDef *) GPIOF_BASE)

Понимаю, что структура, понимаю что указатель, но как-то странно написано.

обычно пишут так: char *p;

А тут заморочено, то ли присвоение значения указателю, то ли что.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

указатель на структуру с адресом GPIOF_BASE . У этих из MCD team всё как-то так сделано. Надо смириться или самому всё переписать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
37 минут назад, tremor сказал:

Понимаю, что структура, понимаю что указатель, но как-то странно написано.

Явное приведение целочисленной константы GPIOF_BASE к типу "указатель на GPIO_TypeDef". Что именно тут странного?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обычный подход к взаимодействию с железом, регистры которого проецируются в адресное пространство. Для чтения/записи такого регистра необходим механизм чтения/записи по фиксированному физическому адресу, в данном случае GPIOF_BASE. Точнее, по этому адресу может быть расположен и  ряд регистров, определяемых структурой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вас видать путает один #define

вот так возможно станет понятнее:

((*GPIO_TypeDef)0x48001400 )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
On 11/7/2018 at 9:10 PM, mcheb said:

указатель на структуру с адресом GPIOF_BASE . У этих из MCD team всё как-то так сделано. Надо смириться или самому всё переписать.

Так вообще-то у всех написано. Как бы вы это переписали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, slavka012 сказал:

Так вообще-то у всех написано.

Отучайтесь говорить за всех. Если Вы знаете только один способ чего-то, это совсем не значит, что нет людей знающих больше Вас.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, jcxz said:

Отучайтесь говорить за всех. Если Вы знаете только один способ чего-то, это совсем не значит, что нет людей знающих больше Вас.

Хехе. Понты дороже денег? Как же вы еще описываете группу хардверных регистров по определенному адресу?

Отучайтесь делать ценные указания, приучайтесь отвечать по существу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, slavka012 said:

Так вообще-то у всех написано. Как бы вы это переписали?

Полагаю, средствами линкера на этапе статической разметки памяти. Также, как и под обычные переменные при размещении по желаемым областям адресного пространства.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, slavka012 сказал:

Хехе. Понты дороже денег? Как же вы еще описываете группу хардверных регистров по определенному адресу?

Например: EXTERN volatile HWREG_MAP(GPIO) GPIO[16] @ 0x48028000;

Либо в скрипте компоновщика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 minutes ago, Arlleex said:

Полагаю, средствами линкера на этапе статической разметки памяти. Также, как и под обычные переменные при размещении по желаемым областям адресного пространства.

Нда, ну я понимаю, что это можно сделать, но решение это на порядок более убогое чем дефайны. Мало того, что информация о регистрах становится размазана по бОльшему количеству файлов, так что ее становится труднее проверять и поддерживать, так еще она и находится в не переносимой форме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 hours ago, slavka012 said:

Так вообще-то у всех написано. Как бы вы это переписали? 

Поддерживаю!!! NXP, ST, Microchip, SiliconLabs делают именно так.

Что за бред с линковщиком, вы вообще о чем? при условии что у каждого компилятора свои особености работы с линковщиком!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 minutes ago, jcxz said:

Например: EXTERN volatile HWREG_MAP(GPIO) GPIO[16] @ 0x48028000;

Это что за синтаксис, @? Хорошо если ваш компилятор это понимает, но это непереносимый код... В чьей библиотеке так написано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, slavka012 сказал:

Это что за синтаксис, @? Хорошо если ваш компилятор это понимает, но это непереносимый код...

Это IAR. Явное задание имени секции или абсолютного адреса для объекта данных. И в других компиляторах есть аналоги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Замечательно. Аналоги, конечно, есть, но непереносимые. В чьих либах так написано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация