|
Размер unsigned int или int Keil4.5 |
|
|
|
Jun 2 2012, 11:17
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Добрый день, коллеги. Месяц использую LPC1768 и только сейчас с "ужасом" заметил, что под переменные unsigned int и int компилятор отводит по 4 байта. Использую среду Keil 4.5 и постоянно плююсь даже не по причине ее скудости, а по причине неудобности документации на нее и компилятор. Как установить "нормальный" размер этих типов данных размером в 2 байта? И второй вопрос. Я был уверен, что в Cortex-M3 отсутствует необходимость выравнивания разноразмерных типов данных. Об этом написано тутТем не менее, у себя в реале я этого не вижу. Если за однобайтовой переменной следует четырехбайтовая, то она все равно выравнивается по границе 32 разрядного слова, тоесть остается неиспользуемый промежуток в 3 байта. Что тут не так?
|
|
|
|
|
 |
Ответов
|
Jun 7 2012, 06:18
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(andrewlekar @ Jun 7 2012, 07:45)  Ребята, я вас умоляю, не делайте так в рабочем коде. Придёт после вас человек и не поймёт нифига, что вы там наоптимизировали. А при чем тут придет и не поймет  Я беру к себе на работу только тех, кто способен понимать и разобраться. Тогда и Вы ответьте на вопрос: зачем тогда столько "фишек" и примочек в компиляторе? Вы этим не пользуетесь? Я пользуюсь. И максимально, что бы был максимально эффективный код, или максимально эффективное решение задачи или еще что-то в этом роде, но максимально эффективное. Почему публика привратно в основном понимает эту суть. если я спросил насчет упаковки переменных, почему -т о в основном у публики сложилось сразу впечатление, что я возьму тупо все данные упакую в кирпич. И начались советы по поводу эффективности такого использования и т.д. и т.п. Ребята, я не собираюсь так делать  Во всяком случае ко всему подряд и без разбора "на всякий случай". Просто иногда гдето-то в определенном месте в связи с определенными условиями нужно применить такой метод. И не более. Речь не идет о како-то глобальности. Если Вы не пользуетесь всеми инструментами, которые вам дает средство разработки, Вы либо невысокой квалификации специалист, либо не можете предложить самое эффективное решение задачи, что собственно тоже говорит о квалификации. Все, что правильно понимается и правильно применяется- никак не отражается на рабочем коде в подавляющем большенстве случаев. И почти все так называемые "глюки" контроллеров или среды - это глюки того, кто не в полной мере этим владеет. Низкая квалификация. Цитата(ViKo @ Jun 7 2012, 08:53)  Герберд Шилдт. Полный справочник по C. (в электронном виде не имею на русском языке, в книжке на русском еще понятнее). Page 144 - 145 Все правильно, спасибо за цитату  Теперь попытаюсь Вам концептуально разъяснить в чем дело. Язык С был создан в эпоху микропроцессоров, у которых память была сегментирована. Это процессоры чуть до Intel286 и 386 и в том числе эти процессоры. Так вот, что бы получить доступ к исполнительному адресу, нужно было еще опереровать с сегментным регистром. Вполне вероятно, что два массива по 10 байт оказались бы на границе сегмента. Физически это последовательные адреса, но вот логические уже нет. И тогда последовательное обращение к 20 байтам на самом деле бы привело не к обращению к двум последовательным массивам, а в пределах одного секмента 64кБ. Давайте жить реалиями сегняшнего дня. В основном все уже имеют дело с микроконтроллерами с линейным адресным пространством. В пределах этого пространства компилятор не занимается перестановкой переменных и оптимизацией их размещения, если на то нет особых инструкций, указаний и т. д. Тоесть, компилятор оптимизирует код с обязательным требованием сохранения его идентичности по функционалу исходному коду и не занимается оптимизацией памяти данных
|
|
|
|
|
Jun 7 2012, 07:22
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861

|
Цитата(TAutomatic @ Jun 7 2012, 10:18)  Давайте жить реалиями сегняшнего дня. В основном все уже имеют дело с микроконтроллерами с линейным адресным пространством. В пределах этого пространства компилятор не занимается перестановкой переменных и оптимизацией их размещения, если на то нет особых инструкций, указаний и т. д. Тоесть, компилятор оптимизирует код с обязательным требованием сохранения его идентичности по функционалу исходному коду и не занимается оптимизацией памяти данных С первой частью заявления не соглашусь. Пространство хоть и линейно, но это не гарантирует одинаковое время доступа и одинаковое количество инструкций для доступа в ряде случаев. Соответственно оптимизатор вполне может перетасовать данные, если это обоснованно и даст какой-то профит. Более того, при определенных настройках тот же GCC может перекладывать данные из секции .data в .bss
--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
|
|
|
|
|
Jun 7 2012, 08:16
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798

|
Цитата(Dron_Gus @ Jun 7 2012, 10:22)  С первой частью заявления не соглашусь. Пространство хоть и линейно, но это не гарантирует одинаковое время доступа и одинаковое количество инструкций для доступа в ряде случаев. Соответственно оптимизатор вполне может перетасовать данные, если это обоснованно и даст какой-то профит.
Более того, при определенных настройках тот же GCC может перекладывать данные из секции .data в .bss Послушайте, чесговоря нет времени на такого рода диспут, но когда пишут совершенно непонятные для меня вещи, хочется всегда спросить: откуда вы это взяли?!!! Ну откуда вы взяли что время доступа может быть разны, если переменные размещаются в ОЗУ? Мы же не ведем речь о переменных и сразу о константах, которые размещаются в адресном пространстве кода? Ну я вот хочу знать того, чего не знаю. Покажите мне не на пальцах, а на конкретном примере. И еще, какие такие настройки компилера позволят две однородные переменные без инициализации на стадии линковки или обе с инициализацией, расположенные в одном программном модуле последовательно друг за другом разнести по разным секциям? Пожете показать, как Вы это делаете?
|
|
|
|
Сообщений в этой теме
TAutomatic Размер unsigned int или int Keil4.5 Jun 2 2012, 11:17 ohmjke Размер int равен размеру машинного слова. В данном... Jun 2 2012, 11:27 TAutomatic Цитата(ohmjke @ Jun 2 2012, 14:27) Размер... Jun 2 2012, 11:33 aaarrr Цитата(TAutomatic @ Jun 2 2012, 15:17) Ка... Jun 2 2012, 11:30 TAutomatic Цитата(aaarrr @ Jun 2 2012, 14:30) Исполь... Jun 2 2012, 11:43  TAutomatic Получается, все же есть в <stdint.h> - short... Jun 2 2012, 11:47  aaarrr Цитата(TAutomatic @ Jun 2 2012, 15:43) Пе... Jun 2 2012, 11:49   TAutomatic Цитата(aaarrr @ Jun 2 2012, 14:49) А вы п... Jun 2 2012, 11:53    prottoss Цитата(TAutomatic @ Jun 2 2012, 17:53) По... Jun 2 2012, 12:20     TAutomatic Цитата(prottoss @ Jun 2 2012, 15:20) Вам ... Jun 2 2012, 12:36    aaarrr Цитата(TAutomatic @ Jun 2 2012, 15:53) По... Jun 2 2012, 12:43     TAutomatic Цитата(aaarrr @ Jun 2 2012, 15:43) Сами р... Jun 2 2012, 12:54      scifi Цитата(TAutomatic @ Jun 2 2012, 16:54) Но... Jun 2 2012, 18:40     prottoss Цитата(aaarrr @ Jun 2 2012, 18:43) Кодuns... Jun 2 2012, 12:56      aaarrr Цитата(prottoss @ Jun 2 2012, 16:56) Наве... Jun 2 2012, 13:05       prottoss Цитата(aaarrr @ Jun 2 2012, 19:05) Нет. К... Jun 2 2012, 13:10       TAutomatic Цитата(aaarrr @ Jun 2 2012, 16:05) Нет. К... Jun 5 2012, 05:51 ohmjke ЦитатаМашинное слово — машиннозависимая и платформ... Jun 2 2012, 11:37 ohmjke Написали же, 2 байтовый это short. Jun 2 2012, 11:45 ohmjke short он не из stdint.h, а просто является частью ... Jun 2 2012, 11:50 ivainc1789 Не хотел создавать новую тему... Можно ли спросить... Jun 2 2012, 12:21 ohmjke Цитата(ivainc1789 @ Jun 2 2012, 16:21) Не... Jun 2 2012, 12:26 prottoss Цитата(ivainc1789 @ Jun 2 2012, 18:21) За... Jun 2 2012, 12:30 aaarrr Char может быть расположен как угодно - на скорост... Jun 2 2012, 13:28 prottoss Цитата(aaarrr @ Jun 2 2012, 19:28) Char м... Jun 2 2012, 13:50  aaarrr Цитата(prottoss @ Jun 2 2012, 17:50) С пе... Jun 2 2012, 14:02   prottoss Цитата(aaarrr @ Jun 2 2012, 20:02) Объясн... Jun 2 2012, 14:23 esaulenka Я бы предложил не заниматься всякой фигнёй. Особен... Jun 5 2012, 11:40 TAutomatic Цитата(esaulenka @ Jun 5 2012, 14:40) Я б... Jun 5 2012, 16:57 IgorKossak Цитата(esaulenka @ Jun 5 2012, 14:40) Кей... Jun 5 2012, 20:08  Dron_Gus Цитата(IgorKossak @ Jun 6 2012, 00:08) Ке... Jun 5 2012, 20:24 TAutomatic Цитата(esaulenka @ Jun 5 2012, 14:40) Я б... Jun 6 2012, 04:53  ViKo Цитата(TAutomatic @ Jun 6 2012, 07:53) На... Jun 6 2012, 05:33   TAutomatic Цитата(ViKo @ Jun 6 2012, 08:33) Вставил ... Jun 6 2012, 06:22    demiurg_spb Цитата(TAutomatic @ Jun 6 2012, 09:22) вд... Jun 6 2012, 06:30    IgorKossak Цитата(TAutomatic @ Jun 6 2012, 09:22) А ... Jun 6 2012, 06:44    ViKo Цитата(TAutomatic @ Jun 6 2012, 09:22) А ... Jun 6 2012, 08:43     TAutomatic Цитата(ViKo @ Jun 6 2012, 11:43) У переме... Jun 6 2012, 12:31      ViKo Цитата(TAutomatic @ Jun 6 2012, 15:31) Я ... Jun 6 2012, 13:05       TAutomatic Цитата(ViKo @ Jun 6 2012, 16:05) Я провер... Jun 6 2012, 13:48 ViKo Проверил с тремя __packed. Так я не пробовал.
... Jun 6 2012, 14:01 TAutomatic Цитата(ViKo @ Jun 6 2012, 17:01) Проверил... Jun 6 2012, 14:07    jcxz Цитата(TAutomatic @ Jun 7 2012, 14:16) Ну... Jun 7 2012, 09:08     Dron_Gus Цитата(jcxz @ Jun 7 2012, 13:08) Позвольт... Jun 7 2012, 09:20     TAutomatic Цитата(jcxz @ Jun 7 2012, 12:08) Позвольт... Jun 7 2012, 09:40      demiurg_spb Цитата(TAutomatic @ Jun 7 2012, 12:40) Дв... Jun 7 2012, 10:02      jcxz Цитата(TAutomatic @ Jun 7 2012, 15:40) Ра... Jun 7 2012, 10:10      ViKo Цитата(TAutomatic @ Jun 7 2012, 12:40) за... Jun 7 2012, 10:16       jcxz Цитата(ViKo @ Jun 7 2012, 16:16) Покажите... Jun 7 2012, 10:20      AHTOXA Цитата(TAutomatic @ Jun 7 2012, 15:40) Ра... Jun 7 2012, 10:17       TAutomatic Цитата(AHTOXA @ Jun 7 2012, 13:17) Может,... Jun 7 2012, 10:27  ViKo Цитата(TAutomatic @ Jun 7 2012, 09:18) Вс... Jun 7 2012, 10:26   TAutomatic Цитата(ViKo @ Jun 7 2012, 13:26) Вы не о ... Jun 7 2012, 10:33    ViKo Цитата(TAutomatic @ Jun 7 2012, 13:33) См... Jun 7 2012, 10:58     TAutomatic Цитата(ViKo @ Jun 7 2012, 13:58) При любо... Jun 7 2012, 16:40 ViKo Герберд Шилдт. Полный справочник по C. (в электрон... Jun 7 2012, 05:53 andrewlekar ЦитатаА при чем тут придет и не поймет rolleyes.gi... Jun 7 2012, 06:40 TAutomatic Цитата(andrewlekar @ Jun 7 2012, 09:40) В... Jun 7 2012, 07:04 exeron Какой упоротый попался... Вам уже цитату из Шилдта... Jun 7 2012, 10:33 KRS Вообще то для того что бы расположить глобальные о... Jun 7 2012, 20:19 TAutomatic Цитата(KRS @ Jun 7 2012, 23:19) Вообще то... Jun 8 2012, 04:44  demiurg_spb Цитата(TAutomatic @ Jun 8 2012, 07:44) Со... Jun 8 2012, 07:11  KRS Цитата(TAutomatic @ Jun 8 2012, 08:44) Ед... Jun 8 2012, 09:44 esaulenka Дурацкий вопрос: union-то зачем? Вполне достаточно... Jun 8 2012, 09:59 KRS Цитата(esaulenka @ Jun 8 2012, 13:59) Дур... Jun 8 2012, 12:19 brag В Cortex-M3 выравнивание можно сказать, всегда нуж... Jun 9 2012, 05:44 TAutomatic Цитата(brag @ Jun 9 2012, 08:44) Я всегда... Jun 9 2012, 15:47 brag Вешаем обработчик на исключение UsageFault, а в не... Jun 9 2012, 16:34 TAutomatic Цитата(brag @ Jun 9 2012, 19:34) Вешаем о... Jun 9 2012, 18:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|