реклама на сайте
подробности

 
 
> Размер unsigned int или int Keil4.5
TAutomatic
сообщение Jun 2 2012, 11:17
Сообщение #1


Участник
*

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



Добрый день, коллеги.
Месяц использую LPC1768 и только сейчас с "ужасом" заметил, что под переменные unsigned int и int компилятор отводит по 4 байта.
Использую среду Keil 4.5 и постоянно плююсь даже не по причине ее скудости, а по причине неудобности документации на нее и компилятор. Как установить "нормальный" размер этих типов данных размером в 2 байта?
И второй вопрос. Я был уверен, что в Cortex-M3 отсутствует необходимость выравнивания разноразмерных типов данных.
Об этом написано тут
Тем не менее, у себя в реале я этого не вижу. Если за однобайтовой переменной следует четырехбайтовая, то она все равно выравнивается по границе 32 разрядного слова, тоесть остается неиспользуемый промежуток в 3 байта. Что тут не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrewlekar
сообщение Jun 7 2012, 04:45
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Ребята, я вас умоляю, не делайте так в рабочем коде. Придёт после вас человек и не поймёт нифига, что вы там наоптимизировали.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 06:18
Сообщение #3


Участник
*

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



Цитата(andrewlekar @ Jun 7 2012, 07:45) *
Ребята, я вас умоляю, не делайте так в рабочем коде. Придёт после вас человек и не поймёт нифига, что вы там наоптимизировали.

А при чем тут придет и не поймет rolleyes.gif Я беру к себе на работу только тех, кто способен понимать и разобраться. Тогда и Вы ответьте на вопрос: зачем тогда столько "фишек" и примочек в компиляторе? Вы этим не пользуетесь? Я пользуюсь. И максимально, что бы был максимально эффективный код, или максимально эффективное решение задачи или еще что-то в этом роде, но максимально эффективное. Почему публика привратно в основном понимает эту суть. если я спросил насчет упаковки переменных, почему -т о в основном у публики сложилось сразу впечатление, что я возьму тупо все данные упакую в кирпич. И начались советы по поводу эффективности такого использования и т.д. и т.п. Ребята, я не собираюсь так делать rolleyes.gif Во всяком случае ко всему подряд и без разбора "на всякий случай". Просто иногда гдето-то в определенном месте в связи с определенными условиями нужно применить такой метод. И не более. Речь не идет о како-то глобальности. Если Вы не пользуетесь всеми инструментами, которые вам дает средство разработки, Вы либо невысокой квалификации специалист, либо не можете предложить самое эффективное решение задачи, что собственно тоже говорит о квалификации. Все, что правильно понимается и правильно применяется- никак не отражается на рабочем коде в подавляющем большенстве случаев. И почти все так называемые "глюки" контроллеров или среды - это глюки того, кто не в полной мере этим владеет. Низкая квалификация.

Цитата(ViKo @ Jun 7 2012, 08:53) *
Герберд Шилдт. Полный справочник по C. (в электронном виде не имею на русском языке, в книжке на русском еще понятнее).
Page 144 - 145

Все правильно, спасибо за цитату rolleyes.gif Теперь попытаюсь Вам концептуально разъяснить в чем дело. Язык С был создан в эпоху микропроцессоров, у которых память была сегментирована. Это процессоры чуть до Intel286 и 386 и в том числе эти процессоры. Так вот, что бы получить доступ к исполнительному адресу, нужно было еще опереровать с сегментным регистром. Вполне вероятно, что два массива по 10 байт оказались бы на границе сегмента. Физически это последовательные адреса, но вот логические уже нет. И тогда последовательное обращение к 20 байтам на самом деле бы привело не к обращению к двум последовательным массивам, а в пределах одного секмента 64кБ. Давайте жить реалиями сегняшнего дня. В основном все уже имеют дело с микроконтроллерами с линейным адресным пространством. В пределах этого пространства компилятор не занимается перестановкой переменных и оптимизацией их размещения, если на то нет особых инструкций, указаний и т. д. Тоесть, компилятор оптимизирует код с обязательным требованием сохранения его идентичности по функционалу исходному коду и не занимается оптимизацией памяти данных
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jun 7 2012, 07:22
Сообщение #4


Профессионал
*****

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



Цитата(TAutomatic @ Jun 7 2012, 10:18) *
Давайте жить реалиями сегняшнего дня. В основном все уже имеют дело с микроконтроллерами с линейным адресным пространством. В пределах этого пространства компилятор не занимается перестановкой переменных и оптимизацией их размещения, если на то нет особых инструкций, указаний и т. д. Тоесть, компилятор оптимизирует код с обязательным требованием сохранения его идентичности по функционалу исходному коду и не занимается оптимизацией памяти данных

С первой частью заявления не соглашусь. Пространство хоть и линейно, но это не гарантирует одинаковое время доступа и одинаковое количество инструкций для доступа в ряде случаев.
Соответственно оптимизатор вполне может перетасовать данные, если это обоснованно и даст какой-то профит.

Более того, при определенных настройках тот же GCC может перекладывать данные из секции .data в .bss


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 08:16
Сообщение #5


Участник
*

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



Цитата(Dron_Gus @ Jun 7 2012, 10:22) *
С первой частью заявления не соглашусь. Пространство хоть и линейно, но это не гарантирует одинаковое время доступа и одинаковое количество инструкций для доступа в ряде случаев.
Соответственно оптимизатор вполне может перетасовать данные, если это обоснованно и даст какой-то профит.

Более того, при определенных настройках тот же GCC может перекладывать данные из секции .data в .bss

Послушайте, чесговоря нет времени на такого рода диспут, но когда пишут совершенно непонятные для меня вещи, хочется всегда спросить: откуда вы это взяли?!!! Ну откуда вы взяли что время доступа может быть разны, если переменные размещаются в ОЗУ? Мы же не ведем речь о переменных и сразу о константах, которые размещаются в адресном пространстве кода? Ну я вот хочу знать того, чего не знаю. Покажите мне не на пальцах, а на конкретном примере. И еще, какие такие настройки компилера позволят две однородные переменные без инициализации на стадии линковки или обе с инициализацией, расположенные в одном программном модуле последовательно друг за другом разнести по разным секциям? Пожете показать, как Вы это делаете? rolleyes.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 7 2012, 09:08
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(TAutomatic @ Jun 7 2012, 14:16) *
Ну откуда вы взяли что время доступа может быть разны, если переменные размещаются в ОЗУ? Мы же не ведем речь о переменных и сразу о константах, которые размещаются в адресном пространстве кода? Ну я вот хочу знать того, чего не знаю. Покажите мне не на пальцах, а на конкретном примере.

Позвольте встрять? wink.gif

Кроме внутреннего ОЗУ, к контроллеру может быть подцеплено внешнее, с другим временем доступа.
Даже если есть только внутреннее, то в некоторых процессорах есть разные RAM с разным быстродействием, расположенные на разных шинах.
Или, к примеру: внутреннее ОЗУ разбито на банки (непрерывно расположенные в адресном пространстве), и одна из переменных - в одном банке, другая - в другом, а во второй банк как раз идёт интенсивное DMA (с приоритетом контроллера DMA) - здесь разница во времени доступа может быть ОЧЕНЬ большой.
Даже если банки ОЗУ в несмежных областях - линкер (при соотв. опциях) может разбить выходные секции на неск. несмежных областей.
Для каких-то областей может быть включено/выключено кеширование.
Или (типичная оптимизация IAR for ARM): функция работает с неск. статическими переменными - IAR заносит в некий базовый регистр указатель на область памяти, которая включает большую часть этих переменных и адресует их через этот базовый + смещение, а одна переменная - далеко от остальных, разрядности смещения не хватает и для обращения к ней компилятору приходится вставлять доп. инструкции загрузки адреса этой переменной в регистр - соответственно доступ к этой переменной будет дольше.

Перетасовка переменных оптимизатором - это большой гуд. ПО не должно привязываться к взаимному расположению переменных (конечно это не касается внутри структур).
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 09:40
Сообщение #7


Участник
*

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



Цитата(jcxz @ Jun 7 2012, 12:08) *
Позвольте встрять? wink.gif

Кроме внутреннего ОЗУ, к контроллеру может быть подцеплено внешнее, с другим временем доступа.
Даже если есть только внутреннее, то в некоторых процессорах есть разные RAM с разным быстродействием, расположенные на разных шинах.
Или, к примеру: внутреннее ОЗУ разбито на банки (непрерывно расположенные в адресном пространстве), и одна из переменных - в одном банке, другая - в другом, а во второй банк как раз идёт интенсивное DMA (с приоритетом контроллера DMA) - здесь разница во времени доступа может быть ОЧЕНЬ большой.
Даже если банки ОЗУ в несмежных областях - линкер (при соотв. опциях) может разбить выходные секции на неск. несмежных областей.
Перетасовка переменных оптимизатором - это большой гуд. ПО не должно привязываться к взаимному расположению переменных (конечно это не касается внутри структур).

Рабята, ну я Вас умаляю... rolleyes.gif Ну Вы что, читать не умеете? Я же ясно написал, две переменные, одинаково объявленные и т.д. Вам, что, все это пустой звук или есть просто желание поговорить? rolleyes.gif Две переменные, объявленные одинаково уж точно не могут попасть одна во внутреннее ОЗУ, вторая во внешнее, что бы иметь разное время доступа. Ну кто этого не понимает? Все остальное и комментировать нет смысла. Вам уже aaarrr выше в этой теме написал - размещение переменных, в том числе акккуратность этого размещения- это задача программиста. И я в этом согласен. А вот аккуратностью размещения кода занимается компилятор, а затем оптимизатор. Об этом даже в Википедии почитать можно. Там нет ни слова об оптимизации данных. Судя по-всему, никто из написавших выше никогда не проверял, что же реально компилятор и оптимизатор творят с переменными, но, основываясь на каком то внутреннем понимании этого процесса rolleyes.gif пытается утверждать, что так оно и есть.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 7 2012, 10:16
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(TAutomatic @ Jun 7 2012, 12:40) *
занимается компилятор, а затем оптимизатор. Об этом даже в Википедии

Покажите, где написано (в Википедии, или еще где-то), что есть некий зверь, именуемый "оптимизатором", который занимается размещением то ли кода, то ли данных.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 7 2012, 10:20
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Jun 7 2012, 16:16) *
Покажите, где написано (в Википедии, или еще где-то), что есть некий зверь, именуемый "оптимизатором", который занимается размещением то ли кода, то ли данных.

Википедия это конечно АВТОРИТЕТ! Любой TAutomatic знает w00t.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
||- - Dron_Gus   Цитата(jcxz @ Jun 7 2012, 13:08) Позвольт...   Jun 7 2012, 09:20
||- - 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
||- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 14:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01508 секунд с 7
ELECTRONIX ©2004-2016