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

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



EmBitz

Сообщений 1 страница 15 из 15

1

Предлагаю здесь обсуждать среду программирования EmBitz.

0

2

Недавно вышла новая версия 1.00.
Список изменений.

- Toolchain 5.4
- EB monitor - Alternative for Semihost stdin/stdout
- Lot of bug fixes

- Компилятор GCC обновился до версии 5.4.
- Немного изменился метод отладочного вывода данных Semihosting.
- Исправлены найденные ошибки.

Сейчас сайт перегружен, но тем не менее, архив скачать можно http://www.emblocks.com/web/downloads-main

+2

3

Один из недостатков этой IDE в том что отсутсвуют инструменты для прошивки МК и чтобы это сделать из среды, приходится запускать сессию отладки (перед которой выполняется прошивка если она необходима). Чтобы исправить это, добавим в среду инструмент "Flash". Нужно извлечь файлы из архива в папку в которой установлен EmBitz http://pure-basic.narod.ru/forum_files/ … _flash.zip
Затем запустить среду и в меню "Инструменты" кликнуть по "Конфигурировать инструменты". В окне кликнуть по кнопке "Добавить" и заполнить поля как на скриншоте.

Свернутый текст

http://s1.uploads.ru/X2tzx.png

Строка из поля "Параметры"

-c swd srst -p "${PROJECT_DIR}${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.hex" -Rst

Теперь сохраняем и при необходимости прошивки, кликаем в меню по пункту "Flash" и ждем ее окончания. :)

Свернутый текст

stdout> STM32 ST-LINK CLI v3.0.0.0
stdout> STM32 ST-LINK Command Line Interface
stdout>
stdout> ST-LINK SN :
stdout> ST-LINK Firmware version : V2J28S6
stdout> Connected via SWD.
stdout> SWD Frequency = 4000K.
stdout> Target voltage = 3.3 V.
stdout> Connection mode : Normal.
stdout> Device ID:0x444
stdout> Device flash Size : 16 Kbytes
stdout> Device family :STM32F030x4/F030x6
stdout>
stdout> Loading file...
stdout> Flash Programming:
stdout>   File : E:\STM32\Test\Test.hex
stdout>   Address : 0x08000000
stdout> Memory programming...
stdout> ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± 0%
stdout>  0%ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ 100%
stdout> Memory programmed in 0s and 780ms.
stdout> Programming Complete.
stdout>
stdout> MCU Reset.

+2

4

Спасибо, Пётр! пригодится!
информация лишней не бывает

0

5

Расскажу как уменьшить размер прошивки, компилируемой из файлов Куба. Для примера возьмем этот код USB - PWM
В исходном варианте результат компиляции таков

Код:
Program size (bytes):   10916
Data size    (bytes):    1300
BSS size     (bytes):    3988

Total size   (bytes):   16204   (R/W Memory: 5288)

Это значит что скомпилированный код имеет размер 10916 байт и кроме того в прошивку входит "Data size" информация из которой потом копируется в ОЗУ инициализируя переменные и общий размер прошивки составляет 12216 байт. В этой области памяти как раз и заключается проблема, потому что она занимает много места (больше килобайта) как во Falsh так и в ОЗУ. Будем это исправлять.
Открываем файл stm32f103cb_flash.ld (для других моделей МК его имя будет отличаться) находящийся в папке проекта. В нем находим строки

Код:
/* Remove information from the standard libraries */
  /DISCARD/ :
  {
    libc.a ( * )
    libm.a ( * )
    libgcc.a ( * )
  }

и удаляем их.

После этого результат компиляции будет таким.

Код:
Program size (bytes):   10664
Data size    (bytes):     232
BSS size     (bytes):    3988

Total size   (bytes):   14884   (R/W Memory: 4220)

Получилось сэкономить 1320 байт flash и 1068 байт ОЗУ.

+2

6

В предыдущем сообщении речь шла о размере прошивки. Продолжим. Размер прошивки при неизменном коде зависит от уровня оптимизации кода и некоторых других параметров. Давайте рассмотрим сколько байт займет прошивка скомпилированная из этого кода при разных уровнях оптимизации.
Сперва вообще отключим оптимизацию

Скриншот

http://s50.radikal.ru/i128/1611/30/eccc5f85217a.png

получим такой результат

Код:
Program size (bytes):    1800
Data size    (bytes):     104
BSS size     (bytes):      28

Total size   (bytes):    1932   (R/W Memory: 132)

Код занял 1800 байт.
Теперь включим оптимизацию по размеру.

Скриншот

http://s017.radikal.ru/i404/1611/02/a65ec4b5f624.png

Размер скомпилированного кода заметно уменьшился.

Код:
Program size (bytes):    1340
Data size    (bytes):     104
BSS size     (bytes):      28

Total size   (bytes):    1472   (R/W Memory: 132)

Но и это не предел. На вкладке "Linker setting" включаем "Link time optimization"

Скриншот

http://s020.radikal.ru/i712/1611/f6/b8c971e337e0.png

Что позволит уменьшить размер прошивки на 188 байт.

Код:
Program size (bytes):    1152
Data size    (bytes):     104
BSS size     (bytes):      28

Total size   (bytes):    1284   (R/W Memory: 132)

Но и это не все. Если открыть map файл где содержится информация о распределении памяти, то можно увидеть что часть памяти занимают системные библиотеки, которые не используются в коде. Например

Код:
 *(.text*)
 .text          0x080000ec       0x5c c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7-m/crtbegin.o
 .text          0x08000148       0x74 c:/program files (x86)/embitz/1.00/share/em_armgcc/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7-m/crt0.o

Только эти две библиотеки не понятно для чего добавили 0x5c + 0x74 = 208 байт в прошивку.
Сообщим компилятору чтобы он не использовал стандартные библиотеки, добавив ключ -nostdlib

Скриншот

http://s019.radikal.ru/i621/1611/e2/ecf8dbfee0d1.png

И прошивка еще уменьшится на 388 байт. Кроме того, освободиться оперативная память (секции Data и BSS).

Код:
Program size (bytes):     764
Data size    (bytes):       0
BSS size     (bytes):       0

Total size   (bytes):     764   (R/W Memory: 0)

Несколько слов о том как работает оптимизация. Упрощенный код "мигалки" светодиодом.

Код:
void Delay(volatile uint32_t nCount) {
	for (; nCount != 0; nCount--);
}

int main(void)
{
   // Здесь был код настройки порта.

    while(1)
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13);
        Delay(2000000);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13);
        Delay(2000000);
    }
}

Если код скомпилировать (естественно не этот упрощенный а полнофункциональный с настройкой порта), то как и ожидалось светодиод будет мигать. Но если в функции Delay убрать спецификатор volatile

Код:
void Delay(uint32_t nCount) {
	for (; nCount != 0; nCount--);
}

и на первый взгляд ничего не должно измениться, то работа программы будет нарушена. Вместо мигания, светодиод будет светить в "пол накала" и размер прошивки уменьшится на 20 байт. В чем дело? А дело в оптимизаторе, который при таком раскладе (отсутствии спецификатора volatile) начинает оптимизировать функцию. В первую очередь оптимизатор "видит" что переменная nCount в цикле в конечном итоге будет равна нулю, а цикл пустой и оптимизатор решает что цикл не нужен и выкидывает его, а переменную обнуляет. Дальше оптимизатор "видит" что переменная нигде не используется, а значит не нужна и выкидывает ее. После оптимизатор обнаруживает что функция без цикла и переменной ничего не делает, а значит не нужна и выкидывает ее из кода и ее вызовы тоже. В конечном итоге после оптимизации код становится таким.

Код:
int main(void)
{
   // Здесь был код настройки порта.

    while(1)
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13);
    }
}

Т. е. отсутствует функция Delay и ее вызовы. Думаю теперь понятно почему светодиод светит в "пол накала" и размер прошивки уменьшится на 20 байт - оптимизатор решил что функция Delay не нужна и выкинул ее. Спецификатор volatile предотвращает это указывая компилятору что все что так или иначе связанно с переменной nCount оптимизировать не нужно.

+3

7

На видео показано как получить SVD файл (необходим для просмотра регистров МК) и пошагово выполнить программу с просмотром регистров и переменных.

+1

8

В EmBitz есть проверка орфографии, но по умолчанию только для английского. Нам же нужен русский (но при необходимости можно добавить поддержку и других языков). Для этого содержимое архива нужно извлечь в папку

Папка_EmBitz\share\EmBitz\SpellChecker\

Потом нужно зайти в настройки редактора (меню Настройки пункт Editor) и в разделе SpellChecker, в списке выбрать ru_RU.

http://s5.uploads.ru/bHIAK.png

Вот как это работает.

http://s3.uploads.ru/bQ7zT.png

+1

9

то есть, он будет ругаться и на все имена переменных, подпрограмм?

0

10

Если они будут закомментированы то да. Орфография проверяется только в комментариях.

0

11

понял, спасибо!

0

12

Иногда кроме hex файла нужен bin файл. Один из способов его получить - нужно в настройках проекта, во вкладке "Pre/post build steps" в области "Выполнить после сборки" выбрать с выпадающем списке строку "Only on build" и в поле скопировать команду

arm-none-eabi-objcopy -O binary $(TARGET_OUTPUT_DIR)\$(TARGET_OUTPUT_BASENAME).elf $(TARGET_OUTPUT_DIR)\$(TARGET_OUTPUT_BASENAME).bin

Скриншот

http://s6.uploads.ru/NcdyP.png

bin файл будет создан рядом с hex файлом.

0

13

Добавление прошивателя и отладчика EBlink в EmBitz 1.11.
Нужно распаковать архив в папку в которой установлен EmBitz. После этого станет доступным интерфейс отладчика EBlink, который можно выбрать в окне Debug interface options, котрое открывается из меню Debug -> Interfaces.

Свернутый текст

http://d.radikal.ru/d03/1912/20/6013becb91a0.png

Кнопка Setting откроет настройки EBlink.

Свернутый текст

http://c.radikal.ru/c25/1912/ac/d70935ea2266.png

Для прошивки нужно добавить инструмент как написано в 3 сообщении. Но параметры немного другие.

Свернутый текст

http://c.radikal.ru/c13/1912/05/1c2b96c78718.png

Командная строка

Код:
-I stlink,swd -S stm32-auto -a -F verify,run,file="${PROJECT_DIR}${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.hex"

Может у кого возникнет вопрос, чем EBlink лучше STLinkGDB который сейчас используется? Тем что поддерживает больше моделей МК в том числе недавно появившиеся H7, G0 и G4.

+2

14

На официальном форуме выложено обновление для EmBitz 1.11. https://www.embitz.org/forum/thread-12.html
Оно добавляет поддержку почти всех существующих на данный момент STM32.
Это семейства STM32F0, STM32F1, STM32F2, STM32F3, STM32F4, STM32F7, STM32H7, STM32L0, STM32L1, STM32L4, STM32L4+, STM32L5, STM32G0, STM32G4 и STM32WB.
При создании проекта можно выбрать библиотеку SPL, HAL или LL.

0

15

EmBitz обновился до версии 2.0 https://www.embitz.org/
Залил на диск https://disk.yandex.ru/d/oxJiAfUWFPIJzQ

Изменение этой версии https://embitz.org/forum/thread-51.html

Добавили поддержку новых МК.
Обновили компилятор до версии 9.3.1
Для отладки теперь используется GDB сервер EBlink. Через него же заливаются и считываются прошивки с МК.
Добавлена возможность подключения к МК "на лету" (меню Debug -> Target Hotplug). Может пригодится при поиске причин зависания или неправильной работы. Кратко я об этом писал в этой теме Отладка программы

+2