Sublime Text 3 + arm-none-eabi-gcc настройка компилятора

Тема в разделе "Средства разработки для AVR/PIC/ARM/ПЛИС", создана пользователем koteika, 15 ноя 2014.

  1. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    Настройка компилятора в этой замечательной среде..

    Идем на сайт http://www.sublimetext.com/3 качаем Sublime Text 3.. Устанавливаем пакет..
    С новой версией появились и новые возможности!!!

    Качаем архив с шаблоном проекта и библиотекой, его прикреплю.. Разархивируем архив stm workspace.zip.

    В папке Project находятся наши проекты, в данном случае папка IOToggle(Простая мигалка светодиодами)..
    В папке Libraries находяться нужные компилятору библиотеки..
    С папкой Utilities еще не разбирался..

    В Sublime Text 3 нажимаем File -> Open Folder ищем папку с мигалкой и открываем ее..
    Видим следующее, в новой версии появилась возможность видеть дерево проект:
    Screenshot - 15.11.2014 - 00:25:03.png
    makefile:
    Код:
    TARGET=main
    EXECUTABLE=main.elf
    
    CC=arm-none-eabi-gcc
    LD=arm-none-eabi-gcc
    AR=arm-none-eabi-ar
    AS=arm-none-eabi-as
    CP=arm-none-eabi-objcopy
    OD=arm-none-eabi-objdump
    
    BIN=$(CP) -O ihex
    
    # Select the appropriate option for your device, the available options are listed below
    # with a description copied from stm32f10x.h
    # Make sure to set the startup code file to the right device family, too!
    #
    # STM32F10X_LD         STM32F10X_LD: STM32 Low density devices
    # STM32F10X_LD_VL    STM32F10X_LD_VL: STM32 Low density Value Line devices
    # STM32F10X_MD        STM32F10X_MD: STM32 Medium density devices
    # STM32F10X_MD_VL    STM32F10X_MD_VL: STM32 Medium density Value Line devices
    # STM32F10X_HD        STM32F10X_HD: STM32 High density devices
    # STM32F10X_HD_VL    STM32F10X_HD_VL: STM32 High density value line devices
    # STM32F10X_XL        STM32F10X_XL: STM32 XL-density devices
    # STM32F10X_CL        STM32F10X_CL: STM32 Connectivity line devices
    #
    # - Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
    #   where the Flash memory density ranges between 16 and 32 Kbytes.
    #
    # - Low-density value line devices are STM32F100xx microcontrollers where the Flash
    #   memory density ranges between 16 and 32 Kbytes.
    #
    # - Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
    #   where the Flash memory density ranges between 64 and 128 Kbytes.
    #
    # - Medium-density value line devices are STM32F100xx microcontrollers where the
    #   Flash memory density ranges between 64 and 128 Kbytes.
    #
    # - High-density devices are STM32F101xx and STM32F103xx microcontrollers where
    #   the Flash memory density ranges between 256 and 512 Kbytes.
    #
    # - High-density value line devices are STM32F100xx microcontrollers where the
    #   Flash memory density ranges between 256 and 512 Kbytes.
    #
    # - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where
    #   the Flash memory density ranges between 512 and 1024 Kbytes.
    #
    # - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
    #
    # HSE_VALUE sets the value of the HSE clock, 8MHz in this case
    
    DEFS = -DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD_VL -DHSE_VALUE=8000000
    STARTUP = ../../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md_vl.s
    
    MCU = cortex-m3
    MCFLAGS = -mcpu=$(MCU) -mthumb -mlittle-endian -mthumb-interwork
    
    STM32_INCLUDES = -I../../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/ \
        -I../../Libraries/CMSIS/CM3/CoreSupport/ \
        -I../../Libraries/STM32F10x_StdPeriph_Driver/inc/
    
    OPTIMIZE       = -Os
    
    CFLAGS    = $(MCFLAGS)  $(OPTIMIZE)  $(DEFS) -I. -I./ $(STM32_INCLUDES)  -Wl,-T,stm32_flash.ld
    AFLAGS    = $(MCFLAGS)
    
    SRC = main.c \
        stm32f10x_it.c \
        system_stm32f10x.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/misc.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c \
        ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c
    
    OBJDIR = .
    OBJ = $(SRC:%.c=$(OBJDIR)/%.o)
    OBJ += Startup.o
    
    all: $(TARGET).hex
    
    $(TARGET).hex: $(EXECUTABLE)
        $(CP) -O ihex $^ $@
    
    $(EXECUTABLE): $(SRC) $(STARTUP)
        $(CC) $(CFLAGS) $^ -lm -lc  -o $@
    
    clean:
        rm -f Startup.lst  $(TARGET)  $(TARGET).lst $(OBJ) $(AUTOGEN)  $(TARGET).out  $(TARGET).hex  $(TARGET).map \
         $(TARGET).dmp  $(EXECUTABLE)
    

    Далее выбираем то чем будем компилировать: Tools -> Build System выбираем make

    Компилируем нажав Build

    Лог компиляции:
    Код:
    arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -mlittle-endian -mthumb-interwork  -Os  -DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD_VL -DHSE_VALUE=8000000 -I. -I./ -I../../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/ -I../../Libraries/CMSIS/CM3/CoreSupport/ -I../../Libraries/STM32F10x_StdPeriph_Driver/inc/  -Wl,-T,stm32_flash.ld main.c stm32f10x_it.c system_stm32f10x.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/misc.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_adc.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_bkp.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_can.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_cec.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_crc.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dac.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dbgmcu.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_dma.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_exti.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_flash.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_fsmc.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_i2c.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_iwdg.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_pwr.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rtc.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_sdio.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_spi.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_tim.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c ../../Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_wwdg.c ../../Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc_ride7/startup_stm32f10x_md_vl.s -lm -lc -o main.elf
    arm-none-eabi-objcopy -O ihex main.elf main.hex
    [Finished in 9.8s]
    Получаем файлы прошивки..

    Но есть одно.. после прошивки светодиоды должны мигать, а они рандомно горят. окончилась запись, загорается один светодиод и ноль реакции. То синий то зеленый... иногда не чего не горит..

    Лог прошивки:
    Код:
    $ ./st-flash write main.hex 0x8000000
    2014-11-15T00:55:41 INFO src/stlink-common.c: Loading device parameters....
    2014-11-15T00:55:41 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device, id 0x10016420
    2014-11-15T00:55:41 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
    2014-11-15T00:55:41 INFO src/stlink-common.c: Attempting to write 48494 (0xbd6e) bytes to stm32 address: 134217728 (0x8000000)
    Flash page at addr: 0x0800bc00 erased
    2014-11-15T00:55:44 INFO src/stlink-common.c: Finished erasing 48 pages of 1024 (0x400) bytes
    2014-11-15T00:55:44 INFO src/stlink-common.c: Starting Flash write for VL/F0/F3 core id
    2014-11-15T00:55:44 INFO src/stlink-common.c: Successfully loaded flash loader in sram
    47/47 pages written
    2014-11-15T00:55:49 INFO src/stlink-common.c: Starting verification of write complete
    2014-11-15T00:55:50 INFO src/stlink-common.c: Flash written and verified! jolly good!
    
    Выходит компилируется не так? Либо я шью не так. Та же самая программа скомпилированная(прошивка в формате bin) в винде работает без проблем..

    Или дело в том что утилите нужно скормить bin файл? а я заливаю hex.. хотя разницы не должно быть..

    P.S. черег gdb можно же elf и hex прошить..
    P.S.S. Моск не варит.. Пойду спать..

    Вложения:

  2. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    Дерево проектов и в 2-ке можно видеть. А если попробовать без оптимизации скомпилировать? Сейчас -Os стоит, по размеру оптимизация.
    Здесь разве не надо раскоментировать строку нужную?
    Код:
    # STM32F10X_LD         STM32F10X_LD: STM32 Low density devices
    # STM32F10X_LD_VL    STM32F10X_LD_VL: STM32 Low density Value Line devices
    # STM32F10X_MD        STM32F10X_MD: STM32 Medium density devices
    # STM32F10X_MD_VL    STM32F10X_MD_VL: STM32 Medium density Value Line devices
    # STM32F10X_HD        STM32F10X_HD: STM32 High density devices
    # STM32F10X_HD_VL    STM32F10X_HD_VL: STM32 High density value line devices
    # STM32F10X_XL        STM32F10X_XL: STM32 XL-density devices
    # STM32F10X_CL        STM32F10X_CL: STM32 Connectivity line devices
  3. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    GDB прикрутить с нормальной отладкой это вообще отдельная тема, для gdb elf файл нужен.
    koteika нравится это.
  4. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    Во втором может просто не юзал я...

    Попробую раскоментировать, хотя это вроде обычные комментарии..

    elf файл есть.. получается после компиляции тольке hex и elf.. надо bin получить еще.. ночь длинная, буду мучить дальше..
  5. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    В общем не дождался я ночи и все таки осилил) Теперь прошивается и компилируется как надо.. Поправил makefile, теперь создает файл прошивки bin и файл elf нужный для gdb... Теперь он выглядит так:

    Код:
    CC=arm-none-eabi-gcc
    OBJCOPY=arm-none-eabi-objcopy
    
    DEF_CFLAGS=-g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc
    DEF_CFLAGS+=-I../libs_stm/inc/base
    DEF_CFLAGS+=-I../libs_stm/inc/core_support
    DEF_CFLAGS+=-I../libs_stm/inc/device_support
    DEF_CFLAGS+=-L../startup_files
    
    # to run from SRAM
    # make BOOT_FLASH=0
    BOOT_FLASH?=1
    ifeq ($(BOOT_FLASH),1)
        LINK_TYPE=flash
    else
        LINK_TYPE=sram
        CFLAGS+=-DCONFIG_BOOT_SRAM=1
        # This keeps the standard system_xxx files from doing any damage...
        CFLAGS+=-DVECT_TAB_SRAM
    endif
    
    
    CFLAGS_VL=$(DEF_CFLAGS) -mcpu=cortex-m3 -DCONFIG_STM32VL_DISCOVERY=1 -DSTM32F10X_MD_VL
    
    all: main_32VL.bin
    
    
    %.bin: %.elf
        $(OBJCOPY) -O binary $^ $@
    SRCS=main.c ../startup_files/cm3_genstartup.c
    
    main_32VL.elf: $(SRCS)
    
    clean:
        rm -rf *.elf
        rm -rf *.bin
    
    .PHONY: all clean
    

    Так же поправил шаблон проекта, прикрепил в архиве. Папка blink наш проект, остальные папки это папки библиотек..

    Тестовая программа:
    Код:
    #include "stm32f10x.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_gpio.h"
    
    void init_leds();
    void init_button();
    
    int main(void)
    {
      init_leds();
      init_button();
        while(1)
        {
          if((GPIOA->IDR & 0x01) == 0x01)
          {
            GPIOC->ODR = GPIO_ODR_ODR9;
          }
          else
          {
            GPIOC->BSRR = GPIO_BSRR_BR9;
          }
          if((GPIOB->IDR & 0x04) == 0x04)
          {
            GPIOC->ODR = GPIO_ODR_ODR8;
          }
          else
          {
            GPIOC->BSRR = GPIO_BSRR_BR8;
          }
        }
    }
    
    void init_leds()
    {
      RCC->APB2ENR |= RCC_APB2Periph_GPIOC;
      GPIOC->CRH |= 0x33;
      GPIOC->CRH &= ~0xcc;
    }
    
    void init_button()
    {
       RCC->APB2ENR |= RCC_APB2Periph_GPIOA;
       GPIOA->CRL |= 0x04;
       GPIOA->CRL &= ~0xb;
    
       RCC->APB2ENR |= RCC_APB2Periph_GPIOB;
       GPIOB->CRL |= 0x100;
       GPIOB->CRL &= ~0xe00;
    }
    

    Лог компиляции:
    Код:
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -I../libs_stm/inc/base -I../libs_stm/inc/core_support -I../libs_stm/inc/device_support -L../startup_files -mcpu=cortex-m3 -DCONFIG_STM32VL_DISCOVERY=1 -DSTM32F10X_MD_VL -Wl,-T,stm32f100xb_flash.ld main.c ../startup_files/cm3_genstartup.c -o main_32VL.elf
    arm-none-eabi-objcopy -O binary main_32VL.elf main_32VL.bin
    [Finished in 0.3s]
    Скрин)
    Screenshot - 15.11.2014 - 21:05:05.png

    Вложения:

  6. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    Попробовал я скомпилировать проект #chibios в #sublime под виндой и получаю ошибку:
    Код:
    collect2.exe: error: ld returned 1 exit status
    make: *** [build/chibios-imu.elf] Error 1
    error make chibios.png

    Вот вывод версий компилятора и утилиты make:

    make version.png

    Тот же код нормально компилируется в Chibi Studio
  7. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    Обновление make с версии 3.8 до 4.1 не помогло :(
    Теперь спотыкается на создании .elf файла:
    Код:
    ../chibios/os/ports/GCC/ARMCMx/rules.mk:210: recipe for target 'build/chibios-imu.elf' failed
    Последнее редактирование: 23 июн 2015
  8. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    make кривой видимо, надо полностью смотреть. в винде делаешь? переменные путей запилил? вроде патч енварионмент зовутся.

    компилятор arm-none-eabi-gcc? я седня запиливал его под винду, пока под правами админа и переменные не запилил не заработал...

    под виндой намного проще настроить мне кажется)))
  9. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    вывод компилятора не увидел, значит компилятор нормально запилен. остается только майк файл править..
  10. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.592
    Симпатии:
    357
    Адрес:
    Алматы
    В общем вопрос решился версией 3.82 make.exe
    Теперь надо адекватный дебаг настроить и можно нормально программить.
    Последнее редактирование: 24 июн 2015
  11. Сергий

    Сергий Живет здесь

    Сообщения:
    57
    Симпатии:
    8
    Ух ты не знал, что sublime text так приспосабливается под программирование микроконтроллеров, круто :)
  12. koteika

    koteika В доску свой

    Сообщения:
    768
    Симпатии:
    118
    Род занятий:
    программирование
    Данный шаблон и мейкфайл заработал без переделки на виндовсе, установил только компилятор и cygwin отсюда
    Последнее редактирование модератором: 1 июл 2017

Поделиться этой страницей