![]() |
|
Модераторы: PILOT, ManiaK, Mazzi |
![]()
|
|
| seryoga |
|
|||
|
Unregistered |
Господа программисты, подскажите пожалуйста: как завести переменную в Си (IAR) с конкретным адресом в SRAM.
|
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Не имею Яра, потому дам просто наводку: лезешь в include'ы и смотришь, как там забиты переменные-регистры. Они должны быть определены по адресам. Например в Keil'е делают вот так:
Байтовая переменная DPL находится по адресу 0x82. Что-нибудь вроде этого должно быть и в Яре. |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Не совсем так.
Там по другому будет, там нужно указать, например :
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Дабы темы не плодить, спрошу своё....
PILOT, Так и не смог додумкать твой код((( А в чём там смысл? И ещё такое.... Даже не знаю как вы отреагируете... У бита есть адрес??? Ну например есть байт по адресу 0х11, а какой будет адрес скажем у второго бита? |
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
А смысл там в том, что байт можно представить в виде структуры (набора битов). адрес порта B = 0х18h
PILOT в своем коде ответил на эти твои вопросы, а именно, что конкретный бит имеет адрес только в своем байте. UniBomb, тебе бы книжечку да по Си в ручки взять... Это сообщение отредактировал(а) Metal_Heart - 6.4.2007, 08:59 -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Metal_Heart,
Ох, да книжечки, да по Си то в ручках то я держал, всё что делается то я понял. Только вот смысл я не понял... А это разные вещи)) Например, судя по его коду - как обявить переменную типа int по адресам - 0x0100 и 0x0101(два байта - две ячейки памяти)? И как можно представить байт я тоже знаю)) Я на самом деле умнее, чем кажусь)) Только ты ответь на мой вопрос, а то давить интелектом не каждый может, но каждый может сказать фразу типа твоей:
|
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
union - это объединение
смысл-то здесь очень прост: одно и тоже число можно представить и как float, и как int и пр. ... пример:
как с битами, см. пример Пилота. Примечание: "число" имелось ввиду 1 или несколько байт вот ключевые слова по данной теме: структуры, битовые поля, объединения Это сообщение отредактировал(а) Metal_Heart - 9.4.2007, 11:59 -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
вместо всего этого:
напиши кратко, что конкретно тебе нужно/непонятно, пожалуйста. -------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Metal_Heart,
Если уж быть совсем точным, то union - это размещение нескольких переменных по одному адресу (в одной и той жке области памяти). И ксати говоря, union не работает у меня в WinAVR, пишет что то типа необъявленное имя. Ну да ладно. Только это все мне не нужно. Меня интересует вот что - как можно разместить переменную в нужной мне области памяти (по нужному мне адресу)? Ну например - у меня есть переменная типа char. В зависимости от компилятора и объёма программы, эта переменная будет распологаться в разных ячейках памяти. Я же хочу, что бы эта переменная, независимо ни от чего распологалась по одному и тому же адресу, причём я хочу задавать этот адрес. Типа так: ------------------------------------------------------ 0x0001:| какие то левые данные | ------------------------------------------------------ 0x0002:| какие то левые данные | ------------------------------------------------------ 0x0003:| какие то левые данные | ------------------------------------------------------ 0x0004:| тут моя переменная типа char | ------------------------------------------------------ 0x0005:|какие то левые данные | ------------------------------------------------------ ... ... ... ... |
|||
|
||||
| Metal_Heart |
|
||||||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
а такое объявление WinAVR тоже не поддерживает:
издеваешься? Если нет, то размести-ка мне по одному и тому же адресу хотя бы эти две переменные:
-------------------- не стыдно учиться, а стыдно не учиться |
||||||
|
|||||||
| UniBomb |
|
||||||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Metal_Heart,
Раз уж я не получу ответа на свой вопрос, то отвечу на твой:
union - грубо говоря какой то ячейке памяти (или группе ячеек) присваивает несколько имён. Вот например цитата из той же википедии (первое предложение на странице по твоей ссылке):
т.е. все переменные, объявленные в union будут иметь одно и тоже значение. Вот например такое:
В памяти будет распологаться так: ------------------------- | int i | ------------------------- |char x[0]|char x[1]| ------------------------- Соответсвенно в переменной х[0] будет находится старший байт переменной i, а в переменной х[1] соответсвенно младший. И при изменении какого либо чара повлечёт за собой изменение и инта. Раз никто не заметил моей оплошности, поправил по-тихому)) Это сообщение отредактировал(а) UniBomb - 13.4.2007, 15:41 |
||||||
|
|||||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
PILOT, Metal_Heart, так какая директива компилятора размещает мою переменную по конкретному адресу??
|
|||
|
||||
| Metal_Heart |
|
|||
|
а почему бы и нет? ![]() ![]() Профиль Группа: Участник Сообщений: 728 Регистрация: 31.3.2005 Где: Москва Репутация: 1 Всего: 12 |
название_переменной @ адрес_переменной
-------------------- не стыдно учиться, а стыдно не учиться |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
так мой ВинАВР ругается, при использовании этой переменной он говорит, что она необъявлена(((
|
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Не рекомендую WinAVR, его коды как минимум в 1.5 раза больший объем занимают, чем исполняемый файл полученный IAR из того же исходника.
Бесплатный сыр бывает только в мышеловке или в архиве с ОС Линукс. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
На безрыбье и килька рыба. На лицензионный иар начальство пока не хочет раскошеливаться, а хорошего кряка я так и не нашёл((( |
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
Значит серьезно не искал. Поверь стоимость IAR не супер большая, а поддержка и спокойная работа стоят значительно большего. СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Ну цены иара на сайте иара я не нашёл, а в аргуссофте продают его по 77 килорублей(((( А насчёт кряков - скачал штук 6 и не подошёл ни один(((
|
|||
|
||||
| PILOT |
|
|||
|
производство ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2724 Регистрация: 4.4.2002 Где: москва Репутация: 20 Всего: 54 |
о чем и речь, что 77000 это просто копейки, меньше 3000$, даже в масштабе ПБЮЛ это ничтожно малая сумма. Очень советую купить оригинальную версию, проблем будет решено на значительно большую сумму. А с точки зрения разработки будут доступны и средства отладки через А-Студию и библиотеки и т.п.
СУВ. -------------------- тут могла быть Ваша реклама... |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
хм...
|
|||
|
||||
![]()
|
| Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |