STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Impartial писал(а):
aftaev писал(а):100 светодиодов потянет, по одному светодиоду на одной ноге STM32 ?
Потянет, если ток через каждый будет 0,25ма.
Потянет, если ток каждого не будет превышать 6 ма. Т.к. ноги питания допускают по 150 ма, а каждая обычная нога порта - по 25 ма.

Если нужен больший ток, то можно схитрить, и подключить светодиоды в шахматном порядке - подвигу между плюсом и выводом, а вторую половину между нулем и выводом.
Тогда, при любом включении светодиодов можно будет получить не менее 12 ма на каждый.
Ну, и, конечно, нельзя забывать про резисторы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Похоже, BOOT0 нужно к нулю подтянуть,
а NRST в инструкции советуют конденсаторов шунтировать (не знаю правильное слово) на землю.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Может у меня размер прошивки в память не влазит?
Может быть я неправильно читаю цифры?

Где здесь размер программы?

Код: Выделить всё

GCC HOME: C:\CooCox\CoIDE\GCC\bin
compile:
    [mkdir] Skipping C:\CooCox\CoIDE\workspace\test\test\Debug\bin because it already exists.
    [mkdir] Skipping C:\CooCox\CoIDE\workspace\test\test\Debug\obj because it already exists.
       [cc] Starting dependency analysis for 9 files.
       [cc] Parsing ..\..\..\cmsis_boot\stm32f10x.h
       [cc] Parsing ..\..\..\cmsis\core_cm3.h
       [cc] Parsing ..\..\..\cmsis\core_cm3.c
       [cc] 9 files are up to date.
       [cc] 0 files to be recompiled from dependency analysis.
       [cc] 1 total files to be compiled.
       [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -ffunction-sections -g -O0 -flto -fno-builtin -c -DSTM32F100C4 -DSTM32F10X_LD_VL -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -IC:\CooCox\CoIDE\workspace\test -IC:\CooCox\CoIDE\workspace -IC:\CooCox\CoIDE\workspace\test\stm_lib -IC:\CooCox\CoIDE\workspace\test\cmsis -IC:\CooCox\CoIDE -IC:\CooCox\CoIDE\workspace\test\stm_lib\inc -IC:\CooCox\CoIDE\workspace\test\cmsis_boot C:\CooCox\CoIDE\workspace\test\main.c
       [cc] 200
       [cc] Starting link
       [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -g -nostartfiles -flto -Wl,-Map=test.map -O0 -Wl,--gc-sections -Wl,--entry=main -LC:\CooCox\CoIDE\configuration\ProgramData\test -Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\test/arm-gcc-link.ld -g -o test.elf ..\obj\stm32f10x_tim.o ..\obj\core_cm3.o ..\obj\startup_stm32f10x_ld_vl.o ..\obj\system_stm32f10x.o ..\obj\mx_gpio.o ..\obj\stm32f10x_gpio.o ..\obj\main.o ..\obj\stm32f10x_rcc.o ..\obj\stm32f10x_exti.o ..\obj\misc.o
Program Size:
      text	   data	    bss	    dec	    hex	filename
      5444	     44	   1036	   6524	   197c	test.elf

BUILD SUCCESSFUL
Total time: 0 seconds
Почему, если я пытаюсь добавить в программу еще немного - компилятор выдает вот такую ошибку?

Код: Выделить всё

GCC HOME: C:\CooCox\CoIDE\GCC\bin
compile:
    [mkdir] Skipping C:\CooCox\CoIDE\workspace\test\test\Debug\bin because it already exists.
    [mkdir] Skipping C:\CooCox\CoIDE\workspace\test\test\Debug\obj because it already exists.
       [cc] Starting dependency analysis for 9 files.
       [cc] Parsing ..\..\..\cmsis_boot\stm32f10x.h
       [cc] Parsing ..\..\..\cmsis\core_cm3.h
       [cc] Parsing ..\..\..\cmsis\core_cm3.c
       [cc] 9 files are up to date.
       [cc] 0 files to be recompiled from dependency analysis.
       [cc] 1 total files to be compiled.
       [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -ffunction-sections -g -O0 -flto -fno-builtin -c -DSTM32F100C4 -DSTM32F10X_LD_VL -DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -IC:\CooCox\CoIDE\workspace\test -IC:\CooCox\CoIDE\workspace -IC:\CooCox\CoIDE\workspace\test\stm_lib -IC:\CooCox\CoIDE\workspace\test\cmsis -IC:\CooCox\CoIDE -IC:\CooCox\CoIDE\workspace\test\stm_lib\inc -IC:\CooCox\CoIDE\workspace\test\cmsis_boot C:\CooCox\CoIDE\workspace\test\main.c
       [cc] 200
       [cc] Starting link
       [cc] arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -g -nostartfiles -flto -Wl,-Map=test.map -O0 -Wl,--gc-sections -Wl,--entry=main -LC:\CooCox\CoIDE\configuration\ProgramData\test -Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\test/arm-gcc-link.ld -g -o test.elf ..\obj\stm32f10x_tim.o ..\obj\core_cm3.o ..\obj\startup_stm32f10x_ld_vl.o ..\obj\system_stm32f10x.o ..\obj\mx_gpio.o ..\obj\stm32f10x_gpio.o ..\obj\main.o ..\obj\stm32f10x_rcc.o ..\obj\stm32f10x_exti.o ..\obj\misc.o
       [cc] C:\Temp\cciroLOe.s: Assembler messages:
       [cc] C:\Temp\cciroLOe.s:878: Error: offset out of range
       [cc] C:\Temp\cciroLOe.s:879: Error: offset out of range
       [cc] lto-wrapper: C:\CooCox\CoIDE\GCC\bin\arm-none-eabi-gcc returned 1 exit status
       [cc] collect2.exe: error: ld returned 1 exit status
       [cc] c:/coocox/coide/gcc/bin/../lib/gcc/arm-none-eabi/4.7.3/../../../../arm-none-eabi/bin/ld.exe: lto-wrapper failed

BUILD FAILED
Total time: 0 second
Или я что-то неправильно пишу и ему оперативной памяти контроллера не хватает?
Или я вообще валенок?

Чип вот такой:
Основные характеристики микроконтроллера STM32F100C4T6B:

Максимальная тактовая частота 24 МГц (30 DMIPS)
4 Кб ОЗУ, 16 Кб флэш-памяти
16-канальный 12-битный АЦП (1.2 мкс) с датчиком температуры
Два 12–битных ЦАП
7-канальный DMA контроллер
I2C(SMBus/PMBus), 2х USART (Lin, IrDa, modem control), SPI(2 Мбит/с), HDMI (CEC)
37 GPIO (для некоторых совместимость с 5 В)
Два сторожевых таймера (IWDG и WWDG)
5 таймеров общего и 1 расширенного назначений
Два встроенных и откалиброванных тактовых генератора на 40 КГц и 8 МГц
96–битный уникальный идентификатор (ID)
Управление питанием и сбросом (3 режима низкого потребления, PVD, BOR)
Аппаратный расчет CRC
Напряжения питания 2.0 – 3.6 В
Корпус LQFP48

Untitled-1.png (5472 просмотра) <a class='original' href='./download/file.php?id=15645&sid=0e02c0cf6a9c8db8035fa6a21b463ab6&mode=view' target=_blank>Загрузить оригинал (16.62 КБ)</a>
Что-то у меня уже руки опускаются...
romanru1
Мастер
Сообщения: 584
Зарегистрирован: 22 фев 2013, 22:31
Репутация: 177
Откуда: Первоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение romanru1 »

Right click project -> Configuration -> Link tab -> uncheck "Enable LTO". Done

I hope this will help others
Вот пишуш помогло !
— Мы месяц по Галактике «маму» попоём — и планета у нас в кармане.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

romanru1 писал(а):Right click project -> Configuration -> Link tab -> uncheck "Enable LTO". Done

I hope this will help others
Вот пишуш помогло !
romanru1, Спасибо, уже отключил и дописывал к предыдущему сообщению следующее:
Пол ночи спустя: Если в настройках убрать галочку Enable LTO, то проект компилируется... Что это такое? Что я испортил, когда отключил эту галочку? Он нормально теперь компилируется? Проблема повторится?
romanru1, а вы что-то понимаете в этих микроконтроллерах? Может помочь можете? Я даже финансово могу отблагодарить, или может запчастями поделиться. Могу даже в гости заглянуть, если позволите, мне до вас всего 50-60 км (по самой ужасной дороге в России).
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Нашел, вот это что такое, оказывается: http://www.coocox.org/forum/topic.php?id=3004
LTO (Link Time Optimization) is a very important technology for compiler to generate better code. It basically enables compiler to have a global view of all modules, so as to make smarter optimization decision. As linker feeds back all objects back to compiler to help build the global view, this technique get its name as link time optimization.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6191
Откуда: Казахстан.
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение aftaev »

michael-yurov писал(а):Нашел, вот это что такое, оказывается: http://www.coocox.org/forum/topic.php?id=3004
а русскими букаФками в двух словах :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Был какой-то баг в gcc на эту тему. LTO для m3 и m4 не надо включать - оно ещё очень сырое.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

aftaev писал(а):а русскими букаФками в двух словах
Какая то хитрая штука для оптимизации всего кода, подключенных библиотек и всякой такой байды, позволяет компилятору создавать значительно более оптимальный код в плане скорости выполнения и объема.
Пишут, что эта оптимизация смотрит содержание сразу всех подключенных и используемых файлов, кто куда и зачем ссылается, и что из этого можно оптимизировать (сократить или убрать).
Я читал по диагонали, так что мог и наврать случайно.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Не заморачивайтесь - на самом деле оно там на порядки мудрее этого описания. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Impartial »

michael-yurov писал(а):Чип вот такой:
Основные характеристики микроконтроллера STM32F100C4T6B:
На самом деле в этом чипе 128кб флеш и 8кб озу. Можно смело выставить чип CB.
А вообще нужно посмотреть какой размер стека и хипа установлен по умолчанию и поставить разумные значения. Хип по идее вообще не нужен, если не используются запросы на выделение памяти.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Impartial писал(а):На самом деле в этом чипе 128кб флеш и 8кб озу. Можно смело выставить чип CB.
Т.е. производитель не говорит правду?
Impartial писал(а):А вообще нужно посмотреть какой размер стека и хипа установлен по умолчанию и поставить разумные значения. Хип по идее вообще не нужен, если не используются запросы на выделение памяти.
Я еще не понимаю, что это за слова такие...
Речь вот про это?
Untitled-1.png (5421 просмотр) <a class='original' href='./download/file.php?id=15691&sid=0e02c0cf6a9c8db8035fa6a21b463ab6&mode=view' target=_blank>Загрузить оригинал (15.94 КБ)</a>
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Impartial »

michael-yurov писал(а):Т.е. производитель не говорит правду?
Производитель в первую очередь коммерческое предприятие и эта ложь называется маркетингом.
michael-yurov писал(а):Я еще не понимаю, что это за слова такие...
Речь вот про это?
Нет это не то. Я не знаком с этой средой поэтому ничего путнего не скажу.
STACK я думаю понятно что такое. Это область памяти выделенная под стек. Должно быть где то, что то такое "STACK size = 0x100"
HEAP (куча) область памяти выделяемая для запросов на выделение памяти. Например функцией malloc(100). Выделяет область размером 100 байт в куче и возвращает указатель (адрес) этого блока.
Должна быть где то запись типа "HEAP size = 0x800".
Вот эти значения и нужно скорректировать.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Про STACK нашел в файле "startup_stm32f10x_ld_vl.c":
Untitled-1.png (5410 просмотров) <a class='original' href='./download/file.php?id=15697&sid=0e02c0cf6a9c8db8035fa6a21b463ab6&mode=view' target=_blank>Загрузить оригинал (24.29 КБ)</a>
А про HEAP - не нашел.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

А как правильно использовать булевы переменные?

1. Как создать булеву переменную?

2. Нужно ли при создании указывать свойство «valotile», если ее значение изменяется в одной процедуре, а проверяется в другой?

3. Как правильно написать условие, для максимально быстрого выполнения кода?

Код: Выделить всё

if (булева переменная) 
{} 
else 
{}
4. После того, как я убрал галочку «Enable LTO», я уже не смогу использовать автоматическую оптимизацию кода?

5. Как максимально быстро разделить переменную типа int (32 бит с учетом знака) на 1024 (сдвинуть на 10 порядков)?

6. Что произойдет, если я умножу переменную типа int на нецелую константу, например IntVar * 0.96 ?

7. Как максимально быстро в булевом виде получить знак численной переменной?

8. Как получить значение по модулю (без знака)?

9. Как инвертировать знак?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Сергей Саныч »

Вопросы про Си вообще, или применительно к реализации на STM32?
Самое надежное - посмотреть генерированный ассемблерный код (большинство компиляторов Си его выдают)
По общим вопросам:
1. Если я не ошибаюсь, в классическом Си булевых переменных, как таковых, нет. Любая целочисленная переменная в логических операциях принимается как true, если она не равна нулю.
2. Нет, но она должна быть глобальной, то есть объявлена вне тела процедур.
5. наверно, intvar >>= 10; Компилятор сам должен сообразить, как распорядиться со старшими битами в зависимости от того, знаковая переменная или беззнаковая.
6. в данном случае, как правило, IntVar преобразуется в плавающее, и результат будет с плавающей точкой. Если его потом присвоить целочисленной переменной, дробная часть будет отброшена.
В любом случае надо смотреть на выдаваемый код. Та же функция abs(int) может быть реализована и как вызов подпрограммы и как макрос (второе значительно быстрее)
Чудес не бывает. Бывают фокусы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Serg-tmn писал(а):Вопросы про Си вообще, или применительно к реализации на STM32?
Хотелось бы применительно к программированию под STM32.
Serg-tmn писал(а):Самое надежное - посмотреть генерированный ассемблерный код (большинство компиляторов Си его выдают)
Еще бы знать, как...
Serg-tmn писал(а):1. Если я не ошибаюсь, в классическом Си булевых переменных, как таковых, нет. Любая целочисленная переменная в логических операциях принимается как true, если она не равна нулю.
Так и сделал.
Serg-tmn писал(а):2. Нет, но она должна быть глобальной, то есть объявлена вне тела процедур.
Теперь понятно.
Serg-tmn писал(а):5. наверно, intvar >>= 10;
Спасибо, получилось, даже с учетом знака.

С остальным еще поразбираюсь.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Serg-tmn писал(а):Та же функция abs(int) может быть реализована и как вызов подпрограммы и как макрос (второе значительно быстрее)
Че-то она у меня не понятно, где реализована.
я ему пишу: TempFrequency = abs(XFrequency);
а он мне вот так ругается: warning: implicit declaration of function 'abs' [-Wimplicit-function-declaration]
но компилирует.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Сергей Саныч »

Тогда напиши вот такую загогулину:

Код: Выделить всё

TempFrequency = (XFrequency < 0) ? -XFrequency : XFrequency;
michael-yurov писал(а):Че-то она у меня не понятно, где реализована.
Вообще-то в stdlib.h должна быть определена.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Serg-tmn писал(а):Тогда напиши вот такую загогулину:
Примерно так и написал.
Serg-tmn писал(а):Вообще-то в stdlib.h должна быть определена.
Еще бы знать, где она.
Сейчас уже не хочу искать. Устал.
Ответить

Вернуться в «Электроника»