правда, чтобы сделать ключом map массив char* - надо прилично извратится и вроде как написать свои функции сравнения строк.
То есть в конечном итоге вся эта красота скрывает внутри теже самые функции поиска нужного значения в структуре путем перебора элементов, от которых Садман хотел бы избавится :)
хотелось бы получить удобный маппинг (в обе стороны)
тут можно долго спорить есть это в языке или нет, т.к. есть оно во внешней библиотеке STL (вроде как не в языке), но эта библиотека стандартизована в ISO-IEC 14882-2017 (нужные нам контейнеры - разд. 26.4, стр. 896).
Другая беда, что в поставке IDE (как и Atmel Studio) библиотеки STL нет. Она, конечно же есть для gnu'сного компилятора, но с этими продуктами не поставляется. Поставить можно. Я как-то ставил. Что-то там было непросто (может потому, что я плохо знаю gcc) но в итоге поставилось и работало.
Бывало, конечно, мне льстили в жизни, но чтобы вот вот так - в первый раз.
Улыбнули с утра...производство...звонок с сообщением о неисправности ТПА...прихожу...слышу в свой адрес ..."самый умный мужчина Советского Союза"...в ответ - ну Вы и льстите...а по существу...работали исключительно матери-одиночки, зарплата от 350 до 400, надо только чтобы станки работали непрерывно )))
Извиняюсь за оффтоп
PS Видимо Евгений Петрович увидел ШКОЛУ ПРЕПОДАВАНИЯ, а УЧИТЕЛЯ встречаются везде )))
Нет, конечно уборщиком меня бы взяли, наверное, в МГУ... Однако, мои столкновения с высокими материями ограничиваются разовым прохождением мимо незамерзающего пруда в ИТЭФе с последующим употребле... обменом опытом с коллегами и наблюдением за всклокоченными людьми в трико, которые в ночи черкали странные формулы на досках, развешенных по коридорам.
[quote=ua6em увидел ШКОЛУ ПРЕПОДАВАНИЯ[/quote]Нет, я увидел (уже в нескольких местах) использование словечек и выражений, которые, хотя и являются общеизвестными, но почему-то чаще всего используются людьми учившимися или работающими в МГУ (может это только по моим знакомым так - не знаю)
Нет, я увидел (уже в нескольких местах) использование словечек и выражений, которые, хотя и являются общеизвестными, но почему-то чаще всего используются людьми учившимися или работающими в МГУ (может это только по моим знакомым так - не знаю)
[/quote]
Мир тесен, может его учитель учился или тесно общался с выходцами МГУ )))
Ошибка компиляции для платы Arduino Pro or Pro Mini.
C:\Users\9D20~1\AppData\Local\Temp\ccVhdSDj.ltrans0.ltrans.o:(.rodata+0x6): undefined reference to `Print::write(unsigned char const*, unsigned int)'
c:/arduino/arduino-1.8.7/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avr5/crtatmega328p.o:(.init9+0x0): undefined reference to `main'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino Pro or Pro Mini.
Чуть более извращённый генератор HTML-страницы, использующий шаблонные функции для доступа к однотипным массивам-"справочникам", расположенным в Program Space. Надеюсь, что совсем грубых ляпов в темплейтах не наделал. Но, если не справился, - напишите.
Три варианта, но более доступно. Можно в STRING_OF_NUMBERS докидывать по символу и смотреть, как растёт потребление ресурса и какого именно.
Serial.print() во втором варианте выдаст бред, однако это неважно - вопрос же в описании PGM-ресурса.
Первый и третий фактически эквивалентны - компилятор просто выжмет лишнюю воду из исходника.
Но, кстати, интересный момент - у меня на 1.6.11 при увеличении строки потребление RAM/ROM меняется скачком по 2 байта. Почему - не особо понятно, но я и не копался в asm, который генерирует компилятор.
#pragma GCC optimize ("O0")
#define FSH_P(p) (reinterpret_cast<const __FlashStringHelper *>(p))
#define STRING_OF_NUMBERS "0123"
//#define V1
//#define V2
#define V3
// ****** #1 the string stay into PROGMEM
/*
Sketch uses 1,798 bytes (5%) of program storage space. Maximum is 32,256 bytes.
Global variables use 214 bytes (10%) of dynamic memory, leaving 1,834 bytes for local variables.
*/
#ifdef V1
const char number[] PROGMEM = STRING_OF_NUMBERS;
#endif
// ****** #2 the string going to RAM, but the pointer stay into PROGMEM
/*
Sketch uses 1,798 bytes (5%) of program storage space. Maximum is 32,256 bytes.
Global variables use 220 bytes (10%) of dynamic memory, leaving 1,828 bytes for local variables.
*/
#ifdef V2
//const PROGMEM char* const number = STRING_OF_NUMBERS;
const char data[] = STRING_OF_NUMBERS;
const PROGMEM char* const number = data;
#endif
// ****** #3 the string and the pointer stay into PROGMEM both
/*
Sketch uses 1,798 bytes (5%) of program storage space. Maximum is 32,256 bytes.
Global variables use 214 bytes (10%) of dynamic memory, leaving 1,834 bytes for local variables.
*/
#ifdef V3
const PROGMEM char data[] = STRING_OF_NUMBERS;
const PROGMEM char* const number = data;
#endif
void setup() {
Serial.begin(115200);
Serial.print(FSH_P(number));
}
void loop() {}
а что мешает сразу ответить - 2 вариант 197. тут получается строки в рам? но почему разница только 36 байт ? там строки явно больше занимают. даже с учетом одинаковых строк
Прости, но я не понял о чём этот поток сознания. Дед задал тебе просто вопрос - чем отличаются эти три строки. Ответь на него, тогда поговорим и про рам. А то, у меня ощущегие. что ты основ не понимаешь и из-за этого постоянно бредишь. Давай сначала разберёмся с основами, ладно? Отвечай нормально.
А по-русски писать умеешь? Вот и напиши мне по-русски что в этих трёх строках и как ты это понимаешь. Скопипастить много ума не надо.
alexbmd пишет:
чем ответ выше не угодил
mutable pointer to const char
const pointer to mutable char
const pointer to const char
Где был такой ответ выше? Номер поста? Где??? Ты я вижу слегка побрехать решил? И кого обмануть хочешь? Меня или себя? Подсказка - у меня нет проблем со строками.
Ворота не тот возраст у меня чтоб брехать. есть дела понасущнее чем на форумах с незнакомыми людьми непристойными вещями заниматься. скопипастить что прости? обижаешь Ворота
чуствую себя на скамье. давно таких пристальных допросов не было
по русски так по русски
можем менять указатель но не строку //тобишь const char, * не конст
можем менять строку но не указатель //тобишь чар не конст, * конст
ничего не можем менять // оба конст . вот что выше. вроде одно и тоже если не придераться ;)
Тогда покажи мне, где раньше был такой ответ. Может я его пропустил? А если его не было, то прочто признай. что сбрехнулось.
alexbmd пишет:
можем менять указатель но не строку //тобишь const char, * не конст
можем менять строку но не указатель //тобишь чар не конст, * конст
ничего не можем менять // оба конст . вот что выше. вроде одно и тоже если не придераться ;)
Тогда какие у тебя вопросы про то, что указатель пихается в прогмем, а строка нет? Или ты эти тонкости только сейчас узнал? Больше нет проблемы? Если проблема осталась, то постарайся внятно задать вопрос с примеро кода (не со ссылкой "как выше", а с конкретным примером кода конкретный вопрос - что именно тебе непонятно).
alexbmd пишет:
удовлетворил любопытсво то хоть?
Мне нелюбопытно, у меня нет проблем со строками. Проблемы у тебя и я, как могу, пытаюсь тебе помочь. Так что кончай хамить, а то сам будешь во всяём разбираться.
сори Ворота не серчай яж не хамлю. не цепляйся к словам - зри суть.
Больше нет проблемы? - есть проблемма. 2 вариант из 2 поста занимает 197 байт. тут получается строки в рам? но почему разница только на 36 байт больше ? там строки явно больше занимают. даже с учетом одинаковых строк
что указатель пихается в прогмем, а строка нет? - и тут есть проблема. но об этом в той теме. это же из той темы.
есть проблемма. 2 вариант из 2 поста занимает 197 байт.
Правда, не читаешь, что тебе пишут? Я же тебе написал
Ворота пишет:
Если проблема осталась, то постарайся внятно задать вопрос с примером кода (не со ссылкой "как выше", а с конкретным примером кода конкретный вопрос - что именно тебе непонятно).
Пойми, я уже вусмерть запутался в твоих вариантах и постах. То у тебя пустой массив, то он оказывается как какая-то строка отжирает ... запутался.
Есть вопрос, задай его целиком, без отсылок к вариантам и постам - приведи код и задай внятный вопрос. Только код полностью, чтобы я мог его взять и скомпилировать и получить твои цифры по памяти.
2 вариант: 197 байт рам. - тут я спрашиваю - получается строки(которые внутри структуры) в рам? но почему разница (с первым вариантом) только 36 байт ? там строки явно больше занимают. даже с учетом одинаковых строк и оптимизации?
3 вариант 161 байт. - тут я просто говорю что третий вариант, как по мне, красивше - самый красивый получается. при этом и строки и указатели во флэш
Ну, как будет нечем заняться, так и вернусь к упражнениями с прогмем.
А так - особого желания объяснять, почему авто не едет, человеку, который намеренно не снимается с ручника, у меня нет. Пусть разбирает машину сам и изучает механическую схему, если времени дофига на то, чтобы придумывать нестандартные способы управления.
Так Дед Симэн. Вы задали вопрос. Я ответил. Ну про звездочки. Ну а до этого я же задал конкретный вопрос .
Первый и третий варианты ТС хранят все во флэш . И занимают у меня в 1.8.9 161 байт.
Второй вариант поинтеры во флэш а строки в оперативке и занимает 197 байт. Разница 36 байт. Но там же длина строк больше чем 36 даже если предположить что одинаковые строки по одному адресу.
Ежеле не затруднит растолкуйте плиз
Ну вот что ты всё людей дергаешь? Открой сгенерированный ассемблерный листинг и посмотри как распределены по памяти все определения. Да ещё несколько раз с разной оптимизацией и нам расскажешь.
Первый и третий варианты ТС хранят все во флэш . И занимают у меня в 1.8.9 161 байт. Второй вариант поинтеры во флэш а строки в оперативке и занимает 197 байт. Разница 36 байт.
У Садмана там расклад по байтам прописан - первый и третий вариант у него занимают 21 байт, а второй 65. Разница 44 байта. Вот это правильная и понятная цифра, точно совпадающая с числом символов в строках. А почему у тебя 36 байт - я не знаю.
Ой да ладно. При компиляции во временной папке появляется куча файлов. Там есть файл и листингом. Для его понимания ассемблер знать не обязательно. Достаточно прочитать о структуре это файла и главное в нём дан расклад по занимаемой памяти всеми элементами программы. Можно точно сказать что сколько занимает. И не будет разночтений. То что пишет в конце компиляции среда, это вся выделенная память. Ты говоришь об конкретном элементе и что бы быть точно уверенным что разница в размере связана только с исследуемым элемнтом, а не с какими то дополнительными оптимизациями, лучше следить за размером там. Иначе все разговоры тут не имеют конкретной привязки и выглядят, мягко говоря, лишёнными практического выхода. И, кстати, ответ на вопрос деда сразу был бы виден в листигах по расположению элементов записей.
pdu = 3*12 = 36 bytes / если оптимизируем на один адресс то 12 б
total = 33+15+36 = 84 b / если оптимизируем то 60 b
как эта цифра может совпадать с 44 как у Садмана?
"Как я насчитал 44 байта" :
каждая пара num и pass лежат в одной области, занимая всего 11 байт. В сумме - 33 байта. Плюс pdu один раз. Я. правда, обсчитался и насчитал в pdu 11 нулей = 33 + 11 = 44
хм, а ведь точно num and pass могут занимать одну область просто стартавая точка для поинтера будет разная. спасибо за идею. но мне кажется оптимизатор до такого не додумается. но конечно могу ошибаться.
map файл автоматом выдается для ARM ядер. Для просмотра AVR надо использовать avr-objdump . Эта программа лежит hardware/tools/avr/bin/avr-objdump в папке установки среды. Использовать
avr-objdump -dS *.elf > list.map
*.elf - файл полученный в результате генерации, list.map имя выходного файла (может быть любым)
Очень забавно смотреть на текст файла, который компилируется. Этот текст совсем не похож на исходный. Присутствует и main и init и прочие.
Но скорее всего данный камень это уже не потянет.
сплю уже... но ведь говорили не раз -- есть 100500 адаптаций стандартных темплейтов под АВР и ардуину.
Тю . это легко и не очень. всего надо освоить это http://www.solarix.ru/for_developers/cpp/stl/stl.shtml
Но скорее всего данный камень это уже не потянет.
Потянет. В простейшем виде это называется map. его к ардуино давно прикрутили,
правда, чтобы сделать ключом map массив char* - надо прилично извратится и вроде как написать свои функции сравнения строк.
То есть в конечном итоге вся эта красота скрывает внутри теже самые функции поиска нужного значения в структуре путем перебора элементов, от которых Садман хотел бы избавится :)
Другая беда, что в поставке IDE (как и Atmel Studio) библиотеки STL нет. Она, конечно же есть для gnu'сного компилятора, но с этими продуктами не поставляется. Поставить можно. Я как-то ставил. Что-то там было непросто (может потому, что я плохо знаю gcc) но в итоге поставилось и работало.
sadman41, Вы не из МГУ часом?
...
Поставить можно. Я как-то ставил. Что-то там было непросто (может потому, что я плохо знаю gcc) но в итоге поставилось и работало.
Непросто - это плохо, конечно. В опенсорц-прожект не выплеснешь исходник просто так... Что ж, раз волшебства нет, попробую заварить чаёк на шаблонах.
Бывало, конечно, мне льстили в жизни, но чтобы вот вот так - в первый раз. Про МГУ я знаю только то, что в районе Мехмата что ли... снег идёт вверх.
Бывало, конечно, мне льстили в жизни, но чтобы вот вот так - в первый раз.
Улыбнули с утра...производство...звонок с сообщением о неисправности ТПА...прихожу...слышу в свой адрес ..."самый умный мужчина Советского Союза"...в ответ - ну Вы и льстите...а по существу...работали исключительно матери-одиночки, зарплата от 350 до 400, надо только чтобы станки работали непрерывно )))
Извиняюсь за оффтоп
PS Видимо Евгений Петрович увидел ШКОЛУ ПРЕПОДАВАНИЯ, а УЧИТЕЛЯ встречаются везде )))
Нет, конечно уборщиком меня бы взяли, наверное, в МГУ... Однако, мои столкновения с высокими материями ограничиваются разовым прохождением мимо незамерзающего пруда в ИТЭФе с последующим употребле... обменом опытом с коллегами и наблюдением за всклокоченными людьми в трико, которые в ночи черкали странные формулы на досках, развешенных по коридорам.
[quote=ua6em увидел ШКОЛУ ПРЕПОДАВАНИЯ[/quote]Нет, я увидел (уже в нескольких местах) использование словечек и выражений, которые, хотя и являются общеизвестными, но почему-то чаще всего используются людьми учившимися или работающими в МГУ (может это только по моим знакомым так - не знаю)
[quote=ua6em увидел ШКОЛУ ПРЕПОДАВАНИЯ
[/quote]
Мир тесен, может его учитель учился или тесно общался с выходцами МГУ )))
да гошишь...
у меня скомпилировался тоже, что я не так сделал )))
Чуть более извращённый генератор HTML-страницы, использующий шаблонные функции для доступа к однотипным массивам-"справочникам", расположенным в Program Space. Надеюсь, что совсем грубых ляпов в темплейтах не наделал. Но, если не справился, - напишите.
попробовал три варианта sadman41 из 2 поста в 1,8,9. прагма оптимизатор почему то ни на что не влияет.
1 вариант 161 байт рам
2 вариант 197. тут получается строки в рам? но почему разница только 36 байт ? там строки явно больше занимают. даже с учетом одинаковых строк
3 вариант 161. самый красивый получается. при этом и строки и указатели во флэш
Пропробуй найти отличия, объясни себе разность между
const char *s;
char const *s;
const char const *s;
Ну и наморщи мосх и скажи, что из этого можно пхать в PROGMEM.
Справишьса?
первые два одно и тоже
третий ошибка
из этого ничего. такое можно const char * const s[] или такое const char s[] ну или как sadman41 структуру ну и тд
но Дед Симэн какое это имеет отношение к моему вопросу ? :)
alexbmd, дед просто опечатался. Он имел в виду вот так.
Ответь на его вопрос, тогда поговорим.
дед просто опечатался. Он имел в виду вот так.
Да, спасибо, я просто с планшета писал, да в звёздочках запутался. :)
Три варианта, но более доступно. Можно в STRING_OF_NUMBERS докидывать по символу и смотреть, как растёт потребление ресурса и какого именно.
Serial.print() во втором варианте выдаст бред, однако это неважно - вопрос же в описании PGM-ресурса.
Первый и третий фактически эквивалентны - компилятор просто выжмет лишнюю воду из исходника.
Но, кстати, интересный момент - у меня на 1.6.11 при увеличении строки потребление RAM/ROM меняется скачком по 2 байта. Почему - не особо понятно, но я и не копался в asm, который генерирует компилятор.
дед просто опечатался. Он имел в виду вот так.
Да, спасибо, я просто с планшета писал, да в звёздочках запутался. :)
Ворота лучше всех в звёздочках понимает )))
а что мешает сразу ответить - 2 вариант 197. тут получается строки в рам? но почему разница только 36 байт ? там строки явно больше занимают. даже с учетом одинаковых строк
Прости, но я не понял о чём этот поток сознания. Дед задал тебе просто вопрос - чем отличаются эти три строки. Ответь на него, тогда поговорим и про рам. А то, у меня ощущегие. что ты основ не понимаешь и из-за этого постоянно бредишь. Давай сначала разберёмся с основами, ладно? Отвечай нормально.
я цветочки рисовать не умею.
mutable pointer to const char
const pointer to mutable char
const pointer to const char
пойдет?
Не пойдёт.
я цветочки рисовать не умею.
А по-русски писать умеешь? Вот и напиши мне по-русски что в этих трёх строках и как ты это понимаешь. Скопипастить много ума не надо.
чем ответ выше не угодил
mutable pointer to const char
const pointer to mutable char
const pointer to const char
Где был такой ответ выше? Номер поста? Где??? Ты я вижу слегка побрехать решил? И кого обмануть хочешь? Меня или себя? Подсказка - у меня нет проблем со строками.
Ворота не тот возраст у меня чтоб брехать. есть дела понасущнее чем на форумах с незнакомыми людьми непристойными вещями заниматься. скопипастить что прости? обижаешь Ворота
чуствую себя на скамье. давно таких пристальных допросов не было
по русски так по русски
можем менять указатель но не строку //тобишь const char, * не конст
можем менять строку но не указатель //тобишь чар не конст, * конст
ничего не можем менять // оба конст . вот что выше. вроде одно и тоже если не придераться ;)
удовлетворил любопытсво то хоть?
Ворота не тот возраст у меня чтоб брехать
Тогда покажи мне, где раньше был такой ответ. Может я его пропустил? А если его не было, то прочто признай. что сбрехнулось.
можем менять указатель но не строку //тобишь const char, * не конст
можем менять строку но не указатель //тобишь чар не конст, * конст
ничего не можем менять // оба конст . вот что выше. вроде одно и тоже если не придераться ;)
Тогда какие у тебя вопросы про то, что указатель пихается в прогмем, а строка нет? Или ты эти тонкости только сейчас узнал? Больше нет проблемы? Если проблема осталась, то постарайся внятно задать вопрос с примеро кода (не со ссылкой "как выше", а с конкретным примером кода конкретный вопрос - что именно тебе непонятно).
удовлетворил любопытсво то хоть?
Мне нелюбопытно, у меня нет проблем со строками. Проблемы у тебя и я, как могу, пытаюсь тебе помочь. Так что кончай хамить, а то сам будешь во всяём разбираться.
сори Ворота не серчай яж не хамлю. не цепляйся к словам - зри суть.
Больше нет проблемы? - есть проблемма. 2 вариант из 2 поста занимает 197 байт. тут получается строки в рам? но почему разница только на 36 байт больше ? там строки явно больше занимают. даже с учетом одинаковых строк
что указатель пихается в прогмем, а строка нет? - и тут есть проблема. но об этом в той теме. это же из той темы.
Правда, не читаешь, что тебе пишут? Я же тебе написал
Пойми, я уже вусмерть запутался в твоих вариантах и постах. То у тебя пустой массив, то он оказывается как какая-то строка отжирает ... запутался.
Есть вопрос, задай его целиком, без отсылок к вариантам и постам - приведи код и задай внятный вопрос. Только код полностью, чтобы я мог его взять и скомпилировать и получить твои цифры по памяти.
дело в том что код не мой тут, это другая тема.
вот код - http://arduino.ru/forum/programmirovanie/progmem-tricks#comment-439006 там три примера , я запускаю на 1.8.9 и получаю:
1 вариант: 161 байт рам
2 вариант: 197 байт рам. - тут я спрашиваю - получается строки(которые внутри структуры) в рам? но почему разница (с первым вариантом) только 36 байт ? там строки явно больше занимают. даже с учетом одинаковых строк и оптимизации?
3 вариант 161 байт. - тут я просто говорю что третий вариант, как по мне, красивше - самый красивый получается. при этом и строки и указатели во флэш
PS: вроде все понятно было
вот код - http://arduino.ru/forum/programmirovanie/progmem-tricks#comment-439006 там три
В то время, как хрен знает сколько раз повторялось
Прости, друг. Удачи тебе, разбирайся сам.
sandman41, может вы можете объяснить, здесь же строки не во флэш?, почему разница , с первым вариантом не стыкуется по количеству символов ?
Ну, как будет нечем заняться, так и вернусь к упражнениями с прогмем.
А так - особого желания объяснять, почему авто не едет, человеку, который намеренно не снимается с ручника, у меня нет. Пусть разбирает машину сам и изучает механическую схему, если времени дофига на то, чтобы придумывать нестандартные способы управления.
не думал что так тяжело открыть прямой линк
Когда тебя уже трижды попросили, сделать без ссылок? Ну, впредь думай, если есть чем, конечно.
Ворота это детские капризы.
Qwone, вопрос почему строки в оперативки занимают меньше байт чем их длина это одевать валенки на голову?
второй вариант массивы строк во флэш. Так?
Первый строки в оперативки. Так?
Первый вариант это человек написавший дибил и все что написал дальше можно направлять в унитаз. На что Вам и написали выше.
ПС:http://lurkmore.to/Корованы
Видно без этих веществ не разобраться в этом вопросе
Ты скажи, чотыхошь, конкретно? Теорию разводить не будут, а пацкажут как сделать.
Ты скажи, чотыхошь, конкретно?
Патрындеть.
Так Дед Симэн. Вы задали вопрос. Я ответил. Ну про звездочки. Ну а до этого я же задал конкретный вопрос .
Первый и третий варианты ТС хранят все во флэш . И занимают у меня в 1.8.9 161 байт.
Второй вариант поинтеры во флэш а строки в оперативке и занимает 197 байт. Разница 36 байт. Но там же длина строк больше чем 36 даже если предположить что одинаковые строки по одному адресу.
Ежеле не затруднит растолкуйте плиз
Ну вот что ты всё людей дергаешь? Открой сгенерированный ассемблерный листинг и посмотри как распределены по памяти все определения. Да ещё несколько раз с разной оптимизацией и нам расскажешь.
Ник я на первых этажах понимания си а вы мне листинг ассемблера , это не то что этаж выше, это другой подъезд :)
У Садмана там расклад по байтам прописан - первый и третий вариант у него занимают 21 байт, а второй 65. Разница 44 байта. Вот это правильная и понятная цифра, точно совпадающая с числом символов в строках. А почему у тебя 36 байт - я не знаю.
Ой да ладно. При компиляции во временной папке появляется куча файлов. Там есть файл и листингом. Для его понимания ассемблер знать не обязательно. Достаточно прочитать о структуре это файла и главное в нём дан расклад по занимаемой памяти всеми элементами программы. Можно точно сказать что сколько занимает. И не будет разночтений. То что пишет в конце компиляции среда, это вся выделенная память. Ты говоришь об конкретном элементе и что бы быть точно уверенным что разница в размере связана только с исследуемым элемнтом, а не с какими то дополнительными оптимизациями, лучше следить за размером там. Иначе все разговоры тут не имеют конкретной привязки и выглядят, мягко говоря, лишёнными практического выхода. И, кстати, ответ на вопрос деда сразу был бы виден в листигах по расположению элементов записей.
num = 3*11 = 33 bytes
pass = 3*5 = 15 bytes
pdu = 3*12 = 36 bytes / если оптимизируем на один адресс то 12 б
total = 33+15+36 = 84 b / если оптимизируем то 60 b
как эта цифра может совпадать с 44 как у Садмана?
Ник, как называется файл-листинг ? только в папке preproc __attribute__((__progmem__)) чтото относящиеся к памяти. но никаких цифр
еще раз проверил на дефолтных (из коробки) настройках 1,8,9
1 и 3 вариант 21 байт как у Садмана но вот второй 59. как в 38 байт запихнуть 60 б строк непонимаю
num = 3*11 = 33 bytes
pass = 3*5 = 15 bytes
pdu = 3*12 = 36 bytes / если оптимизируем на один адресс то 12 б
total = 33+15+36 = 84 b / если оптимизируем то 60 b
как эта цифра может совпадать с 44 как у Садмана?
"Как я насчитал 44 байта" :
каждая пара num и pass лежат в одной области, занимая всего 11 байт. В сумме - 33 байта. Плюс pdu один раз. Я. правда, обсчитался и насчитал в pdu 11 нулей = 33 + 11 = 44
Если их 12 - гипотеза неверна.
хм, а ведь точно num and pass могут занимать одну область просто стартавая точка для поинтера будет разная. спасибо за идею. но мне кажется оптимизатор до такого не додумается. но конечно могу ошибаться.
map файл автоматом выдается для ARM ядер. Для просмотра AVR надо использовать avr-objdump . Эта программа лежит hardware/tools/avr/bin/avr-objdump в папке установки среды. Использовать
avr-objdump -dS *.elf > list.map
*.elf - файл полученный в результате генерации, list.map имя выходного файла (может быть любым)
Очень забавно смотреть на текст файла, который компилируется. Этот текст совсем не похож на исходный. Присутствует и main и init и прочие.