algidim 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба Поставил IAR4.12. А примеров использования компилятора там нет. ( Подскажите откуда их можно скачать.(типа работа с EEPROM, использовани ASM и тд) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба Простенькие примеры лежат в папке \avr\tutor. Более подробно о создании проектов, примеры программирования и пр. можно почитать в документации, в частности в EWAVR_UserGuide.pdf в папке \avr\doc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
algidim 0 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба Господа, подскажите пожалуйста , почему при написании просто #include <ioavr.h> #include <inavr.h> int main( void ) { return 0; } В опциях проекта выбираю тип контроллера и генирацию map файла. При компиляции программы в map файле написано, что программа занимает 38 bytes of CODE memory (+ 50 range fill ) 64 bytes of DATA memory А при компиляции программы: int main( void ) { unsigned char ind; ind=10; while(ind--){PORTD=ind;}; return 0; } 52 bytes of CODE memory (+ 50 range fill ) 64 bytes of DATA memory (+ 1 absolute ) Я непонимаю, почему переменная ind зпнимает столько много памяти, да еще распологается в сегменте кода ? Помогите пожалуйста разобраться :ohmy: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба Я непонимаю, почему переменная ind зпнимает столько много памяти, да еще распологается в сегменте кода ? Помогите пожалуйста разобраться :ohmy: Это шутка такая? А программа while(ind--){PORTD=ind;}; располагается где же? переменная объявлена внутри функции (локальная), поэтому размещается в стеке (скорее всего в тех 64 bytes of DATA memory). (+ 1 absolute ) - это PORTD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
algidim 0 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба Это не шутка. Я просто новичек. Скажите пожалуйста. Т.е компилятор создает в ОЗУ стек в даном случае 64 byte и все локальные переменные помещает туда ? А почему если созбать хоть 1 глобальную переменную размер кода резко повышается, а если больше, то с каждой созданной переменной unsigned char он повышается на 6 byte,а размер данных на 1 byte ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 18 июля, 2006 Опубликовано 18 июля, 2006 · Жалоба Это не шутка. Я просто новичек. Скажите пожалуйста. Т.е компилятор создает в ОЗУ стек в даном случае 64 byte и все локальные переменные помещает туда ? Да. Но кроме локальных переменных на стеке хранятся адреса возвратов из подпрограмм и временные переменные (если они нужны компилятору в процессе выполнения кода). А почему если созбать хоть 1 глобальную переменную размер кода резко повышается, а если больше, то с каждой созданной переменной unsigned char он повышается на 6 byte,а размер данных на 1 byte ?Можно с примерами? Если глобальная переменная инициализирована при объявлении, то необходим код для инициализации и для хранения инициализирующего значения. А если просто int a, b, c; int main (int) { return 1; } и int a, b, c, d, e, f; int main (int) { return 1; } То размер кода должен остаться неизменным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться