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

запись значений в память по определенному адресу

Собственно есть такой вопрос, нужно во внешнюю память записывать конфигурациионые значения.

как записать значениt в ячейку с адресом, например 0x8000 0100?

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


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

Собственно есть такой вопрос, нужно во внешнюю память записывать конфигурациионые значения.

как записать значениt в ячейку с адресом, например 0x8000 0100?

 

 

* ((unsigned long *) 0x80000100) = value;

Не забывать о выравнивании.

 

Или описать структуру со множеством нужных полей и обращаться к ней

 

struct confdata {
unsigned long expirationdate;
unsigned char color;
};

((struct confdata *) 0x80000100)->color = value;

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


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

((struct confdata *) 0x80000100)->color = value;

Или описать extern переменную типа struct confdata, а в скрипте линкера задать ей конкретный адрес. Линкер может следить, чтобы в это место не попали другие переменные. В случае указателя придется думать об этом вручную.

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


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

Или описать extern переменную типа struct confdata, а в скрипте линкера задать ей конкретный адрес. Линкер может следить, чтобы в это место не попали другие переменные. В случае указателя придется думать об этом вручную.

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

Как я понял, линкеру обычно про external память ничего неизвестно - так что конфликна не будет...

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


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

Если просто писать/читать память, то линкеру можно ничего и не говорить. А если надо память резервировать, да еще и не под одну структуру (массив или что еще) - то тогда линкер этому надо обучить.

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


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

* ((unsigned long *) 0x80000100) = value

А на самом деле вместо unsigned long надо писать тип, который имеет VALUE.

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


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

А на самом деле ...

На самом деле в 99,9999% запись по конкретным адресам RAM совершенно неразумное решение.

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


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

На самом деле в 99,9999% запись по конкретным адресам RAM совершенно неразумное решение.

 

Увы, автор не поделился своими сокровенными мыслями, зачем ему эту нужно.

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


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

Очень бывает нужно. К примеру, когда в даташите находишь адрес регистра, а в соотв. *.inc, который офигенных размеров искать как там обозвали этот регистр - ну долго. Плюешь на все и пишешь от руки. Быстро и удобно.

Кроме того, мода людей присваивать ну очень длинные имена, которые ну никак не помогают - дурь.

 

Цифра - наше всё. Букву оставим гуманитариям.

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


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

Очень бывает нужно. К примеру, когда в даташите находишь адрес регистра, а в соотв. *.inc, который офигенных размеров искать как там обозвали этот регистр - ну долго.

Ctrl+F не работает?

 

Кроме того, мода людей присваивать ну очень длинные имена, которые ну никак не помогают - дурь.

Угу, дурь. Но никто не заставляет использовать хидеры производителя. Можно отредактировать или написать свои.

 

Цифра - наше всё. Букву оставим гуманитариям.

Очень неразумный подход.

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


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

Ctrl+F не работает?

Уже сточилась. Честно.

Можно отредактировать или написать свои.

Дешевле их не писать. А когда они готовые - грех не пользоваться. Но почему-то часть имен совпадает с даташитнымми, а часть - ну никак не совпадает. Присобачивают пару буковок и мучаешься гадать что именно искать.

Очень неразумный подход.

Если бы все поступали разумно, программисты и прочая были бы не нужны.

 

Речь идет "о по-быстрому". Исключительно. Когда вот он адрес перед глазами, а превратить его в слово - это надо отыскать хидер, загрузить, отыскать, копи-пасте сделать....

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


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

Дешевле их не писать. А когда они готовые - грех не пользоваться. Но почему-то часть имен совпадает с даташитнымми, а часть - ну никак не совпадает. Присобачивают пару буковок и мучаешься гадать что именно искать.

Подобные проблемы мне встречались исключительно у Texas Instruments. Не о них речь?

Написать хидер - не бог весть какая работа при минимальной автоматизации процесса.

 

Речь идет "о по-быстрому". Исключительно. Когда вот он адрес перед глазами, а превратить его в слово - это надо отыскать хидер, загрузить, отыскать, копи-пасте сделать....

Беда в том, что сделанное "по-быстрому" таким навсегда и остается.

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


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

Чертов даташит от Атмел защищен и из него невозможно скопировать текст. Ваще, ё-мое.

Как раз у Техаса я сам писал хидеры. И горя не знал. Но там меня никто никуда не торопил и рядом сидели монстры Си, которым бы я мог "по-быстрому" задать вопрос.

 

У меня очень часты задачи не глобального характера, а сиюминутные, умирающие после первого удачного запуска. К примеру, сделать снимок какого-нибудь протокола обмена для дальнейшего разбора. Сделал - и забыл. Ровно на один раз. Неужели программу буквами на клавиатуре писать?

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


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

находишь адрес регистра....

Трм буквы RAM в моем посте видели? Тогда к чему о "регистрах"? И по любому обращение по магическим цифирям и к регистрам есть моветон.

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


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

Чертов даташит от Атмел защищен и из него невозможно скопировать текст. Ваще, ё-мое.

Что-то я не припомню у них каких-то особо страшных несоответствий в названиях регистров между даташитом и хидерами. Идиотские префиксы не считаются.

 

У меня очень часты задачи не глобального характера, а сиюминутные, умирающие после первого удачного запуска. К примеру, сделать снимок какого-нибудь протокола обмена для дальнейшего разбора. Сделал - и забыл. Ровно на один раз. Неужели программу буквами на клавиатуре писать?

Да. ИМХО, лучше приучить себя всегда и все делать правильно.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...