Пытаюсь скомпилировать код в AVR Studio

Тема в разделе "Микроконтроллеры AVR", создана пользователем Максим B, 6 июн 2014.

  1. Максим B

    Максим B Гуру

    Всем привет Делаю пример из книги:

    Код (Text):

    /
    * Использование стандартной функции ввода/вывода printf */
    #include <90s8515.h>  /
    #include <stdio.h>
    void main(void)
    {
    int x=83;  
    int y=0xA0;  
    float z=12.345678;
    UCR=0x8;
    UBRR=0x19;
    printf("%-5d ",x);
    printf("%06d\n",x);
    printf("%i %i\n",x,y);
    printf("%d=0x%x \t",y,y);
    printf("%d=0x%X\n",y,y);
    printf("%i=0x%x\n",x,x);
    printf("%c\n",x);
    printf("%e %.1e %2.2e\n",z,z,z);
    }
     
    Но компилятор ругается: картинку прилагаю. Примеров много в книге, а с каждым так разбираться - это беда ((( .И еще вопрос - как запустить такой пример в терминале???
     

    Вложения:

  2. Megakoteyka

    Megakoteyka Оракул Модератор

    А где на картинке ругань компилятора? Вы текст ошибки покажите.
     
  3. Максим B

    Максим B Гуру

    Извиняюсь, ночью заливал (((
     
  4. Максим B

    Максим B Гуру

    Build started 6.6.2014 at 23:55:34
    make: Makefile: No such file or directory
    make: *** No rule to make target `Makefile'. Stop.
    Build failed with 2 errors and 0 warnings...
     
  5. Максим B

    Максим B Гуру

    В include менял библиотеку и с avr и без нее (((
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    А проект как создавали?
    В какой версии AVR Studio работаете?
     
  7. Максим B

    Максим B Гуру

    AVR Studio 4.13 SP 1
     
  8. Максим B

    Максим B Гуру

    Вообще делал примеры из книги, которую советовали в других темах по изучению AVR (книга Лебедев М.Б. - CodeVisionAVR. Пособие для начинающих.). Хотелось бы увидите результат работы проги в "терминале" (((. Megakoteyka - может есть кака-нибудь другая литература, в которой примеры нагляднее ?
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    По литературе не скажу - обычно учусь по статьям из интернета. В CodeVisionAVR разбирался практически методом тыка, граблей вроде не встречал. Atmel Studio еще мучал, тоже все работало (и статьи по ней есть из серии "как установить, написать blink и прошить"), но она больно неповоротливая.
    Постараюсь завтра вечером что-нибудь путное найти по теме.
     
  10. Unixon

    Unixon Оракул Модератор

    Смотрите настройки проекта. У вас почему-то Makefile не создается.
     
  11. Максим B

    Максим B Гуру

    Одно из предположений - русские буквы в путях (((
     
  12. Максим B

    Максим B Гуру

    Скачал AtmelStudio 6. Код переделал под Attiny2313
    Код (Text):
    /*
    * GccApplication3.c
    *
    * Created: 08.06.2014 1:12:51
    *  Author: Maks
    */

    #include <stdio.h>
    #include <avr/io.h>

    int main(void)
    /* Основная функция программы */
    {
    int x=83;            // объявляем и инициализируем десятичным
    // значением целую переменную x
    int y=0xA0;        // объявляем и инициализируем шестнадцатиричным
    // значением целую переменную y
    float z=12.345678;    // объявляем и инициализируем переменную
    // с плавающей точкой z

    /* инициализируем UART AT90s8515: разрешим передатчик,
      запретим прерывания, данные - 8 бит */
    UCSRB=0x8;

    /* Скорость передачи Baud=9600 при тактовой частоте 4MHz */
    UBRRL=0x19;

    /* Функция printf является универсальной функцией форматных
      преобразований. Каждый знак % указывает, куда должен подставляться
      каждый из аргументов и в какой форме он должен выводиться.
      Количество % должно совпадать с количеством аргументов */

    printf("%-5d ",x);
    /* спецификация преобразования %-5d означает, что число x будет
      напечатано в поле шириной, по крайней мере, в пять символов
      (описатель width = 5)в десятичном виде (символ преобразования 'd').
      Если x имеет менее 5 цифр, то оно будет выровнено по левому краю
      (флаг '-'), а правая часть будет заполнена пробелами (т.к. в
      описатиле width в начале отсутствует 0).
      Таким образом, будет выведено: "83 " (три пробела) */

    printf("%06d\n",x);
    /* спецификация преобразования %06d\n означает, что число x будет
      напечатано в поле шириной, по крайней мере, в шесть символов
      (описатель width = 06)в десятичном виде(символ преобразования'd').
      Последовательность \n является обозначением 'символа новой строки',
      который служит указанием для перехода на терминале к левому краю
      следующей строки. Т.к. в предыдущем операторе отсутствует\n, то
      вывод будет осуществлен в той же строке, что и предыдущее значение.
      Если x имеет менее 6 цифр, то оно будет выровнено по правому краю
      (т.к. флаг отсутствует), а левая часть будет заполнена нулями (т.к.
      в описатиле width в начале стоит 0).
      Таким образом, будет выведено: "000083" */

    printf("%i %i\n",x,y);
    /* спецификация преобразования %i %i\n означает, что сначала будет
      выведено число x (флаги и описатель width отсутствуют) в десятичном
      виде (символ преобразования 'i'). Затем будетвыведен пробел, а
      затем число y (флаги и описатель width отсутствуют) в десятичном
      виде (символ преобразования 'i'). После этого будет осуществлен
      переход на новую строку (последовательность \n).
      Таким образом, будет выведено: "83 160", т.к. y=0xA0=160 */

    printf("%d=0x%x \t",y,y);
    /* спецификация преобразования %d=0x%x \t означает, что сначала будет
      выведено число y (флаги и описатель width отсутствуют) в десятичном
      виде (символ преобразования 'd'). Затем будет выведена
      последовательность "=0x", а затем число y (флаги и описатель width
      отсутствуют) в шестнадцатиричном виде символами нижнего регистра
      (символ преобразования 'x'). После этого будет выведен пробел и
      осуществлена табуляция, т.е. вывод еще нескольких пробелов
      (последовательность \t).
      Таким образом, будет выведено: "160=0xa0 " */

    printf("%d=0x%X\n",y,y);
    /* спецификация преобразования %d=0x%X\n означает, что сначала будет
      выведено число y (флаги и описатель width отсутствуют) в десятичном
      виде (символ преобразования 'd'). Затем будет выведена
      последовательность "=0x", а затем число y (флаги и описатель width
      отсутствуют) в шестнадцатиричном виде символами верхнего регистра
      (символ преобразования 'X'). Т.к. в предыдущем операторе
      отсутствует \n, то вывод будет осуществлен в той же строке, что и
      предыдущее значение. После этого будет осуществлен переход на новую
      строку (последовательность \n).
      Таким образом, будет выведено: "160=0xA0" */

    printf("%i=0x%x\n",x,x);
    /* спецификация преобразования %i=0x%x\n означает, что сначала будет
      выведено число x (флаги и описатель width отсутствуют) в десятичном
      виде (символ преобразования 'i'). Затем будет выведена
      последовательность "=0x", а затем число x (флаги и описатель width
      отсутствуют) в шестнадцатиричном виде символами нижнего регистра
      (символ преобразования 'x'). После этого будет осуществлен переход
      на новую строку (последовательность \n).
      Таким образом, будет выведено: "83=0x53", т.к. x=83=0x53 */

    printf("%c\n",x);
    /* спецификация преобразования %c\n означает, что будет выведено
      число x в виде символа ASCII (символ преобразования 'c'). После
      этого будет осуществлен переход на новую строку (последовательность
      \n).
      Таким образом, будет выведено: "S", т.к. десятичный код 83
      соответствует символу 'S' ASCII */

    printf("%e %.1e %2.2e\n",z,z,z);
    /* спецификация преобразования %e %.1e %2.2e\n означает, что сначала
      будет выведено число z (флаги и описатели width и precision
      отсутствуют) с 5 знаками (по умолчанию описатель precision = 5)
      после запятой в виде [-]d.ddddd e[-]dd (символ преобразования 'e'),
      причем будет осуществлено округление числа, т.к. в числе z после  
      запятой 6 знаков (флаги и описатели width и precision отсутствуют).
      Затем будет выведено число z с 1 знаком (описатель precision .1)
      после запятой в виде [-]d.d e[-]dd (символ преобразования 'e'),
      причем будет осуществлено округление числа. После этого будет
      выведено число z с 2 (описатель precision .2) знаками после запятой
      в виде [-]d.dd e[-]dd (символ преобразования 'e'), причем будет
      осуществлено округление числа. Описатель width = 2 здесь не имеет
      значения, он может быть любым или отсутствовать.
      После этого будет осуществлен переход на новую строку
      (последовательность \n).
      Таким образом, будет выведено: "1.23457e1 1.2e1 1.23e" */
    }
     
    Код скомпилился. Все ОК. Теперь другая проблема ((( В протеусе не получается смоделировать ((( Вставляю контроллер Mega8515 и подключаю к нему терминал. Но чуда не происходит. Вот файлы (https://cloud.mail.ru/public/43a75c6d5018/GccApplication3.rar)
     
  13. Максим B

    Максим B Гуру

    Ну вот никто не поможет (((
     
  14. Megakoteyka

    Megakoteyka Оракул Модератор

    Тут спецы по протеусу вроде толпами не бегали :)
    Попробуйте поискать форум, посвященный именно протеусу, там больше вероятность получить помощь.