Перейти к содержанию
    

Примеры IAR4.12

Поставил IAR4.12. А примеров использования компилятора там нет. ( Подскажите откуда их можно скачать.(типа работа с EEPROM, использовани ASM и тд)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простенькие примеры лежат в папке \avr\tutor.

Более подробно о создании проектов, примеры программирования и пр. можно почитать в документации, в частности в EWAVR_UserGuide.pdf в папке \avr\doc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, подскажите пожалуйста ,

почему при написании просто

 

#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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я непонимаю, почему переменная ind зпнимает столько много памяти, да еще распологается в сегменте кода ?

Помогите пожалуйста разобраться :ohmy:

Это шутка такая?

А программа while(ind--){PORTD=ind;}; располагается где же?

 

переменная объявлена внутри функции (локальная), поэтому размещается в стеке (скорее всего в тех 64 bytes of DATA memory). (+ 1 absolute ) - это PORTD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это не шутка. Я просто новичек. Скажите пожалуйста. Т.е компилятор создает в ОЗУ стек

в даном случае 64 byte и все локальные переменные помещает туда ?

А почему если созбать хоть 1 глобальную переменную размер кода резко повышается, а если больше, то с каждой созданной переменной unsigned char он повышается на 6 byte,а размер данных на 1 byte ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это не шутка. Я просто новичек. Скажите пожалуйста. Т.е компилятор создает в ОЗУ стек

в даном случае 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;
}

То размер кода должен остаться неизменным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...