Ответы пользователя по тегу Atmel AVR
  • Avr-gcc почему не работает обращение к полям структуры по индексу в цикле?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    если просто вручную написать обращение по индексу, то всё работает корректно
    Почему такое может быть

    Если посмотреть в сгенерированный код (я компилировал командой
    avr-gcc -mmcu=atmega2560 -DF_CPU=8000000 -fverbose-asm -S test.c
    ), то можно увидеть, что он не обращается к массиву power_5v, а все константы просто подставлены как непосредственные значения в инструкции. Я думаю, что по этой причине.

    как это исправить

    Нужны детали: версия компилятора, опции компиляции.
    Ответ написан
    Комментировать
  • Почему биты в регистре архитектуры AVR заносяться именно посредством сдвига 1 на этот бит влево?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему нельзя занести этот бит в регистр без сдвига, зачем это придумано
    UCSRA |= (1<<U2X);

    В заголовочных файлах U2X определён как "номер бита U2X в регистре UCSRA", т.е. 1.
    Если бы U2X был определён как "битовая маска поля U2X в регистре UCSRA" (т.е. 2), то все бы писали UCSRA |= U2X;. В ассемблерном коде avr оба эти варианта превратятся в инструкцию sbi UCSRA, 1, устанавливающую бит в регистре по номеру.

    Имея номер бита перевести его в битовую маску гораздо легче, чем наоборот, из маски вывести номер бита (который, в общем случае, может быть и не один), я думаю, что отчасти поэтому у программистов работающих с железом есть тенденция определять поля регистров через номера битов.
    Ответ написан
    Комментировать
  • В чем проблема в коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    пока z не сделаетется в 1024/1000000*255*20 секунд ждем
    while (z < 21) 
    {   
        if (TCNT0 == 255) 
        {
            z++;    
        };
    };

    Русским языком говоря , нажал кнопку подождал примерно 5.2 с

    Не, ты тут подождал какое-то другое время. Потому что если в таймер заходит clkio/1024, то TCNT будет равен 255 далеко не один цикл.

    Код не работает в протеусе и сыплет ошибками

    Ну так он же пишет тебе адрес, PC=0x005e, посмотри что по этому адресу происходит.
    Ответ написан
  • В чем моя ошибка в AVR, где я должен зациклить, или что вообще сделать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вот где код вырывается в память 0xfffff

    Вот в конце же, после последнего nop.
    Ответ написан
    Комментировать
  • Как задать значение переменной в SRAM при ее объявлении?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Фактически, по адресу 0x0060 лежит какой-то мусор, который никак не относится к тому, что я туда хотел положить.

    Откуда взялся адрес 0x0060 и как вы поняли что там лежит?

    TL;DR: код копирующий данные из FLASH в SRAM и обнуляющий .bss не линкуется по умолчанию. gcc вставляет ссылку на неопределённые символы __do_copy_data и __do_clear_bss в каждую единицу трансляции, в которой определяются объекты в секции .data и .bss соответственно. В написанных руками ассемблерных файлах их можно упомянуть явно.
    Ответ написан
  • Какой микроконтроллер AVR выбрать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Схема подключения:

    Где на этой схеме AVR? Это "схема управления" или что-то ещё?

    В микроконтроллерах понимания ноль

    Но со здравым смыслом-то всё в порядке? Надо рассмотреть все стрелочки входящие и выходящие из AVR на схеме и ответить на вопрос: что они собой представляют. Какой это интефейс? Следующий шаг -- найти AVR у которого есть столько интерфейсов такого типа, либо решить, как будут мультиплексироваться имеющиеся интерфейсы.
    Ответ написан
    Комментировать
  • Где найти информацию об архитектуре AVR?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    я хочу написать эмулятор микроконтроллера данной архитектуры, приближенный к МК ATmega 328... эмулятор данного МК должен быть весьма полезным для разработки.

    Не надо писать уже много раз написанное.
    Ответ написан
    Комментировать
  • Лучшая IDE для разработки под AVR на C?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    vim + avr-gcc + make + gdb
    Ответ написан
    Комментировать
  • Проверите программу вычисления среднего арифметического на Assembler?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    чисел, которые находятся в памяти данных.

    Где загрузка данных и памяти в регистры?
    Почему все brcc переходят на add_8?
    Почему в следующем фрагменте и из младшего и из старшего байта суммы вычитается counter?
    sub sum_l,counter
        sbc sum_h,counter

    Почему из цикла деления выход только при переносе в минус? Что если разделится нацело?
    Ответ написан
    Комментировать
  • Ошибка типа в unknown type name 'uint_farptr_t', кто сталкивался?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Покажи свой main.c, команду компиляции и полный текст ошибки.
    Ответ написан
    Комментировать
  • Почему не происходит ошибки при объявлении переменной в .h файле?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Так можно делать в С, это tentative definition, объект обявленный таким образом попадает в область общих данных. При линковке одноимённые объекты в этой области становятся одним объектом.
    В С++ так делать нельзя.

    Правильно в хедере писать extern int var, а объявление делать в каком-либо .с файле

    extern int var -- это и есть объявление. Правильно определение делать в одном .c файле.
    Ответ написан
    Комментировать