Страница 7 из 9
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 14 июн 2013, 17:14
michael-yurov
Impartial писал(а):aftaev писал(а):100 светодиодов потянет, по одному светодиоду на одной ноге STM32 ?
Потянет, если ток через каждый будет 0,25ма.
Потянет, если ток каждого не будет превышать 6 ма. Т.к. ноги питания допускают по 150 ма, а каждая обычная нога порта - по 25 ма.
Если нужен больший ток, то можно схитрить, и подключить светодиоды в шахматном порядке - подвигу между плюсом и выводом, а вторую половину между нулем и выводом.
Тогда, при любом включении светодиодов можно будет получить не менее 12 ма на каждый.
Ну, и, конечно, нельзя забывать про резисторы.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 15 июн 2013, 03:29
michael-yurov
Похоже, BOOT0 нужно к нулю подтянуть,
а NRST в инструкции советуют конденсаторов шунтировать (не знаю правильное слово) на землю.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 06:16
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
Что-то у меня уже руки опускаются...
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 07:29
romanru1
Right click project -> Configuration -> Link tab -> uncheck "Enable LTO". Done
I hope this will help others
Вот пишуш помогло !
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 07:41
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 км (по самой ужасной дороге в России).
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 07:45
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.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 10:13
aftaev
а русскими букаФками в двух словах

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 14:04
Serg
Был какой-то баг в gcc на эту тему. LTO для m3 и m4 не надо включать - оно ещё очень сырое.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 18:09
michael-yurov
aftaev писал(а):а русскими букаФками в двух словах
Какая то хитрая штука для оптимизации всего кода, подключенных библиотек и всякой такой байды, позволяет компилятору создавать значительно более оптимальный код в плане скорости выполнения и объема.
Пишут, что эта оптимизация смотрит содержание сразу всех подключенных и используемых файлов, кто куда и зачем ссылается, и что из этого можно оптимизировать (сократить или убрать).
Я читал по диагонали, так что мог и наврать случайно.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 19:17
Serg
Не заморачивайтесь - на самом деле оно там на порядки мудрее этого описания.

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 22 июн 2013, 22:29
Impartial
michael-yurov писал(а):Чип вот такой:
Основные характеристики микроконтроллера STM32F100C4T6B:
На самом деле в этом чипе 128кб флеш и 8кб озу. Можно смело выставить чип CB.
А вообще нужно посмотреть какой размер стека и хипа установлен по умолчанию и поставить разумные значения. Хип по идее вообще не нужен, если не используются запросы на выделение памяти.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 23 июн 2013, 04:35
michael-yurov
Impartial писал(а):На самом деле в этом чипе 128кб флеш и 8кб озу. Можно смело выставить чип CB.
Т.е. производитель не говорит правду?
Impartial писал(а):А вообще нужно посмотреть какой размер стека и хипа установлен по умолчанию и поставить разумные значения. Хип по идее вообще не нужен, если не используются запросы на выделение памяти.
Я еще не понимаю, что это за слова такие...
Речь вот про это?
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 23 июн 2013, 09:21
Impartial
michael-yurov писал(а):Т.е. производитель не говорит правду?
Производитель в первую очередь коммерческое предприятие и эта ложь называется маркетингом.
michael-yurov писал(а):Я еще не понимаю, что это за слова такие...
Речь вот про это?
Нет это не то. Я не знаком с этой средой поэтому ничего путнего не скажу.
STACK я думаю понятно что такое. Это область памяти выделенная под стек. Должно быть где то, что то такое "STACK size = 0x100"
HEAP (куча) область памяти выделяемая для запросов на выделение памяти. Например функцией malloc(100). Выделяет область размером 100 байт в куче и возвращает указатель (адрес) этого блока.
Должна быть где то запись типа "HEAP size = 0x800".
Вот эти значения и нужно скорректировать.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 23 июн 2013, 09:42
michael-yurov
Про STACK нашел в файле "startup_stm32f10x_ld_vl.c":
А про HEAP - не нашел.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 24 июн 2013, 06:25
michael-yurov
А как правильно использовать булевы переменные?
1. Как создать булеву переменную?
2. Нужно ли при создании указывать свойство «valotile», если ее значение изменяется в одной процедуре, а проверяется в другой?
3. Как правильно написать условие, для максимально быстрого выполнения кода?
4. После того, как я убрал галочку «Enable LTO», я уже не смогу использовать автоматическую оптимизацию кода?
5. Как максимально быстро разделить переменную типа int (32 бит с учетом знака) на 1024 (сдвинуть на 10 порядков)?
6. Что произойдет, если я умножу переменную типа int на нецелую константу, например IntVar * 0.96 ?
7. Как максимально быстро в булевом виде получить знак численной переменной?
8. Как получить значение по модулю (без знака)?
9. Как инвертировать знак?
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 24 июн 2013, 09:21
Сергей Саныч
Вопросы про Си вообще, или применительно к реализации на STM32?
Самое надежное - посмотреть генерированный ассемблерный код (большинство компиляторов Си его выдают)
По общим вопросам:
1. Если я не ошибаюсь, в классическом Си булевых переменных, как таковых, нет. Любая целочисленная переменная в логических операциях принимается как true, если она не равна нулю.
2. Нет, но она должна быть глобальной, то есть объявлена вне тела процедур.
5. наверно, intvar >>= 10; Компилятор сам должен сообразить, как распорядиться со старшими битами в зависимости от того, знаковая переменная или беззнаковая.
6. в данном случае, как правило, IntVar преобразуется в плавающее, и результат будет с плавающей точкой. Если его потом присвоить целочисленной переменной, дробная часть будет отброшена.
В любом случае надо смотреть на выдаваемый код. Та же функция abs(int) может быть реализована и как вызов подпрограммы и как макрос (второе значительно быстрее)
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 24 июн 2013, 09:40
michael-yurov
Serg-tmn писал(а):Вопросы про Си вообще, или применительно к реализации на STM32?
Хотелось бы применительно к программированию под STM32.
Serg-tmn писал(а):Самое надежное - посмотреть генерированный ассемблерный код (большинство компиляторов Си его выдают)
Еще бы знать, как...
Serg-tmn писал(а):1. Если я не ошибаюсь, в классическом Си булевых переменных, как таковых, нет. Любая целочисленная переменная в логических операциях принимается как true, если она не равна нулю.
Так и сделал.
Serg-tmn писал(а):2. Нет, но она должна быть глобальной, то есть объявлена вне тела процедур.
Теперь понятно.
Serg-tmn писал(а):5. наверно, intvar >>= 10;
Спасибо, получилось, даже с учетом знака.
С остальным еще поразбираюсь.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 24 июн 2013, 11:59
michael-yurov
Serg-tmn писал(а):Та же функция abs(int) может быть реализована и как вызов подпрограммы и как макрос (второе значительно быстрее)
Че-то она у меня не понятно, где реализована.
я ему пишу: TempFrequency = abs(XFrequency);
а он мне вот так ругается: warning: implicit declaration of function 'abs' [-Wimplicit-function-declaration]
но компилирует.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 24 июн 2013, 12:08
Сергей Саныч
Тогда напиши вот такую загогулину:
Код: Выделить всё
TempFrequency = (XFrequency < 0) ? -XFrequency : XFrequency;
michael-yurov писал(а):Че-то она у меня не понятно, где реализована.
Вообще-то в stdlib.h должна быть определена.
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Добавлено: 24 июн 2013, 12:36
michael-yurov
Serg-tmn писал(а):Тогда напиши вот такую загогулину:
Примерно так и написал.
Serg-tmn писал(а):Вообще-то в stdlib.h должна быть определена.
Еще бы знать, где она.
Сейчас уже не хочу искать. Устал.