| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Адрес переменной |
| Автор: seryoga 19.7.2005, 09:05 |
| Господа программисты, подскажите пожалуйста: как завести переменную в Си (IAR) с конкретным адресом в SRAM. |
| Автор: ManiaK 19.7.2005, 11:22 | ||
Не имею Яра, потому дам просто наводку: лезешь в include'ы и смотришь, как там забиты переменные-регистры. Они должны быть определены по адресам. Например в Keil'е делают вот так:
Байтовая переменная DPL находится по адресу 0x82. Что-нибудь вроде этого должно быть и в Яре. |
| Автор: PILOT 19.7.2005, 17:54 | ||
| Не совсем так. Там по другому будет, там нужно указать, например :
СУВ. |
| Автор: UniBomb 5.4.2007, 13:12 | ||
Дабы темы не плодить, спрошу своё....
PILOT, Так и не смог додумкать твой код((( А в чём там смысл? И ещё такое.... Даже не знаю как вы отреагируете... У бита есть адрес??? Ну например есть байт по адресу 0х11, а какой будет адрес скажем у второго бита? |
| Автор: UniBomb 6.4.2007, 22:21 | ||
| Metal_Heart, Ох, да книжечки, да по Си то в ручках то я держал, всё что делается то я понял. Только вот смысл я не понял... А это разные вещи)) Например, судя по его коду - как обявить переменную типа int по адресам - 0x0100 и 0x0101(два байта - две ячейки памяти)? И как можно представить байт я тоже знаю)) Я на самом деле умнее, чем кажусь)) Только ты ответь на мой вопрос, а то давить интелектом не каждый может, но каждый может сказать фразу типа твоей:
|
| Автор: Metal_Heart 9.4.2007, 11:03 | ||
| union - это объединение смысл-то здесь очень прост: одно и тоже число можно представить и как float, и как int и пр. ... пример:
как с битами, см. пример Пилота. Примечание: "число" имелось ввиду 1 или несколько байт вот ключевые слова по данной теме: структуры, битовые поля, объединения |
| Автор: Metal_Heart 9.4.2007, 12:00 | ||
вместо всего этого:
напиши кратко, что конкретно тебе нужно/непонятно, пожалуйста. |
| Автор: UniBomb 10.4.2007, 19:59 |
| Metal_Heart, Если уж быть совсем точным, то union - это размещение нескольких переменных по одному адресу (в одной и той жке области памяти). И ксати говоря, union не работает у меня в WinAVR, пишет что то типа необъявленное имя. Ну да ладно. Только это все мне не нужно. Меня интересует вот что - как можно разместить переменную в нужной мне области памяти (по нужному мне адресу)? Ну например - у меня есть переменная типа char. В зависимости от компилятора и объёма программы, эта переменная будет распологаться в разных ячейках памяти. Я же хочу, что бы эта переменная, независимо ни от чего распологалась по одному и тому же адресу, причём я хочу задавать этот адрес. Типа так: ------------------------------------------------------ 0x0001:| какие то левые данные | ------------------------------------------------------ 0x0002:| какие то левые данные | ------------------------------------------------------ 0x0003:| какие то левые данные | ------------------------------------------------------ 0x0004:| тут моя переменная типа char | ------------------------------------------------------ 0x0005:|какие то левые данные | ------------------------------------------------------ ... ... ... ... |
| Автор: Metal_Heart 11.4.2007, 15:42 | ||||||
а такое объявление WinAVR тоже не поддерживает:
издеваешься? Если нет, то размести-ка мне по одному и тому же адресу хотя бы эти две переменные:
|
| Автор: UniBomb 11.4.2007, 21:08 | ||||||
| Metal_Heart, Раз уж я не получу ответа на свой вопрос, то отвечу на твой:
union - грубо говоря какой то ячейке памяти (или группе ячеек) присваивает несколько имён. Вот например цитата из той же википедии (первое предложение на странице по твоей ссылке):
т.е. все переменные, объявленные в union будут иметь одно и тоже значение. Вот например такое:
В памяти будет распологаться так: ------------------------- | int i | ------------------------- |char x[0]|char x[1]| ------------------------- Соответсвенно в переменной х[0] будет находится старший байт переменной i, а в переменной х[1] соответсвенно младший. И при изменении какого либо чара повлечёт за собой изменение и инта. Раз никто не заметил моей оплошности, поправил по-тихому)) |
| Автор: UniBomb 23.5.2007, 19:01 |
| PILOT, Metal_Heart, так какая директива компилятора размещает мою переменную по конкретному адресу?? |
| Автор: Metal_Heart 24.5.2007, 12:52 |
| название_переменной @ адрес_переменной |
| Автор: UniBomb 24.5.2007, 16:41 |
| так мой ВинАВР ругается, при использовании этой переменной он говорит, что она необъявлена((( |
| Автор: PILOT 25.5.2007, 00:42 |
| Не рекомендую WinAVR, его коды как минимум в 1.5 раза больший объем занимают, чем исполняемый файл полученный IAR из того же исходника. Бесплатный сыр бывает только в мышеловке или в архиве с ОС Линукс. СУВ. |
| Автор: UniBomb 25.5.2007, 21:32 | ||
На безрыбье и килька рыба. На лицензионный иар начальство пока не хочет раскошеливаться, а хорошего кряка я так и не нашёл((( |
| Автор: PILOT 26.5.2007, 08:39 | ||
Значит серьезно не искал. Поверь стоимость IAR не супер большая, а поддержка и спокойная работа стоят значительно большего. СУВ. |
| Автор: UniBomb 27.5.2007, 00:14 |
| Ну цены иара на сайте иара я не нашёл, а в аргуссофте продают его по 77 килорублей(((( А насчёт кряков - скачал штук 6 и не подошёл ни один((( |
| Автор: PILOT 28.5.2007, 23:26 |
| о чем и речь, что 77000 это просто копейки, меньше 3000$, даже в масштабе ПБЮЛ это ничтожно малая сумма. Очень советую купить оригинальную версию, проблем будет решено на значительно большую сумму. А с точки зрения разработки будут доступны и средства отладки через А-Студию и библиотеки и т.п. СУВ. |
| Автор: UniBomb 29.5.2007, 18:29 |
| хм... |