Возвращаемся к теме ветки. В прошлый раз я сравнивал обьем кода для Арудуино Уно и STM32F103 при стандартных настройках Ардуино IDE. Напомню, результаты были "так себе" (скетч работы с тензодатчиками, 48 строк без учета комментариев)
Уно - код 3,9к байт(12%), данные 480 байт(23%)
СТМ - код 23к(34%), данные 5600(17%) байт
Однако, как выяснилось из изучения буржуйских форумов, размер кода STM32 можно существенно уменьшить, не отказываясь от Ардуино IDE.
Рассмотрим по пунктам :
1. Если отказаться от загрузки через встроенный USB-USART. (выбрать в опциях Upload method => Serial), то в программу не будет добавляться весьма обьемный код USB-Serial
результат компиляции - код 15870, данные 4824 байт
2. Заменим setup() и loop() на классическую main()
результат компиляции - код 14522, данные 4684 байт
3. Добавим опцию --specs=nano.specs в настройки компилятора Ардуино IDE (см. ссылку ниже)
результат компиляции - код 11436, данные 984 байт
В итоге код стал меньше вдвое, а расход оперативки уменьшился более чем в 5 раз. Это уже куда интереснее, чем исходные цифры. И это я еще не оптимизировал код...
Результаты ниже в таблице
Code Data Comment
23156 5600 stsndart settings
15870 4824 Upload - serial
14522 4684 main()
11436 984 nano.specs
А если ты из main() вызовешь init(), то все вернется на круги своя. А без init() RTL работать не будет.
ну это я не готов обсуждать, знаний пока не хватает. Но, как я понимаю, это относится только к замене loop() на main(). Как видно из таблицы, разница между этими вариантами не так и велика, другие изменения влияют сильнее
А что вы сравниваете ваще? Кривость ард ИДЕ на разных камнях? Зашибись! И так ясно, что она кривая до не могу! Кривее уже наверное ничего и нет на белом свете.
Вот Кейл, СТМ32Ф103
Без систем инита и с пустым майном
Program Size: Code=120 RO-data=320 RW-data=0 ZI-data=1024
С систем инитом и с пустым майном
Program Size: Code=368 RO-data=320 RW-data=0 ZI-data=1024
А теперь прикиньте, сколько гуана ард ИДЕ накидывает? Не знаю как вам, а мне страшно от такого упорото-колхозного решения.
Здравмтвуйте!
Начал изучать arduino и не могу подключить функцию pwmWrite().
В Arduino IDE эта функция никак не подсвечивается. При компиляции ошибок не возникает, но при этом генерации частоты на выходе нет.
В чем может быт проблема?
Функция analogWrite() работает, но может принимать значения только от 0 до 255.
Вопрос 2: какое время по умолчанию между выборками АЦП в Ардуино.
Вопрос 3: какого номинала сопротивлене лучше ставить на входе АЦП. Уж очень сильно пляшет цифровой код с АЦП.
Так на удачу, задам вопрос... У кого нибудь есть решение по отладке прошивки сгенеренной для STM ардуино IDE в протеусе. НИРАБОТАЮТ они там :( Из кеила, у меня так же не получилось запустить. Только то что скомпилировано в самом шпроте, то работает....
Дак pwmWrite() и analogWrite() по сути одно и то же, просто имена разные. значение 0...255 это целый байт. чтобы использовать больше значений для ШИМ нужно чтобы на канале использовался 16 битный таймер, по умолчанию он не включится. тем не мение не без некоторого шаманства воспользоваться ШИМ16бит таки можно. Смотреть тут - https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
brokly - своего опыта нет, но на КАЗУСе народ пишет, что поддержка STM в протеусе очень сырая пока... Вообще, если там еще не спрашивали - советую kazus.ru, там по протеусу отдельный большой раздел и больше шансов. что подскажут.
Probelzaelo, ваш мудрейший совет к STM32 никак не использовать.
Отчего же? Суть, вернее причина того что ШИМ имеет установку 0..255 вполне понятна. Для STM версии эта проблема с 8 битными установками таймера оставлена ради совместимости на уровне скетчей. Бороться придется с той же проблемой что и в примере для Атмеги, применять "в лоб" наверняка не получится, хотя и не думаю что адаптация к IDE на столько половинчата, но управление таймером и запись в регистры все же отличаться может, не говоря уже о необходимосте не запутаться в коэффициентах для пересчета
brokly - своего опыта нет, но на КАЗУСе народ пишет, что поддержка STM в протеусе очень сырая пока... Вообще, если там еще не спрашивали - советую kazus.ru, там по протеусу отдельный большой раздел и больше шансов. что подскажут.
Нормальная там поддержка. Все волшебно работает, если код пишешь прям в протеусе. А вот эльфы стмовские оно не понимает, но что прикольно, нехы тоже 8(. Да и на казусе, похоже, никто серьезно этим вопросом не задавался. Просто мне тут потребовалось мультипроцессорный проект отладить AVR + STM, думал в шпроте счаз моментом... Ага... Хрен там...
dimax, спасибо, команда pinMode(нога, PWM); помогла. Теперь ШИМ принимает 65536 значений. хотя ранее пробовал pinMode(нога, PWM); данную команду, но видимо что то делал не так.
нда. там, прежде чем задавать вопросы - нужно рассказать о себе и своих проектах :) В принципе, неплохое правило....
Рискну все ж таки сначала спросить здесь.
Кто-нибудь работал из-под Ардуино ИДЕ с встроенным RTC на плате STM32F103C8(b)T6 (самая ходовая, синенькая :) ? Что-то у меня даже встроенный пример из библиотеки не работает - выдает одни нули по функции rtc.getTime(). Надо ли для работы RTC обязательно подавать питание на пин VB, или при наличии основного питания оно должно работать и так?
Кто-нибудь работал из-под Ардуино ИДЕ с встроенным RTC на плате STM32F103C8(b)T6 (самая ходовая, синенькая :) ? Что-то у меня даже встроенный пример из библиотеки не работает - выдает одни нули по функции rtc.getTime(). Надо ли для работы RTC обязательно подавать питание на пин VB, или при наличии основного питания оно должно работать и так?
Пробовал этот RTC. Как-то странно он запускается - то работает, то нет. На некоторых экземплярах плат заводится сразу, на некоторых даже с батарейкой не работает. Другой момент - скетч с выводом времени в сериал сжирает порядка 70% памяти, хз почему(
Да какой там срач, только тешимся. По любому если у кого то есть мнение то оно или правильное или одно из двух, на этот случай обязательно кто то возразит. В конце тунне.. диспута всегда будет какой нибудь ответ.
Штурмовать буржуйский с гуглотранслятором, я так почти все ответы на свои вопросы нашел, и про RTC, и про карту памяти, и многие другие мелочи. У них многое уже обсуждалось и решение так или иначе нашлось. Главное правильно вопрос сформулировать и правильно понять гуглоперевод. Единственный вопрос который так и не осилил - как переселить карту памяти на второй аппаратный SPI. Из их форума понял только что надо переписывать библиотеку работающую с картой памяти, но как именно это сделать - хз((( На первом SPI карта работает прекрасно, но блин в моем проекте эти пины для другого используются, и перенести на другие пока не получается - аппаратное ограничение конструкции(
Штурмовать буржуйский с гуглотранслятором, я так почти все ответы на свои вопросы нашел, и про RTC, и про карту памяти, и многие другие мелочи.
да это все понятно, форум хороший. я его давно почитываю, с языком проблем нет. Я вчера уже прошерстил его поиском, нашел несколько тем, попробовал разные примеры - что-то не идет. Настораживает, что таких как у меня проблем - у других не встретил. То ли я совсем туплю и допускаю где-то элементарную ошибку, то ли случай такой уникальный....
[Другой момент - скетч с выводом времени в сериал сжирает порядка 70% памяти, хз почему(
это вы что-то неправильно настроили ... у меня пустые скетчи берут сразу около 1.5К оперативки, но дальше этот параметр растет вполне адекватно коду . 70% памяти у меня пока ни один проект не занимал.
CheS_66, я в своём генераторе сажал TFT дисплей на SPI2, никаких библиотек не правил, одной командой в сетапе SPI.setModule(2); всё само переключилось..
[Другой момент - скетч с выводом времени в сериал сжирает порядка 70% памяти, хз почему(
это вы что-то неправильно настроили ... у меня пустые скетчи берут сразу около 1.5К оперативки, но дальше этот параметр растет вполне адекватно коду . 70% памяти у меня пока ни один проект не занимал.
Только что тоже с этим разобрался, на одном компе IDE старая и все библиотеки для стм тоже. Там скетч с часами жрет 70%. На другом IDE 1.8.5 и свежие библиотеки - пример с часами всего 26% выходит.
dimax пишет:
CheS_66, я в своём генераторе сажал TFT дисплей на SPI2, никаких библиотек не правил, одной командой в сетапе SPI.setModule(2); всё само переключилось..
Спасибо за подсказку, на следующей неделе попробую. Пока на больничном с сыном сижу, а основная площадка для экспериментов на работе осталась.
По поводу RTC на плате STM32F103C - отвечаю сам себе: похоже дело в конкретной плате.
Взял две такие же платы, но от другого продавца - прошил, залил скетч - RTC завелся на обоих сразу, без танцев с бубном. А на первой плате так и не работает. То ли плата глючная, то ли я ее уже "поджарил" в ходе экспериментоа - но на ней и USB-Сериал стартует не всегда, и скетчи грузятся через раз.
Так что проблема решена. Теперь еще надо проверить, не будет ли сбиваться время при отключении питания... но это уже не сейчас, пора спать :)
PS - просьба к админам - дайте мне право чистить сообщения в этой ветке
Эти платы в Китае клепают все кому не лень похоже. Различия начиная от разноцветных светодиодов и заканчивая другими по дизайну/разводке платы. Уже обсуждавшийся где-то здесь на форуме РоботДюн тоже стал делать плату на STM32F103C8T6, в своем традициионно-черном стиле. Так что ничего удивительного в том что одна плата работает как и должна, а другая нет.
тогда они будут велосипедами.
хорошо, что не щуками, амфорами или стерхами
Возвращаемся к теме ветки. В прошлый раз я сравнивал обьем кода для Арудуино Уно и STM32F103 при стандартных настройках Ардуино IDE. Напомню, результаты были "так себе" (скетч работы с тензодатчиками, 48 строк без учета комментариев)
Однако, как выяснилось из изучения буржуйских форумов, размер кода STM32 можно существенно уменьшить, не отказываясь от Ардуино IDE.
Рассмотрим по пунктам :
1. Если отказаться от загрузки через встроенный USB-USART. (выбрать в опциях Upload method => Serial), то в программу не будет добавляться весьма обьемный код USB-Serial
результат компиляции - код 15870, данные 4824 байт
2. Заменим setup() и loop() на классическую main()
результат компиляции - код 14522, данные 4684 байт
3. Добавим опцию --specs=nano.specs в настройки компилятора Ардуино IDE (см. ссылку ниже)
результат компиляции - код 11436, данные 984 байт
В итоге код стал меньше вдвое, а расход оперативки уменьшился более чем в 5 раз. Это уже куда интереснее, чем исходные цифры. И это я еще не оптимизировал код...
Результаты ниже в таблице
способы уменьшения размера кода взяты вот отсюда http://stm32duino.com/viewtopic.php?f=28&t=1596
PS просьба к ТС или админам почистить тему от спама и флуда
Да... интересно. Но вот, кстати, отсутствие EEPROM немного напрягает, текущие настройки/значения сохранять удобно туда.
А если ты из main() вызовешь init(), то все вернется на круги своя. А без init() RTL работать не будет.
А если ты из main() вызовешь init(), то все вернется на круги своя. А без init() RTL работать не будет.
ну это я не готов обсуждать, знаний пока не хватает. Но, как я понимаю, это относится только к замене loop() на main(). Как видно из таблицы, разница между этими вариантами не так и велика, другие изменения влияют сильнее
А что вы сравниваете ваще? Кривость ард ИДЕ на разных камнях? Зашибись! И так ясно, что она кривая до не могу! Кривее уже наверное ничего и нет на белом свете.
Вот Кейл, СТМ32Ф103
Без систем инита и с пустым майном
Program Size: Code=120 RO-data=320 RW-data=0 ZI-data=1024
С систем инитом и с пустым майном
Program Size: Code=368 RO-data=320 RW-data=0 ZI-data=1024
А теперь прикиньте, сколько гуана ард ИДЕ накидывает? Не знаю как вам, а мне страшно от такого упорото-колхозного решения.
а ты не бойся))))
Не знаю как вам, а мне страшно от такого упорото-колхозного решения.
ок. и, шо? всем пофиг.
А я не боюсь, я брезгую.
А не боюсь, я брезгую.
я четвёртый год наблюдаю, как тебя тошнит...
выплюнь мядузу, скотина тупая!
всем пофиг.
Тогда нехрен скулить по поводу СТМ32 если рожа ард ИДЕ крива.
всем пофиг.
Тогда нехрен скулить по поводу СТМ32 если рожа ард ИДЕ крива.
да всем пофиг на твои анальные страдания по поводу кривости Дуино ИДЕ.
Зато все рады за твои орально-анальные удовольствия по жизни. ))))))))))))
"Береги сфинктер, Сеня!"(с). )))))))))))
В этой программе ширина импульсов изменяется самостоятельно, можна ли ее сделать на постаянно 50% ?
В этой программе ширина импульсов изменяется самостоятельно, можна ли ее сделать на постаянно 50% ?
А кто кого победил?
А кто кого победил?
А победила, как всегда, пьянка, в доказательстве вся эта страница ...
PS. И три предыдущих тоже.
Здравмтвуйте!
Начал изучать arduino и не могу подключить функцию pwmWrite().
В Arduino IDE эта функция никак не подсвечивается. При компиляции ошибок не возникает, но при этом генерации частоты на выходе нет.
В чем может быт проблема?
Функция analogWrite() работает, но может принимать значения только от 0 до 255.
Вопрос 2: какое время по умолчанию между выборками АЦП в Ардуино.
Вопрос 3: какого номинала сопротивлене лучше ставить на входе АЦП. Уж очень сильно пляшет цифровой код с АЦП.
МК stmf103c8t6
Так на удачу, задам вопрос... У кого нибудь есть решение по отладке прошивки сгенеренной для STM ардуино IDE в протеусе. НИРАБОТАЮТ они там :( Из кеила, у меня так же не получилось запустить. Только то что скомпилировано в самом шпроте, то работает....
Дак pwmWrite() и analogWrite() по сути одно и то же, просто имена разные. значение 0...255 это целый байт. чтобы использовать больше значений для ШИМ нужно чтобы на канале использовался 16 битный таймер, по умолчанию он не включится. тем не мение не без некоторого шаманства воспользоваться ШИМ16бит таки можно. Смотреть тут - https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
Probelzaelo, ваш мудрейший совет к STM32 никак не использовать.
Shpulka, вы забыли команду pinMode(нога, PWM);
brokly - своего опыта нет, но на КАЗУСе народ пишет, что поддержка STM в протеусе очень сырая пока... Вообще, если там еще не спрашивали - советую kazus.ru, там по протеусу отдельный большой раздел и больше шансов. что подскажут.
Probelzaelo, ваш мудрейший совет к STM32 никак не использовать.
Отчего же? Суть, вернее причина того что ШИМ имеет установку 0..255 вполне понятна. Для STM версии эта проблема с 8 битными установками таймера оставлена ради совместимости на уровне скетчей. Бороться придется с той же проблемой что и в примере для Атмеги, применять "в лоб" наверняка не получится, хотя и не думаю что адаптация к IDE на столько половинчата, но управление таймером и запись в регистры все же отличаться может, не говоря уже о необходимосте не запутаться в коэффициентах для пересчета
Probelzaelo, на stm32 нет никакой проблемы.
brokly - своего опыта нет, но на КАЗУСе народ пишет, что поддержка STM в протеусе очень сырая пока... Вообще, если там еще не спрашивали - советую kazus.ru, там по протеусу отдельный большой раздел и больше шансов. что подскажут.
Нормальная там поддержка. Все волшебно работает, если код пишешь прям в протеусе. А вот эльфы стмовские оно не понимает, но что прикольно, нехы тоже 8(. Да и на казусе, похоже, никто серьезно этим вопросом не задавался. Просто мне тут потребовалось мультипроцессорный проект отладить AVR + STM, думал в шпроте счаз моментом... Ага... Хрен там...
dimax, тогда мне не понятно, почему об этом человек пишет.
dimax, спасибо, команда pinMode(нога, PWM); помогла. Теперь ШИМ принимает 65536 значений. хотя ранее пробовал pinMode(нога, PWM); данную команду, но видимо что то делал не так.
как исправить ошибку?
error: 'A6' was not declared in this scope
Тед, возможно нужно указывать не "А6", а "PA6"?
Shpulka, конечно. Поосторожнее с "ардуиновскими привычками", в stm-duino совместимость далеко не во всём!
Shpulka, конечно. Поосторожнее с "ардуиновскими привычками", в stm-duino совместимость далеко не во всём!
И мне кажется, что это правильно.
Поставил везде P - помогло, большое спасибо
Народ, подскажите форум, где позадавать вопросы по stm-duino? тут наверно не стоит срач провоцировать...
b707, русскоязычного помоему нет. Толькма буржуйский.
dimax. спасибо
нда. там, прежде чем задавать вопросы - нужно рассказать о себе и своих проектах :) В принципе, неплохое правило....
Рискну все ж таки сначала спросить здесь.
Кто-нибудь работал из-под Ардуино ИДЕ с встроенным RTC на плате STM32F103C8(b)T6 (самая ходовая, синенькая :) ? Что-то у меня даже встроенный пример из библиотеки не работает - выдает одни нули по функции rtc.getTime(). Надо ли для работы RTC обязательно подавать питание на пин VB, или при наличии основного питания оно должно работать и так?
Пробовал этот RTC. Как-то странно он запускается - то работает, то нет. На некоторых экземплярах плат заводится сразу, на некоторых даже с батарейкой не работает. Другой момент - скетч с выводом времени в сериал сжирает порядка 70% памяти, хз почему(
Да какой там срач, только тешимся. По любому если у кого то есть мнение то оно или правильное или одно из двух, на этот случай обязательно кто то возразит. В конце тунне.. диспута всегда будет какой нибудь ответ.
Прекрасное правило отбивающее у начинающего любое желание задавать вопросы ))
Толькма буржуйский.
Штурмовать буржуйский с гуглотранслятором, я так почти все ответы на свои вопросы нашел, и про RTC, и про карту памяти, и многие другие мелочи. У них многое уже обсуждалось и решение так или иначе нашлось. Главное правильно вопрос сформулировать и правильно понять гуглоперевод. Единственный вопрос который так и не осилил - как переселить карту памяти на второй аппаратный SPI. Из их форума понял только что надо переписывать библиотеку работающую с картой памяти, но как именно это сделать - хз((( На первом SPI карта работает прекрасно, но блин в моем проекте эти пины для другого используются, и перенести на другие пока не получается - аппаратное ограничение конструкции(
Штурмовать буржуйский с гуглотранслятором, я так почти все ответы на свои вопросы нашел, и про RTC, и про карту памяти, и многие другие мелочи.
да это все понятно, форум хороший. я его давно почитываю, с языком проблем нет. Я вчера уже прошерстил его поиском, нашел несколько тем, попробовал разные примеры - что-то не идет. Настораживает, что таких как у меня проблем - у других не встретил. То ли я совсем туплю и допускаю где-то элементарную ошибку, то ли случай такой уникальный....
[Другой момент - скетч с выводом времени в сериал сжирает порядка 70% памяти, хз почему(
это вы что-то неправильно настроили ... у меня пустые скетчи берут сразу около 1.5К оперативки, но дальше этот параметр растет вполне адекватно коду . 70% памяти у меня пока ни один проект не занимал.
CheS_66, я в своём генераторе сажал TFT дисплей на SPI2, никаких библиотек не правил, одной командой в сетапе SPI.setModule(2); всё само переключилось..
[Другой момент - скетч с выводом времени в сериал сжирает порядка 70% памяти, хз почему(
это вы что-то неправильно настроили ... у меня пустые скетчи берут сразу около 1.5К оперативки, но дальше этот параметр растет вполне адекватно коду . 70% памяти у меня пока ни один проект не занимал.
Только что тоже с этим разобрался, на одном компе IDE старая и все библиотеки для стм тоже. Там скетч с часами жрет 70%. На другом IDE 1.8.5 и свежие библиотеки - пример с часами всего 26% выходит.
CheS_66, я в своём генераторе сажал TFT дисплей на SPI2, никаких библиотек не правил, одной командой в сетапе SPI.setModule(2); всё само переключилось..
Спасибо за подсказку, на следующей неделе попробую. Пока на больничном с сыном сижу, а основная площадка для экспериментов на работе осталась.
Я тоже заказал. Тоже хочу пащюпать. Тоже жду.
А я даже заказал Китайский "аналог" с как будто запасным функционалом от GD32, интересно что же там на самом деле )))
зовите эсесовца - срочно нужно обосновать, какие все пидарасы, а он - дыртанЬан.
По поводу RTC на плате STM32F103C - отвечаю сам себе: похоже дело в конкретной плате.
Взял две такие же платы, но от другого продавца - прошил, залил скетч - RTC завелся на обоих сразу, без танцев с бубном. А на первой плате так и не работает. То ли плата глючная, то ли я ее уже "поджарил" в ходе экспериментоа - но на ней и USB-Сериал стартует не всегда, и скетчи грузятся через раз.
Так что проблема решена. Теперь еще надо проверить, не будет ли сбиваться время при отключении питания... но это уже не сейчас, пора спать :)
PS - просьба к админам - дайте мне право чистить сообщения в этой ветке
Probelzaelo, ссылку давай
похоже дело в конкретной плате.
Эти платы в Китае клепают все кому не лень похоже. Различия начиная от разноцветных светодиодов и заканчивая другими по дизайну/разводке платы. Уже обсуждавшийся где-то здесь на форуме РоботДюн тоже стал делать плату на STM32F103C8T6, в своем традициионно-черном стиле. Так что ничего удивительного в том что одна плата работает как и должна, а другая нет.