Jump to content

    

Размещение переменой по заданному адресу и ее значение после ресета

10 hours ago, jcxz said:

Вы же переменным в программе не задаёте абсолютных адресов, надеюсь?

Обычно нет. Но есть и в этом случае исключения. Одно из них лежит на поверхности. Им пользуются все. И вы тоже. Только забываете об этом, т.к. это сделано кем-то до вас, вы же просто пользуетесь этим не задумываясь, и всё работает.

Имеется ввиду адреса регистров управления ядром и периферией контроллера. Они расположены в адресном пространстве по строго заданным адресам. И в *.h-файле описания контроллера они определяются через указатели, приведением целого числа, равного базовому адресу периферийного устройства, к типу указателя на структуру этого устройства.

В итоге, если раскрыть все дефайны, получится конструкция типа:

// Обнуляем счётный регистр таймера:
// TIMER_TypeDef - псевдоним типа структуры таймера
// 0x40078000 - базовый адрес таймера
// CNT - счётный регистр таймера
((TIMER_TypeDef *) 0x40078000)->CNT=0;

 

Edited by Darth Vader

Share this post


Link to post
Share on other sites
19 часов назад, Darth Vader сказал:

Обычно нет. Но есть и в этом случае исключения. Одно из них лежит на поверхности. Им пользуются все. И вы тоже. Только забываете об этом, т.к. это сделано кем-то до вас, вы же просто пользуетесь этим не задумываясь, и всё работает.

Имеется ввиду адреса регистров управления ядром и периферией контроллера.

Отучайтесь говорить за других! Вы не знаете как сделано у других. И даром ясновидения, как видно, не обладаете.

Во-первых: это не "сделано кем-то до меня", структуры, описывающие периферию, я делаю всегда сам. Для каждого используемого МК.

Во-вторых: если Вы видите только один способ сделать что-то, то это не значит, что другие люди не видят иных способов сделать это. Описание периферии можно точно также натягивать на адресное пространство МК посредством командного файла линкёра. А можно и задавать абсолютные адреса для таких структур. Я делал и так и так - когда как мне было удобнее.

Share this post


Link to post
Share on other sites

Итог: настоящие джентльмены так не делают, но если очень надо - то можно.

На том вопрос о целесообразности размещения объектов в адресном пространстве по абсолютным адресам вручную предлагаю закрыть.

А то получается дискуссия типа:

- скажите, где можно купить вкусное пиво?

- не покупай его и не пей, оно вредно для здоровья.

Share this post


Link to post
Share on other sites

Тут можно ещё добавить, что в загрузчике U-Boot, да и других, выполняющих инициализацию оборудования через отображённые в адресное пространство регистры подобный подход - совершенно нормальное явление.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this