Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
не указатели, а sizeof
Отправлено
ReAl
06 сентября 2007 г. 00:32
В ответ на:
IMHO, только через хук с выделением сегмента и помещением туда массива. Но(+)
отправлено Vit 06 сентября 2007 г. 00:24
sizeof( переменная ) должен вернуть размер переменной в байтах...
а возвращает этот sizeof значение типа size_t
а этот тип typedef-нут на int
а int 16-битный
Приплыли - объект не может содержать больше 32767 байт.
Составить ответ
|
Вернуться на конференцию
Ответы
Интересно, а каковы были мотивы делать size_t знаковым? Понимаю, что вопрос риторический, но может есть объяснение?
—
Сергей Борщ
(06.09.2007 09:25:6
217.198.224.239
,
пустое
)
Тьху, ступил где-то... (+)
—
ReAl
(06.09.2007 14:45:29
89.162.152.53
, 1000 байт)
Я об том же
—
Vit
(06.09.2007 19:01:21
83.170.240.226
,
пустое
)
Для опций процессора -v2, -v3, -v4, -v5, и -v6 ptrdiff_t всегда является signed long. Почему IAR не даёт пользоваться __hugeflash для процессоров без RAMPZ и ELPM - непонятно.
—
Леонид Иванович
(06.09.2007 15:43:30
87.252.227.57
,
пустое
)
Внутреннее несовпадение терминологии между кусками компилятора :-) "какая же она HUGE, если 16-битного адреса хватает" :-)
—
ReAl
(06.09.2007 17:45:32
89.162.152.53
,
пустое
)
Так он и не знаковый. Вот выдержка из руководства:
—
Леонид Иванович
(06.09.2007 11:30:16
87.252.227.57
, 272 байт)
Тогда абсолютно непонятно, почему нельзя создать массив в 33К без извращений с huge_flash. Кстати, а как у IAR с массивом в ОЗУ для меги64 - если по простецки, без никаких нестандартных заклинаний?
—
ReAl
(06.09.2007 14:04:37
89.162.152.53
,
пустое
)
С ОЗУ не пробовал, нет такого количество ОЗУ :) Судя по документации, только __huge позволяет размещать объекты более 32К.
—
Леонид Иванович
(06.09.2007 15:47:42
87.252.227.57
,
пустое
)
Ну для пробной компиляции ОЗУ на плате можно и не иметь :-)
—
ReAl
(06.09.2007 17:46:10
89.162.152.53
,
пустое
)
Оно и на наглое прибавление к индексу 32768 в каких-то условиях ругалось
—
Vit
(06.09.2007 00:52:50
77.123.148.33
,
пустое
)
вот пример на массив 33000 байт (+)
—
a2005z
(06.09.2007 00:41:15
212.8.34.110
, 182 байт)
Охотно верю. Но это относится к расширению языка через hugeflash, которое *не* *отработало* у вопрошавшего. А если в рамках стандарта - то как я написал.
—
ReAl
(06.09.2007 01:05:20
89.162.152.53
,
пустое
)
Вопрос был - как сделать. С ключем -v3..-v5 можно решить этот вопрос
—
a2005z
(06.09.2007 01:26:30
212.8.34.110
,
пустое
)
--cpu=m64 соответствует -v3, но не это главное. Нужно, чтобы был разрешен регистр RAMPZ, которого в m64 нет.
—
Леонид Иванович
(06.09.2007 02:27:57
87.252.227.57
,
пустое
)
и заменой проца!! Если следовать инструцкции
—
чокнутый
(06.09.2007 01:58:29
212.58.192.14
,
пустое
)
и какое отношение это имеет к невозможности его размещения в Меге64?
—
чокнутый
(06.09.2007 00:44:30
212.58.192.14
,
пустое
)
наоборот, бери и вставляй в мегу64.
—
a2005z
(06.09.2007 00:58:32
212.8.34.110
,
пустое
)
"Error[Pa043]: the keyword "__hugeflash" is not available with the current settings C:\work\test\main.cpp 3 " & Error[Pe095]: array is too large C:\work\test\main.cpp 3
—
чокнутый
(06.09.2007 01:00:27
212.58.192.14
,
пустое
)
test.с (+)
—
a2005z
(06.09.2007 01:03:27
212.8.34.110
, 1304 байт)
какой тип процессор выбран? Вопрос был - почему -v m64 не дает более 32 k
—
чокнутый
(06.09.2007 01:05:52
212.58.192.14
,
пустое
)
-v3. А для -v m64 IAR оставляет память small, что согласно докум. (р141) для указателя используется signed int. Это и дает ограничение на 32768
—
a2005z
(06.09.2007 01:17:46
212.8.34.110
,
пустое
)
а что нам собственно REal показывал?
—
чокнутый
(06.09.2007 01:19:5
212.58.192.14
,
пустое
)
size_t не всегда привязан к int. читаем на p.142 table 35
—
a2005z
(06.09.2007 01:23:15
212.8.34.110
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
вычтите два из трёх, получится:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru