Кстати про симуляцию.

Тема в разделе "Флудилка", создана пользователем Igor68, 16 ноя 2018.

  1. Igor68

    Igor68 Гуру

    Ну или опять Keil.
    Понимаю, что под виндой, но виртуальной виндой. Собственно её (винду) и держу ради нескольких программ.
    Бывает, что устройства в сборе нет... да и отладить надо только контроллер, точнее прошивку для него. Ну и:
    Тут надо посмотреть динамику выполнения, точнее изменения параметра программой
    Снимок4.PNG

    Тут смотрим загрузку ядра функциями программы в динамике
    Снимок5.png

    Тут используем функционал виртуальных кнопок, которые в динамике могут изменять параметры в программе. А синтаксис функций как в Си:)
    Снимок6.PNG

    Тут смотрим состояние регистров и параметров и по желанию изменяем их Снимок7.PNG

    Для ряда микроконтроллеров имеется и эмуляция внутренней периферии. Часто выставляя флаги в этих устройствах подбирают нужную конфигурацию, а код можно менять прямо из отладки. Правда для вступления изменений в силу надо перекомпилировать:
    Снимок8.PNG
     
    Последнее редактирование: 16 ноя 2018
    ИгорьК и DetSimen нравится это.
  2. parovoZZ

    parovoZZ Гуру

    а где сетуп залуп?
     
  3. Igor68

    Igor68 Гуру

    А сетуп с таблэткой нада?
     
  4. Igor68

    Igor68 Гуру

    Посмотрите там Keil uV4, а в ходу уже uV5 и он ныне моден. В поисковике было. А начинал я с uV3. Они все под ARM, а вот uV2 был для 51-го ядра (ныне АВР). На оф. сайте есть
    http://www.keil.com
    а вот таблэтки в других местах
     
  5. Igor68

    Igor68 Гуру

    Вот любителей STM32 порадует не очень. Почему? А потому, что данный производитель действительно как сосиски штампует контроллеры и при этом документация такова, что там много неточностей. И потом поправки в документации. А симуляторы по 1000 раз для этого никто не будет переделывть и Keil не исключение. И так:
    1. Создаём проект и выбираем устройство:
    Снимок47.JPG
    Снимок48.JPG

    2 Нам предлагается установить шаблонный стартовый файл на ассемблере именно для выбранного устройства (рассмотрим его самого позже). И соглашаемся. Хотя можете или потом добавить, либо сделать.
    Снимок50.JPG
    Снимок51.jpg

    3 Сделаем новый файл, сохраним его с расширением Си, напишем функцию main, а потом добавим его в проект
    Снимок52.jpg

    И что? Компилируем эту пустышку:
    Снимок54.JPG

    И имеем сообщение про SystemInit как раз в стартовом файле. Да верно нужна функция начальной настройки.
    ....
     

    Вложения:

    Последнее редактирование: 17 ноя 2018
    ИгорьК нравится это.
  6. Igor68

    Igor68 Гуру

    ...
    Но идём в директорию куда встал Keil и находим такой файл, где есть эта функция
    4. Копируем его к себе в проект:
    Снимок55.jpg

    5 И опять не то, он выведет нас на заголовочный файл (который лучше сохранить к себе в проект и в нём делать изменения - не надо мусорить!)
    Снимок56.jpg

    Надо только выбрать тип устройства.
    Тут всё откомпилировалось!
    ...
    Кстати рекомендую посмотреть приметы, коих там куча! Да именно примеры!
     
    Последнее редактирование: 17 ноя 2018
  7. parovoZZ

    parovoZZ Гуру

    Мне VS ближе как-то
    https://adelectronics.ru/2018/06/16/visual-studio-2017-написание-и-отладка-проекта-для-soc/

    это бич всех производителей. Ради интереса полистал MSP430 - такое ощущение, что одни выжимки. У атмела с новыми МК таже история.
     
  8. Igor68

    Igor68 Гуру

    да работа с редактором удобна и интерактивная подсказка и сразу доступ к структуре. Знаю. А вот без JLink как? Именно не как среда разработки, а как симулятор? С JTag и т.п. всё понятно:
    Снимок58.JPG
    По поводу выбора компилятора:
    Снимок57.JPG
    выбрав GCC укажите соответственно путь к нему

    Тут спора нет
    Верно, но только правила для периферии почти все повторяются (регистры и т.п.) от одного МК к другому МК. Зачастую меняются только одни адреса регистров, но вот биты в них чаще одни и те же. Складывается впечатление, что зачастую сами периферийные устройства одни и те же. А зачем к примеру менять GPIO ну или ADC если их параметры идентичны? Соответственно и биты фланов и т.п. идентичны.
     
  9. parovoZZ

    parovoZZ Гуру

    atmega и atxmega имеют абсолютно разные названия регистров, хотя обе 8-ми битки и в чем-то похожи.
     
  10. Igor68

    Igor68 Гуру

    Почему-то так и думал услышать подобное:)
    Слово почти или многие похоже отсутствуют в Великом и Могучем:). А про восьмибитки вообще ничего сказать не могу вообще. Почти не знаком на таком уровне. Подразумеваю только ARM/Cortex AT91SAM7S64(256) и AT91SAM3U4E к примеру. И не говорю что все совпадают... разное расположение по адресам, но многие внутренние периферийные устройства вообще идентичны. А вот про STM такого не скажу, хоть и не пользую... но мой коллега по работе пересел на них и совсем не доволен именно в поддержке этих устройств. А симуляцию он и вовсе не применяет. Но он талантливый и опытный и не только в этой теме.
    А тут я говорил про симуляцию... на Keil. Кстати в Proteus много АВРок, и даже дуня есть. Можно и схему там сваять да и указать файл прошивки. Жаль с ARM/Cortex там совсем бедно, что и побуждает на подобную симуляцию с помощью Keil для наглядности. А вообще сам везде использую метод условной компиляции, где добавляю "лишний" код при компиляции для отладки. При нужде вывод параметров в консоль и т.п.:) Трудоёмко, но помогает... особенно если нет средств пошаговой отладки или иной любой.
     
  11. Igor68

    Igor68 Гуру

    Снимок59.JPG

    Вот выдавливаю из ADuC7024 всё, что возможно.
    Тут прерывание FIQ
    Код (C++):
    /*
    ****************
    * работа от T1 *
    ****************
    */

    void FIQ_Handler (void) __irq  
    {
        PWMA        = *pw_addr;
        if(flag1 & _adc_start)
        {
            //*dat_addr = (((ADCDAT >> 16) & 0x0FFF) + *dat_addr) >> 1;
            *dat_addr = ((ADCDAT >> 16) & 0x0FFF);
            dat_addr++;
            if(!(dat_addr < max_dat_addr))
                dat_addr = dat_addr_null;      
        }
        pw_addr++;
        if(!(pw_addr < max_pw_addr))
        {
            pw_addr = &pw[0];//pw_addr_nul;
            if(flag1 & _adc_start)
                flag1 &= (~(_adc_start | _adc_on));
            else if(flag1 & _adc_on)
                flag1 |= _adc_start;
        }  
        T1CLRI = 0x01;
    }
    Видно, что это прерывание срабатывает в симуляторе 2.04e-5 секунд, а в регистр T1LD(регистр таймера) загружается 0х0354. Это для формирования синусоиды из 15 точек(по времени). Интервал между точками 25.714 градусов. А заданная частота для подсчёта 3500 Гц. В понедельник испытаю в реале. Время на IRQ сократил (там по 3-м таймерам) с одним вектором на всех(надо анализировать по флагам). Заменил где можно if на case. Кстати очень большая разница по времени выполнения. Теперь IRQ требует меньше времени выполнения чем main. Кстати основные вычисления в IRQ.
     
  12. Igor68

    Igor68 Гуру

    А тут
    Снимок60.JPG

    можно и посмотреть количество вызовов функций и занятое время на их выполнение.