Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Чесно не должно работать нигде. Ты смотри как присваиваешь unsigned char pointer = (unsigned char *)&count_key;
Отправлено
VasilyS
(80.92.96.25)
12 июля 2010, г. 14:46
В ответ на:
Разбил мозг C++ с указателем.
отправлено
Novichok
12 июля 2010, г. 14:43
Составить ответ
|
Вернуться на конференцию
Ответы
В MCS-51 без внешнего ОЗУ всё адресное пространство - 256 ячеек. Поэтому даже такое безграмотное выражение работало (с предупреждением о несоответствии типов). Естествено, в AVR, ARM даже с предупреждением не прокатит (не хватает разрядности).
-
Юрий_СВ
(12.07.2010, 15:26:35
91.214.248.66
,
пустое
,
ссылка
)
8051 серьезный дядя. У него что, внешней шины для подключения RAM не предусмотрено? Или вы где-то увидели намек на крошечную модель памяти? Кроме того, у указателей-51 часто длина заведомо больше чем указываемая область потому что там теги области указываемой памяти pdata, xdata, idata, data. Но не в этом дело. Нормальный компилятор как Иар должен дать еррор на такую вопиющую. Error[Pe144]: a value of type "unsigned char *" cannot be used to initialize an entity of type "unsigned int"
-
VasilyS
(12.07.2010, 15:35:57
80.92.96.25
,
пустое
)
Меня интересовала только базовая память. До 128 байт. И, повторю, Keil-51 компилил правильно, х...{+}(+)
-
Novichok
(12.07.2010, 15:53:8
109.232.106.36
, 761 байт)
Я же уточнил "без внешнего ОЗУ" (!). Карту адресного пространства я привёл по ссылке. В этом случае для адресации достаточно 1 байта. (старший байт при преобразовании типа от 8 к 16 разрядов компилятор замяет нулём). А принимать ли к исполнению такое выражение - зависит только от строгости конкретного компилятора (т.к. сторого говоря выражение безграмотное).
-
Юрий_СВ
(12.07.2010, 15:48:34
217.12.195.250
,
пустое
)
А я сразу напесал: Чесно не должно. А на побочных эффектах все можно сделать.
-
VasilyS
(12.07.2010, 16:02:10
80.92.96.25
,
пустое
)
В обычном Си Keil-51 работает железно. Можете попробовать. Но дело не в этом.
-
Novichok
(12.07.2010, 14:52:56
109.232.106.36
, 208 байт)
Ну вот так проще всего. Не знаю что у тебя за тип у count_key. unsigned int pointer = (unsigned int)(unsigned char *)&count_key;
-
VasilyS
(12.07.2010, 14:55:30
80.92.96.25
,
пустое
)
Огромное спасибо! Работает! А где бы инфу по Си++ почитать, не подскажете?
-
Novichok
(12.07.2010, 14:58:34
109.232.106.36
,
пустое
)
Читайте обычный С : 1)указатели 2)преобразование типов. В доке на контроллер : 1)адресное пространство 2)набор команд (для работы с памятью) и способы адресации.
-
Юрий_СВ
(12.07.2010, 15:41:13
91.214.248.66
,
пустое
)
Кстати, не факт, что здесь int вообще уместен.Не знаю разрядность int компилятора ARM, но если 16 разрядов - то может работать неправильно. т.к. у ARM адресация 32-х разрядная.
-
Юрий_СВ
(12.07.2010, 16:01:23
91.214.248.66
,
пустое
)
Имеется в виду ARM-7m (Cortex-M3). Int - 32-а бита.
-
Novichok
(12.07.2010, 16:20:10
109.232.106.36
,
пустое
)
Их вагон в инете. Страустрап как его отец. Можно Подбельского, или из цикла С++ Для Чайников :-) Только этот случай не С++, а самый обычный С. Просто тот старый твой компилер сделал то, что делать нелзя.
-
VasilyS
(12.07.2010, 15:02:27
80.92.96.25
,
пустое
)
Понятно. Но он (Keil-51) Warning'и выдавал именно на эти операции. Однако, компилил.
-
Novichok
(12.07.2010, 15:05:38
109.232.106.36
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 234:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru