Вы видите копию треда, сохраненную 6 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Сам я столкнулся с ней на работе, уже полгода пишу под SAM3 и ATSAM91. Все нравки, внезапно стало доставлять. Планирую накатить линукс и сам собрать ядро.
как работа аэрэмщика? много платят? пили стори как устроиться, что требуют? хочу уйти на эту профессию.
Для вкатывания в эту тему есть ли народные девборды по цене не дороже китайской ардуины?
под cortex-m (микроконтроллеры, linux не запустить) есть, под cortex-a (процессор вроде того, что в телефоны с ведроидом ставят) - будет дороже, от 25$
Завод , Россия мухосрань, зарплата 30-40к, ибо я инженер-программист и оче мал стаж, года нет даже. Конкретно я делаю коммутацию, что-то типа свитча.
>>187087
Gcc вроде, но я собираю в iar. Он очень уебищен, но вроде по отзывам оптимизация лучше, чем в гсс.
Алсо, в некотрых at91, что на пикче, нет пзу и крайне мало озу, все рассчитано на внешнюю память.
>2015
>использовать на микроконтроллере крестопарашу вместо божественной джавы
Ох уж эти говнокодеры-студентик
>>2015
>>использовать на микроконтроллере крестопарашу вместо божественной джавы
>Ох уж эти говнокодеры-студентик
О! Любители кофематов подтянулись. Почему джава тормозит? Просто оперативки добавить, ага?
Если ты пишешь на джаве, это ещё не значит что она самая заебательская для встроенных систем. Для каждой задачи есть свой инструмент. Я тебя с джавой к промышленным контроллерам не подпущу не под каким соусом. Максимум для джавы -- платёжный терминал, дак и то, драйвера для железа писать на сях. Так что, угомонись.
Мог бы и не писать, порванка.
Помогите лучше задачу решить:
TIM_TimeBaseStructure.TIM_Period = 1000;
TIM_TimeBaseStructure.TIM_Prescaler = (uint32_t) SystemCoreClock - 1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
МК stm32f103
не получается сделать таймер на 1 секунду. что я делаю не так?
тактовая частота 72MHz
кварц 8Mhz
Запустил и ушёл по другим делам. Правда, в кортексах DMA такты ворует. У dsPIC33 - нет.
>джава
>2015
>тормозит
Ох уж эти студентики с их говнокодом
>максимум для джавы
Напоминаем о том что божественная джава - стандарт в энтерпрайзе, части мобильных устройств, части смарт карт. Не бойся, спермопердоля, скоро твой потешный пердоси и из МК выпрут.
> Не бойся, спермопердоля, скоро твой потешный пердоси и из МК выпрут.
Дурачок. Выпрут С, как же, потом ещё ассемблер выпрут и останется на контроллерах только джава и машинный код, а разработчики джавы будут машкод ебашить напрямую.
>>187130
>поясни выгоду при использовании DMA память-память и при прямом копировании около 32Б данных
Выгоды не вижу. Инициализация DMA больше времени займёт.
>Пердоля, твой недоассемблер за пределами системной разработки ненужен. Конечно, выпрут
У тебя, уёба, действительно только стоковое железо, и ты, уёба, не разрабатываешь железо своё, потому ты так и думаешь, а зря. Железа бывает всякого и много, и его постоянно разрабатывают, и в каждой конкретной реализации пишут драйвера, что не редкость. И пока твои синьоры не напишут их, ты будешь дрочить, ибо сам ничего не можешь. Так что, настанет время, когда джава макакеров станет столько, что твоя ценность упадёт чуть ниже чем уровень плинтуса, но зато, вас будет много, есть с кем пообщаться. А боги асма и С будут надсмехаться над вами и вашей джавой. Кстати, С-шники и сегодня получают на вашем уровне, что же будет дальше?
Вызов типа этого выполняется, возвращая, что все ок, но дисплей никак не реагирует:
HAL_SPI_Transmit_DMA(&hspi5, (uint8_t)frame_buffer, (uint16_t)(IMG_ROWSIMG_COLUMNS));
>джавамакакеров
>С-богов
Пердоля, а с чего ты взял что я не знаю си?)))
>НИНУЖЕН СТОНИШЬ
Напоминаем пердоле о том что з/п джава девов - одна из найбольших в индустрии. Продолжаем зоонаблюдения за манямирком спермопердоли-сидауна
Проблемы сидауна с недоассемблером. Писал бы код на Java ME embedded было бы все нормально
Я понимаю, что ты не съебёшь просто так. Но взываю к разуму, коле ты такая умная джава-макака, твоя джава не везде актуальна, свет на ней клином не сошёлся, и не сойдётся. Алсо, если бы твоя собственная ЗП была бы хоть сколько-нибудь значимой в индустрии, ты бы не тут сидел... Вангую, что ты джуниор, и пришёл сюда повыёбываться, но ты ошибся, ни какой джавятиной тут не пахнет.
студент максималист итт, джаву не любят хотя бы за то что нет управляемости кодом, в любой момент может проснуться уборщик мусора и начать убирать все что видит. А если в этот момент какая нибудь хуйня с двигателем произойдет? нужно очень быстро отреагировать, но вот хуй там сборщик мусора ничего не дает сделать. И таких задач очень много в реальном мире, это тебе не формочки пилить для офисных клерков. Ты просто тупой студент и не понимаешь, что есть разные задачи. Я и сам не буду писать на С/С++ десктопную часть решения для построения графиков или вывода еще какой нибудь хуйни, а возьму няшный C#. Но писать код под МК на чем то кроме С/С++ это бред.
Три-четыре бакса тебя не разорит? http://www.aliexpress.com/wholesale?catId=0&initiative_id=AS_20150926234707&SearchText=stm32f103c8t6
Что-то у меня не получается с этой hal библиотекой дисплей запустить. Светится белым и все, сука такая. Можешь какую ссылочку подкинуть, где написано про инициализацию и работу с этим дисплеем или показать свой код?
Задумал я тут записывать всякую хрень в модуль по ДМА, тип память-память. Разовый трансфер выполняется норм, все работает, нарушений нет, но блядь, не мк не знает, что трансфер окончен, ибо модуль не пересылает специализированный сигнал. Или я не знаю, как это делается. В даташите мк в регистры ДМА из чего-то эдакого можно вписать только адрес источника/приёмника, а настроить управление окончания трансфера нельзя. Стандартные компоненты мк типа уартов-спиаев и прочего говна сообщают, видимо, об окончании. Хотя об этом в дш явно об этом не указано, при трансфере периферия-память ты указываешь айди периферии.
Так вот, что делать? Отлавливать прерывания от того внешнего модуля и говорить ДМА, что трансфер окончен? А это ли не нарушит всю выгоду ДМА?
для измерения времени нужно юзать systick. только нужно корректно частоту задать кварца
проблема халовской библиотеки в том, что я например настраиваю SPI через ХАЛ. вроде бы в кубе все пины должны настроиться и в свойствах куба эти пины настраиваются . а на деле в проекте пины не настраиваются. хотя в кубе настроены. это пиздец, я ебал. в кубе эти пины настроенный уже а в готовый проект не добавляются.
>>187403
после создания проекта в коде могут быть вполне детские ошибки. выше описал.
DMA сам прекрасно знает, когда происходит окончание передачи. Как правило, у МК есть обработчик прерываний для DMA. И да, у DMA должен быть флаг Transfer Complete (TC), по которому можно отлавливать окончание передачи.
У контроллеров типа STM32 программа как правило выполняется из FLASH памяти, хотя есть возможность и из оперативки.
Если используется операционная система, то как правило они все копируют в оперативку.
В общем, зависит от конкретного проекта
Как частоты настраивал? APB1 prescaler какой? Ну и помни, что у таймеров на шине APB1 у STM32F1 (может и на APB2 тоже, не помню точно) частота в два раза выше, чем у периферии. Поэтому делители надо рассчитывать с учётом удвоенной частоты. Ну а ещё поля Period и Prescaler структуры TIM_BaseTypeDef типа uint16_t, если не ошибаюсь, хотя сейчас уточню в своих проектах.
>а на деле в проекте пины не настраиваются. хотя в кубе настроены. это пиздец, я ебал. в кубе эти пины настроенный уже а в готовый проект не добавляются.
Вот поэтому и надо пользоваться SPL вместо куба. У меня на работе два прогера пишут под SPL, один - под куб. При этом SPLщики не чураются для быстрого прототипирования и проверки функционала накидать за пять минут болванку на кубе, потом уйти делать по-уму под SPL. В то время как прогер, пишущий под HAL вечно охуевает то от багов в библиотеке, то от отсутствия или устаревшей документации, то от несовместимости разных версий HALа между собой. Ну и плюс много неочевидных мест.
>Но вот если попробовать записать и считать массив - то в памяти будет записан только последний байт массива, причём записан обширно, в диапазоне адресов байт так на 200.
Код сюда давай, ты, наверно, объебался с указателями.
Это работает хорошо:
uint16_t read16, write16;
write16 = 0xB16C;
//Write to SDRAM
((uint16_t )0xC0000002) = write16;
read16 = ((uint16_t )0xC0000002);
Адреса заданного банка начинаются с 0xC0000000
А вот это - уже нет:
for (i = 0x00; i < 0x7F; i++)
{
((__IO uint16_t )0xC0000000 + i2) = (uint16_t)i;
}
read16 = 0;
for (i = 0x00; i < 0x7F; i++)
{
read16 = (__IO uint16_t )(0xC0000000 + i2);
if (read16 != (uint16_t)i)
{
//Обработчик ошибки
}
}
Если делать так:
uint16_t testarr[16] = {0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF};
uint16_t readarr[16];
uint16_t testvar_ptr = (uint16_t )0xC0000000 + 0x100;
memcpy(testvar_ptr,testarr,sizeof(testarr));
memcpy(readarr,testvar_ptr,sizeof(readarr));
То тоже случается обсерушен. Прерывания в это время я выключаю (в errata сказано, что разрешённые прерывания могут портить чтение/запись в память на некоторых ревизиях процессора).
Это работает хорошо:
uint16_t read16, write16;
write16 = 0xB16C;
//Write to SDRAM
((uint16_t )0xC0000002) = write16;
read16 = ((uint16_t )0xC0000002);
Адреса заданного банка начинаются с 0xC0000000
А вот это - уже нет:
for (i = 0x00; i < 0x7F; i++)
{
((__IO uint16_t )0xC0000000 + i2) = (uint16_t)i;
}
read16 = 0;
for (i = 0x00; i < 0x7F; i++)
{
read16 = (__IO uint16_t )(0xC0000000 + i2);
if (read16 != (uint16_t)i)
{
//Обработчик ошибки
}
}
Если делать так:
uint16_t testarr[16] = {0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF};
uint16_t readarr[16];
uint16_t testvar_ptr = (uint16_t )0xC0000000 + 0x100;
memcpy(testvar_ptr,testarr,sizeof(testarr));
memcpy(readarr,testvar_ptr,sizeof(readarr));
То тоже случается обсерушен. Прерывания в это время я выключаю (в errata сказано, что разрешённые прерывания могут портить чтение/запись в память на некоторых ревизиях процессора).
С таймингами объебался, ящитаю. Плюс, когда я настаивал на атмеловском, я указывал, что нехуй ждать сигнала nwait. Т.е. вероятно есть регистр с настройками работы
частоту кварца корректно задал, даже замерял на ноге A1 частоту процессора,
как заюзать systick? не подскажешь?
>>187801
в RCC_CFGR_PPRE1 стоит 0x04 значит, по datasheet "100: HCLK divided by 2"
таймер висит на RCC_APB1
за такое пиздят палкой по рукам?:
TIM_TimeBaseStructure.TIM_Period = 2000;
TIM_TimeBaseStructure.TIM_Prescaler = (uint32_t) SystemCoreClock - 5500;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
>С таймингами объебался, ящитаю.
Причина оказалась примитивнее - забыл затактировать один из портов GPIO, отсюда и кривая адресация.
А почему просто не задаёшь <...>.Tim_ClockDivision = TIM_CKD_DIV2, например? Да и делитель частоты лучше сделай в виде макроса, или посчитай чуть выше.
Продолжение ардуино даунов, я у мамы паграмист я умею паграмировать плис.Азаза у меня отладочная за 500 бачей.Гляди те, я делаю пищалку на макросхеме с 500000 мультиплексоров.Ахахахъхяъ
ты хоть сам понял что сказал? причем тут ПЛИС?
С чего начать осиляторство? Проще ли писать под ОС на МК чем на "голом" железе как диды?
Разные области задач, вопрос некорректен.
c осцилляторства. кварц купи сначала.
походу) ответы перепутал
>С чего начать осиляторство? Проще ли писать под ОС на МК чем на "голом" железе как диды?
Дальше то чё делать собрался?
Я вот пишу под линукс на атмеловском ARMе. И под FreeRTOS на STM32, который тоже ARM. Под линухой не могу решить задачу подачи на выход кратковременного импульса строго заданной величины, не залезая на железный уровень, а под STM32 могу, ибо уже на железе работаю. Вопрос в том, какая стоит задача на будущее.
Ну как нубу, я бы посоветовал для начала в железе поковыряться, чтобы понимать что и к чему, а потом бы на высокий уровень полез, учитывая специфику борды. Если бы спросил в /pr/, то я бы начал спрашивать, нахуя тебе железо, если под всё есть драйвера (но это правда только для /pr/, а тут аноны некоторые свои устройства собирают, к которым драйверов нет).
>Под линухой не могу решить задачу подачи на выход кратковременного импульса строго заданной величины, не залезая на железный уровень, а под STM32 могу, ибо уже на железе работаю.
Кстати, почитай про PRUSS в AM335x биглбоновских, если еще не встречался, - такая-то годнота, не нужен дополнительный МК/ПЛИС для realtime задач на линупсе.
>С чего начать осиляторство? Проще ли писать под ОС на МК чем на "голом" железе как диды?
На железе начинать писать строго обязательно для понимания сути происходящего. Освой хотя бы основы CMSIS (хотя регистроёбство многие недолюбливают, предпочитая какой-нибудь HAL), разберись что и как работает, напиши что-нибудь на циклах и прерываниях. А потом уже можешь к ОС переходить.
Поделитесь опытом, кто запиливал общение между двумя контроллерами STM32 по SPI в режимах Master <-> Slave. Как я понял, в SPI, в отличие от того же уарта, нельзя отослать сразу несколько посылок, не дожидаясь ответа. Так как же наиболее правильно организовывать пересылку пакетов (штук десяти 16-битных посылок, например)? Как правильно прикрутить DMA чтобы не заниматься рутиной, пердолингом и синхронизацией на мастере?
Есть небольшой пример, но очень сложно мне сейчас проверить работоспособность, нет логического пробника и второго контроллера.
В программе Master, для тестов сейчас, я замкнул MOSI и MISO вроде данные передались в Reciever_SPIBuffer.
Попробуй протестировать вместе со slave
http://pastebin.com/2AeACbgB - Master
http://pastebin.com/dU3NaKTw - Slave
в Datasheet написано какие каналы DMA отвечают за какую периферию
Спасибо.
У меня поначалу не завелось по два DMA, вместо данных приходил мусор. Потом разобрался, оказалось, что обязательно надо было делать подтяжку при настройке пинов MOSI, MISO и SCK.
Это вопрос не для двача.
Задача-то какая? От неё и танцуй.
Разбираюсь же, будьте вы людьми. На самом деле, нужно всего лишь правильно оформить секцию специфического старта, но копаться в талмудах линуксобояр крайне не хочется.
С MCS51 возможно ЕОТ в 50% случаев. ARM же ставит условием ТНН. Решать тебе.
Согласен. Именно с 144 ног начиная.
В тянках.
нихуя не понял прорведеных аналогий
т.е. ты хочешь на ПЛИС реализовать МК, а потом засунуть туда какой-нибудь uClinux?
Не слишком ли это сложно?
лучше разберись с ПЛИС, сначала, и пойми что это, как там реализовывают другие процессоры. ПЛИС это не МК, это, простыми словами, набор логических микросхем.
это и на авр/ардуино можно запилить, если подключить внешний цап, но получится в любом случае хуита уровня 3-долларовых плееров с китая, так что смысл такое делать отсутствует
Можно попробовать использовать MP3 микросхему, например VS1053 там есть подключение по spi.
она будет у тебя для декодирования музыки. а для работы с flash и экраном у тебя будет МК.
> с оптимизацией -Os компилятся только те функции библиотек, которые я использую?
если при компиляции ты не сделал статическую линковку (напр. флаг -static), то да.
>Есть флаги, которые нахуй трут весь текст (в библиотеках много вывода лога по уарт)?
флагов точно нет. Возможно, существуют другие способы, но всё полностью зависит от библиотеки.
да и что-то я не понял
>Но что-то бинарник большой, 37КБ при sram в 32.
Ты собрался грузить весь бинарник в озу? Нахуя?
Бинарник флешлоадера жи
Почему отсутствует? Мне вон нравится мультибитные ЦАПы, но их в готовых решениях раз два и обчелся, и те сделаны из говна и палок, с ценником как у ушатаной иномарки.
>>190351
>VS1053
Почитал описание, годная штука, даже вроде как умеет во флак с плагинами, плюс имеет выход на внешний ЦАП. Как я понял с этой микрухой мне и арм особенно не нужен, подойдет какая нибудь средненькая ардуина, по крайней мере для них продаются платы расширения с этой микросхемой.
Потянет, потянет. СЕС это протокол управления устройстами по HDMI. Он поддерживается в stm32f100
так же как и на обычном контроллере. Сначала поебись с обычным МК и Линуксом. К слову сказать на Марсаходе есть цикл статей о том как впердолить линукс в ПЛИС.
А там срач был о том, что ПЛИС не для того придуманы? Красноглазые скоро на квантовые будут свою швабоду накатывать
ну хуй его знает, система на кристалле жи наверное есть задачи где в ПЛИС надо запихать красногалзое поделие. Это иногда даже удобнее, если руки из правильного места растут все в одну ПЛИСку запихать. Хотя бы в учебных целях поебаться с этим надо. По мне некоторые вещи удобнее учить все таки на ПЛИСках, в контроллерах все спрятано в регистры, а когда реализуешь на ПЛИСке хотя бы какой нибудь интерфейс то уже действительно понимаешь что и как работает. Хотя сейчас есть же SOC микрухи с уже готовым процессорным ядром, и танцы с бубном не нужны.
Говорят в интернете проверять флаги, ну проверяю
сделал задачу проверки флагов, один хер, могут флаги не поменяться, а адаптер виснет, индикаторы не горят, задачи vTask_uIP_periodic(void pvParameters) и vTask_uIP(void pvParameters) как крутятся, так и крутились
http://pastebin.com/T8K2yTqr - проверка флагов.
МК - STM32f103RCT6
уже давно проблема, искал в интернете, у народа тоже виснет, решений толковых не пишут
Самое мудрое - вести некий лог или выводить куда-либо состояние. Также, очевидно, срабатывает некое прерывание (программное или железное), при его срабатывании стоит зажечь индикатор например, чтобы хотя бы понять, куда идти
Алсо, причина может быть в банальном пине, который не переведён в z состояние.
Может кто-то сталкивался? А то похоже предстоит долгое штудирование мануала по таймерам
[code]
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM15, ENABLE);
TIM15->PSC = 24000 - 1; // Настраиваем делитель что таймер тикал 1000 раз в секунду
TIM15->ARR = 1000 ; // Чтоб прерывание случалось 2 раза в секунду
TIM15->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
NVIC_EnableIRQ(TIM1_BRK_TIM15_IRQn); //Разрешение TIM6_DAC_IRQn прерывания
NVIC_SetPriority (TIM1_BRK_TIM15_IRQn, 4);
TIM16->CR1 |= TIM_CR1_CEN; // Начать отсчёт!
тут сразу срабатывает прерывание, хотя срабатывать должно только через секунду
[/code]
возможно при смене ARR оно вызывает прерывание
TIM4->EGR |= TIM_EGR_UG; // костыль чтобы не вызывалось прерывание при старте
TIM4->SR &= ~TIM_SR_UIF;
Поясните за использование стандарной библиотеки периферии для стм32 это зашквар или нет, как паступают профи?
паступают следующим образом, берут и используют
но библиотека в целом хуёвая, постоена по принцепу лижбы ета хуета хоть как нибудь работала, динамическая семантика, использование языка Си как Си с класами, активно используюется препроцесор
Не знаю. Некоторая вещь, которая обозначает конец трансфера или что-то типа этого
Таймер дёргает анус ADC, который начинает преобразование.
Частота ADC: 8 МГц
Частота МК и таймера: 32 МГц
#define ADCSAMPLESPERSEC 100000
Таймер считает до: 32000000 / 100000 = 320
http://www.mouser.com/ds/2/405/ads1263-710436.pdf
>Где применяют
>High-Resolution PLCs
>Temperature, Pressure Measurement
>Weigh Scales and Strain-Gauge Digitizers
>Panel Meters, Chart Recorders
>Analytical Instrumentation
>>187848
>>187483
>>187124
>>187198
Сап, раданы.
В общем, забил я тогда на проблему, она не была настолько глобальной, затикал временно от RTC и дело с концом. А вот дальше проблема лавинно начала нарастать.
Сейчас разобрался, т.к. вообще прифигел, настраивая ШИМ на таймерах.
Проблема была вот в чем:
Кварц микроконтроллера (HSE) у меня был 12 Мгц. По стандартной настройке в system_stm32f10x.c прописан параметр
PLLCLK = HSE * 9 = 72 MHz (там расчитано на то, что вы поставите кварц 8Мгц). И, это означает, реальная выдаваемая частота МК выходит 108Мгц, Т.к. внешний кварц (мой 12Мгц) умножается на множитель 9. Мне необходимо было просто поменять множитель PLL. c 9 на 6, что я и сделал.
Вот скрины, приятно смотреть.
Любой cortex m3,тот у которого RAM больше. Флеша в 64...128 кб хватит на многое.
Более того, даже модем удастся закодить.
Шапускаю швой швабодный шпутник. Швабодный обмен информацией и вообще, швабодка. Основные будут на орбите геостационарной, а на средней и низкой будут ретрансляторы, которые смогут переключатся в основной режим. Почти, что, проект по обеспечению всей Земли интернетом.
Тебе нужна радиационно-стойкая военка ,анон. Теги: НИИЭТ, Миландр, у этих товарищей есть кортексы
В анус себе тыкни, мразь!
Да, накати ведро или линукс
Ты хочешь сказать, что производитель нихрена в нет не выложил документацию? Что за плата, кстати?
Да и хлебница с проводами у меня есть.
http://www.aliexpress.com/snapshot/6124307167.html?orderId=62576689192091
заказал, в комплекте не оказалось диска, забил. Сейчас захотелось поковыряться - а документации нигде нема. Китайцы пока молчат.
Единственное что нашел - http://www.haoyuelectronics.com//Download/ HY-MiniSTM32
Но там плата другая, без кнопок
Вы больные люди. За 42 бакса купить такую хуергу без доков и поддержки.
За 25 можно купить нормальную 429zit или за 60 32F469IDISCOVERY
http://www.st.com/web/catalog/tools/FM116/CL1620/SC959/SS1532/LN1848/PF262395
судя по этой теме
http://forum.easyelectronics.ru/viewtopic.php?f=35&t=8595
ты купил какоето говнище, китайское, хуже ардуины
>>208526
Утешает что я покупал её до падения рубля, за 1,5к.
Эта норм? http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/LN1848/PF259090?s_searchtype=keyword
Думаю пока обойтись без тачскрина
> Думаю пока обойтись без тачскрина
Она с тачскрином. У меня такая. Пока слеганца пытаюсь освоить.
Бюджет не позволяет, как придет, попердолюсь и посмотрю что да как.
Может доллар снова будет 40
Ищи на свой процессор Programming manual(технические характеристики, инструкции), Reference Manual (описание регистров), User Manual (библиотека SPL), Datasheet (распиновки, электрические характеристики).
Лучшего не найдешь. Вся эта поебота в инете - полный шлак:
1. GPIO бывают нескольких типов, а какие - погуглите.
2.вот здесь я приведу работу периферии X, бит а отвечает за то и это, b за это и то, с - да хуй знает, я не разобрался, но если не поставить не работает. Если хотите поуглите.
3.Дальше я поставлю комментарии в работе программы, как и что настраивается но что я не знаю, комментарии ставить не буду и умолчу. Надеюсь погуглите сами.
> Ты хочешь сказать, что производитель нихрена в нет не выложил документацию?
Добро пожаловать в Китай: http://fixled.ru/datasheet/HY-STM32_100P.pdf
>>208522
Сюда смотрел: https://kbiva.wordpress.com/2013/07/24/stm32f103vet6-microcontroller-development-board-hy-stm32-with-lcd-module/ ? Гражданин с такой же платой пердолится.
ПЛИС же
JTAG везде один и тот же? Подойдет ли дешевый USB-JTAG, про который написано, что он для Altera (с Ебэя, ессно) для работы с остальными МК?
Да
не покупай такой - этих поддельных Альтер 10 штук разных видов в одинаковом корпусе. проблемы с поддержкой обеспечены, не говоря уже о работе в линуксе
рекомендую этот: http://ru.aliexpress.com/item/ST-Link-st-link-V2-for-STM8S-STM8L-STM32-Cortex-M0-Cortex-M3-SWIM-JTAG-SWD/32322884886.html
работает везде, умеет и JTAG и SWD, стоит столько же
Merci beaucoup, Antoin!
Вот, нашел такое: http://www.atmel.com/products/microcontrollers/arm/sam9m.aspx
15$ штука на али.
Насколько трудно запилить себе сотовый на ведре?
а ведро это что?
Кажется неплохой результат. Прикинь сколько потребуется умножений для выполнения ДКП.
>Я надеялся, что будет 40-50мс, видел какой-то проект, где тоже на stm32f4 320x240 сжимают в jpeg и передают на пеку с 20фпс.
Ну значит у тебя алгоритм неочень. Попробуй векторные операции заюзать.
Не знал, что у Cortex-M4 есть SIMD инструкции. Я писал в основном для 1986ВЕ1Т и совсем немного для STM32F1.
>>210797
Но все равно это SIMD совсем не то что в x86. Максимум что можно использовать - что-то вроде SMMLA (умножение со сложением).
Перемножений потребуется (320 240 16) * 3 = 3.6 млн. Не так уж много, но потом еще кодирование методом Хаффмана потребует довольно много операций (затрудняюсь оценить порядок).
Сложно что-то говорить не видя кода (да и видя тоже), проверь, грамотно ли ты используешь память: все буфера и массивы нужно по максимуму реюзать, избегая malloc-ов, не делаешь ли ты одну и ту же работу по 2 раза: по возможности кэшируй промежуточные вычисления.
Это как раз главный её недостаток.
Под прыщеARM opencv работает на ура, проверено™, а вот под Cortex-M4 я уже давно хочу её собрать да попробовать что там можно сделать на 256кб RAM, да никак руки не доходят.
>Не знал, что у Cortex-M4 есть SIMD инструкции
Более того, там есть даже DSP либа. Вот, нашел для себя, и для тебя заодно, там даже примеры есть:
http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php
Да нет смысла ее собирать, она даже под мощные мобильные процы не оптимизирована для ARM. Опун сурс нужен, чтобы посмотреть детали реализации, скрытые константы там, удачные решения, и все то, чего нет в статьях. Библиотека эта громоздкая, и всегда она будет избыточной.
Ну DSP там вообще говоря так себе. Но за неимением лучшего - сойдет. Всяко лучше чем дрочевать на ванильному thumb2.
http://www.arm.com/files/pdf/DSPConceptsM4Presentation.pdf
какой-нибудь зверюга типа qualcom 810 вполне справляется с задачами обработки графики до 4К@60
> qualcom 810
Купил бы кит, если бы ссаный доллар не стоил так дорого.
https://www.intrinsyc.com/snapdragon-embedded-development-kits/snapdragon-810-development-kit/
Ну как бы уже считаю что дорос, а вообще мне интересны системы обработки графики и звука.
Вот такие процы тож гуд:
http://www.ti.com/ww/ru/prod_dsp.html
тебе не дадут на него сдк так как ты хер простой, для люмпенов только кортексы и кривой алвинер
Нахуй тогда нужен проц который не поюзать без кривого уёбищного сдк?
Лучше пойду под balckfin'ы gcc конпелять.
> Не для того ни для другого нет SDK в свободном доступе, ни на торрентах?
Нет, разумеется. Дают только после подписки кучи всяких Non Heterosexuality Agreement, а поскольку в розницу (или даже мелким оптом) такие камни не продают, то и пиратить SDK никому не нужно.
>>212405
> Нахуй тогда нужен проц
Для белых людей из промышленности, а не для всяких гаражных ниггеров.
NDA - выебут всю контору, если спалят утечку.
>Non Heterosexuality Agreement
Тонко ты, лол. Не сразу вчитался.
Ладно. Но там же есть ссылка на чекаут через payal? Разве я не смогу купить одну штучку? Или смогу?
Вот ссылки на всякий их софт:
https://developer.qualcomm.com/download/software
Ты уверен, что ты не заблуждаешься? Даже Datasheet на их проц в свободном доступе есть.
даташыт неполный, софт в свободном доступе неполный
все огорожено анальными заборами
купить можешь, можешь скачать и наслаждаться анальными утехами если гаражный негр, полный сдк только для белых людей
О, брофист.
У меня такая проблема, при включении тактирования порта А (любой пин) при прошивке Keil выдает ошибку и плата зависает, оживает только если стереть флеш в ST Visual Programmer. Это я обнаружил когда пытался в ЦАП. При этом все остальные порты работают нормально, заменю в коде например GPIOG на GPIOA - и все, пиздарики.
Не было у тебя такой проблемы? Я чего-то не понимаю? Плата бракованная?
только учусь в микроонтроллеры
1) 00101010
2) 00010101
3) 00001010
4) 10000101
5) 01000010
6) 10100001
7) 01010000
8) 10101000
9) 01010100 - этот байт приходит сразу же после 8-го, без задержки
Потом снова 1 и так по кругу.
судя по пику у тебя stm32f429i-disco, держи схему к нему, посмотри может какая периферия висит на тех ногах или еще что http://www.st.com/st-web-ui/static/active/en/resource/technical/layouts_and_diagrams/schematic_pack/stm32f429i-disco_sch.zip
Дело не в периферии я думаю, ибо ноги с периферийными диодами работают, а тут целый порт А крашит работу МК.
Вот рабочий код http://pastebin.com/ZcV4TYht
Вот код который выдает ошибку http://pastebin.com/NZJPycKk
Как видишь разница минимальна.
Ошибка "Cortex-M error. Cannot access target. Shutting down debug session."
Не совсем понял о чем ты, но проблема разрешилась - собрал с нуля проект с подключением вручную StdPeriph по одному мануалу с ютуба, теперь ошибки не выдает.
Жаль что в пятом кейле нету СтдПерифа в списке либ к плате по умолчанию Отсюда начался срач SPL vs HAL?
Отвращение к CMSIS было настолько сильно, что я в итоге написал свою либу с нуля по даташитам. Только то что мне нужно. Причем в процессе написания растет понимание, так что может когда и не в падлу будет этот смсись снова поковырять если очень припрет.
Стандартные: ГПИО, УАРТ, АЦП, возможно парочку примеров с ДМА, чтобы понять плюсы его использования. Может быть есть какой-то аппнот, где расписано использование всей этой переферии с примерами кода (так у АВР сделано, очень понравилось - сразу все вкурил)
Очень хороший примеры, правда на немецком языке, переведи на русский. А если не хочешь переводить с немецкого, возьми оттуда примеры и почитай USER MANUAL на микроконтроллер, там написано про SPL. Можно еще попробовать логическим анализатором посмотреть через симулятор, что там происходит.
http://www.diller-technologies.de/stm32.html
Я немецкого не знаю. Но с SPI+DMA мне это это помогло.
Что ты блядь куда передаешь? Твой пост нечитаем. Могу сказать, что интерфейс SPI простой как плуг, если ты нуб, то гугли статьи общего характера на хабре/гиктаймс, если какая-то конкретная проблема, то внятно всё опиши.
У ST есть же тонна аппнотов по STM32Fx буквально на все.
А что ты хочешь понять по DMA? В cлучае SPI ты с DMA напрямую не взаимодействуешь. То есть DMA регистры не нужно трогать. Просто устанавливаешь бит "включить DMA на tx rx". В отличие например от I2C или DAC. Хотя наверное cмсись от тебя эти подробности все равно прячет в своих хитровыебанных структурах. Аппнотов море на английском.
Вообще нет, фигню, сказал точно также для SPI нужно конфигурить, по крайней мере для f4
Two DMA requests are configured:
• DMA2_Stream2 for SPI1_RX: this stream is configured to be the highest priority in
order to serve in time the SPI1 received data, and transfer it from the SPI1_DR register
to the SRAM buffer.
• DMA2_Stream3 for SPI1_TX: this stream transfers data from the SRAM buffer to the
SPI1_DR register.
Вот документ нормальный:
http://www.st.com/web/en/resource/technical/document/application_note/DM00046011.pdf
>А что ты хочешь понять по DMA?
Да не, спасибо, я уже допетрил как оно работает. Я тогда еще подключал ILI9341. А это я просто кинул мануальчик где я научился работать с DMA.
Ну из ILI9341 я много выжать не смог то ли контроллер нужен другой то ли дисплей, хз что. 0.7 без DMA 11-12 c DMA. stm32f103.
Кот вылизывал, по-всякому.
Выше, ну никак.
что ты юзал?
А чем вы fps меряете, аноны? Я когда с параллельным интерфейсом возился, то мерял только скорость полного заполнения экрана, что мне кажется самый медленный тест. У адофрукта демка рисует всякие линии да кружочки. Параллельный конечно просто летает, даже 8 бит. 2"4 240x320 fillscreen меняет цвет экрана мгновенно, даже для глаза незаметно. Так потом тоскливо с SPI only работать.
Включил заполнение экрана 1 кадр и запустил часовой таймер. При полном заполнении программа остановилась и показала время.
АРМ - говно. 88 и 99 тебе.
Я заебекался пытаться добавить либу в CoIDE
Development toolchain supporting the STM32F429
Discovery kit
• Altium: TASKING™ VX-Toolset
• Atollic: TrueSTUDIO
• IAR: EWARM
• Keil™: MDK-ARM
Что из них нормальное и не монстроподобное
Keil ноорм синтаксис имеет, сам лично в иаре работаю. На самом деле, берёшь любую иде, и настраиваешь компилятор/линковщик/ассемблер gcc, хули как маленький. У иара и кейла свои компиляторы, говорят, лучше, чем гцц собирают.
Хуйню сказал и рад.
Да, скачай на сайте последнюю версию и всё.
Как и что делается, где настраивается говорят тут:
http://www.youtube.com/watch?v=Qqk81seMlHA
Хули доебался, долбоеб? В >2016 под арм писать на асме является верхом долбоебизма и никому не нужно. Во-вторых, подобия cmsis выпускают всякие атмелы, заточенные под себя; при разборе, эти библиотеки, на деле, являются тупо значениями регистров и всякой настройкой ДМА. Нахер городить свой огород, когда нормальные программисты сделали эффективную открытую реализацию? Короче, пошел нахуй, тебе не рады, въеби говна, школьник с авр
> эффективную
> писать на асме является верхом долбоебизма
> когда нормальные программисты сделали эффективную открытую реализацию
мхаха, максимум ордуинщег
>въеби говна, школьник с авр
нет ты
>ты
>Компилятор си сделает
с хуя ли такие заявления? некоторые вещи вполне можно прописывать на асме и это вполне профессиональный приём, именно потомучто компилятор не всё может оптимизировать, и я могу написать оптимальней а ты нет, потомучто ты ардуинщег мхаха
нет ну НА САМОМ ДЕЛЕ я конечно потролил, cmsis получше всяких ордуин и я тоже пользуюсь этой поделкой криворуких индусов, но не потомучто она пиздец какая эффективная, а потомучто у меня нет времени переписывать нормально это говнище
Похоже, кто-то не знает директив компилятора для си, которые показывают, как оптимизировать код. Более того, любой армо-господин знает ассемблер. В-третьих, частенько многие задачи арм инициализации-обработки являются впихиванием значения х в адрес y, что, очевидно, на асме никак не улучшишь. Иди жпио настрой на уарт, долбоеб, сделай очередную миллиардную хуевую реализацию без стека.
>директив компилятора для си
дерективы тебе непомогут долбоёбина, да можно писать на C хорошо и оптимально но если писать на asm хорошо то это будет всеравно быстрее
вот напрмер давай разъберём эту ситуацию
http://stackoverflow.com/questions/11508172/c-vs-assembler-vs-neon-performance
почему ассемблер всеравно быстрее чем C?
и почему пришлось танцевать с бубном что бы добится того чтобы код на C был близок к асемблерному?
А на ДСП вообще будет два такта. Короче, все ясно, ты на втором курсе и только начал асму изучать, уебывай.
И тот автор такой же профан, он не указал флаги компиляции хотя очевидная эплоблядь не знает таких слов и собирал, скорее всего, из-под дебуга.
не ДСП а NEON
а ты уже на третьем курсе? уже все флаги выучил?
ясно всё с тобой профессионал теперь уёбывай и немешай школьникам писать на асме в ардуиностудии
Обычно зажимаешь контрл и щелкаешь мышкой по переменной/функции. Здесь не работает. Как?
>с хуя ли такие заявления?
С того что все давно написано и отлажено и не 1 раз.
> у меня нет времени переписывать нормально это говнище
И знаний. Охуеть, пришел какой-то и начал рассказывать что сейчас напишет CMSIS лучше, а ЕГО код на асме у него будет работать быстрее, ну может и будет, если светодиодом поморгать. А реализуй-ка ты там протокол - да обосрешься, переполнишь стек и схватишь HardFault.
>потролил
Сам использует, сам тролит. Да ты, походу, ошибся тематикой.
Я нажимаю ПКМ -> goto defenition, предварительно скомпилируй.
Значит еще нужна библа с указанным именем из графы Graphics Display (третья снизу в списке)
CoIDE ацкое говно. То есть нормально сперва как легковесный эклипс. Но глюкавый сука. Так что юзаю эклипсе и хайль. Это две противоположности. Кайл использую для маленьких проектов, быстро поднял, запустил, потом закрыл нахуй. Эклипсь удобен, но монстр. А еще в кайле редактор полное безнадежно унылое говно. Зато отладчик супер. Кому что
Двачую про cmsis. Жуткая хуйня но лучше ничего нет. К ней пилят всякие надстройки, что наверное заебись с тз самого писателя, так как это он же писал и знает что да так. А остальным придется еще и с его кастомной хуйней разбираться, и все равно вель придется рано или поздно в cmsis смотреть, потому что нихя это не black box. Я свое написал, но не надстройку, а по спекам. Но так делать тоже хуево, ибо "неправильно", только как хобби, а остальным блять марш cmsis или HAL учить.
>>214498
А батарейки то хорошие или китай. У них небось емкость маленькая да и при таком токе они наверняка будут разряжаться в момент. Может лучше LiPo??? Проблема правда, что нужно до 5v тогда регулировать
>>214506
Не понял, какой тебе еще контроллер? В смысле как 5v получить из твоих батареек? Они у тебя 3.7? Можно наверное еще один v регулятор, но хз может headroom не хватить если особенно подсядут. Надо пробовать. Главное не пытайся резисторами делить.
Оно прошивается напрямую, какие-то дополнительные программаторы не нужны?
Как запитать от 220В?
судя по вопросам зря ты это купил.
надо было
http://ru.aliexpress.com/item/Free-Shipping-STM32VLDISCOVERY-STM32F100RB-STM32F100-STM32-Evaluation-Development-Board-Discovery-Kit-Embedded-ST-Link-wholesale/32316581424.html?spm=2114.30010708.3.2.QKia1f&ws_ab_test=searchweb201556_7,searchweb201644_3_505_506_503_504_502_10001_10002_10017_10010_10005_10011_10006_10003_10012_10004_10009_10007_10008,searchweb201560_8,searchweb1451318400_-1,searchweb1451318411_6449&btsid=3f26a3f7-e787-4373-a556-2f9838ea214e
или
http://ru.aliexpress.com/item/New-arrive-STm32-L1-Discovery-kit-STM32L152C-DISCO-base-on-STM32L152RBT6-100-original-STM32-development-board/32564897639.html?spm=2114.30010708.3.44.QKia1f&ws_ab_test=searchweb201556_7,searchweb201644_3_505_506_503_504_502_10001_10002_10017_10010_10005_10011_10006_10003_10012_10004_10009_10007_10008,searchweb201560_8,searchweb1451318400_-1,searchweb1451318411_6449&btsid=3f26a3f7-e787-4373-a556-2f9838ea214e
Цены пиздец конечно стали
мда цынники даже на говноборды стали недемократичными, а если приобретать отдельно камни и обвязку а потом ЛУТить то наверно то на то и выйдет в итоге
>12X faster than assembler
Ассмеблешваль себя же затраллила. Там про профит от NEON операций.
>>214584
Ваня, не выёбывайся и слушай свою любимую песню «Валенки»: http://www.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-arduino/32478120209.html
Что это за дичь с ценниками, купил у местных барыг клон стлинк v2 и f103 суммарно за 500р, тренируйся до усрачки. А еще продает cortex-M0 в корпусе TSSOP-14 за 50/штука, такая то вкуснятина.
> купил у местных барыг клон стлинк v2 и f103 суммарно за 500р
Мне кажется, что тут пиздежом завоняло на пол треда. Или покупал в бородатом 2013-14. Я вот дискавери ф429зит за 1100р купил, хуле.
1 471,48 руб ???
Вы че охуели за такие деньги покупать. Можно же микро ардуинку за копейки, стереть нахуй bootloader и просто использовать как арм. Своих можно кнопочек и лампочек навешать. Бакса 3 наверное на ебае.
Ну ебта 429 хоть и дорого но вещь! И там небось дохуя наворотов, LCD, всякие датчики хуяччики годнота! А это сраная f103 там же нет нихуя и 1.5 тыщи???
Так долляр-то, по 75 нонче. 429 сегодня стоит 3183.95р https://www.terraelectronica.ru/catalog_info.php?CODE=1200422
А вот 103 у китайцев, я бы не брал, нуклео с программатером столько же стоит.
А что не так, я же не про атмегу говорю, а про stm32f103c8
http://www.ebay.com/itm/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-Arduino-DHUS-/321569700934?hash=item4adf0c3c46:g:~4QAAOSwosFUVEEU
Или там слово ардино тебя пугает, поэтому зашквар?
Да нормально. Я у китайцев брал просто ГОЛЫЕ чипы f103. Это пиздец я такого никогда не видел, они пришли голые корпуса, просо завернутые в ЦЕЛЛОФАН. Но ничего запаял, работает! А уж если платку взять за 3 бакса и к ней stlink программатор тоже стоит копейки. jlink чуть дороже. Пацаны вы че, охуели столько денег тратить.
Нихуя. Ну это пиздец это не жизнь.
http://www.ebay.com/itm/1pcs-STM32F407VET6-STM32F407-STM32-LQFP100-32-bit-ARM-MCU-ST-IC-/321433106563?hash=item4ad6e7f883:g:QpcAAOSwcnpTnAp0
Это конечно не 429 но тоже годнота. И недорого.
Я никаким травлением не занимаюсь, а просто покупаю адаптеры QFN -> DIP + обычные дешевые платки и все на проводочках. Получается некрасивая но работоспособная махараечка за смешные деньги.
> А что не так, я же не про атмегу говорю, а про stm32f103c8
Всё так, просто Шеппель и слыхом не слыхал про нашу сингуль-хроматронную оптику эта платка никакого отношения к «ардуинам» не имеет, что бы там не писали китайские продавцы-сеошники на ебэе и алиэкспрессе.
Посмотрел в Терре (920), посмотрел на сайте st (5.645х76=430) и понял, что терра охуела вкрай.
Хуй знает, я ни разу рил ардуино не щупал, а что делает платку "ардуиной"? Я ее использовал исключительно как голый арм. Но там же usb разъем, наверное есть ардуинский bootloader и перемычки откуда загружаться и тп. Чего там принципиально нет, чтобы не считаться минимальной ардуинкой?
А нет, поторопился, на st 5.645 похоже вымышленная цена. Кликнул на digi и mouser - 10 баксов, плюс доставка.
Точнее не вымышленная, а оптовая (мин 10 тыс).
> Но там же usb разъем,
> наверное есть ардуинский bootloader
> перемычки откуда загружаться
Потому что у микроконтроллера есть USB2.0 на кристалле, а фабричный загрузчик есть у любого STM32: http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
> Чего там принципиально нет, чтобы не считаться минимальной ардуинкой?
Того, что она не совместима (ни программно, ни аппаратно) с отладочными платами (включая клоны) от «Ардуино». Разве что вкрячить туда STM32Duino, но так любую плату на STM32 можно ардуиной назвать.
>Потому что у микроконтроллера есть USB2.0 на кристалле, а фабричный загрузчик есть у любого STM32
Ну разумеется, и почему на основе такого чипа можно нельзя сделать ардуино совместимую плату, прошив туда правильный загрузчик, например?
>не совместима (ни программно, ни аппаратно) с отладочными платами
Вот тут я ничего не могу сказать, так как никогда ардуино не пользовался. Что мешает энтузиастам запилить такую совместимость?
Есть же какие-то Maple IDE. И что значит несовместима на аппаратном уровне, в смысле всякие GPIO pins не совпадают?
То есть под совместимостью ты имеешь ввиду, чтобы можно было компилить и запускать сто тыщ мильонов существующих "скетчей" без каких либо изменений?
Я вот сюда посмотрел и примерно начал понимать про "совместимость", тут несколько категорий:
https://en.wikipedia.org/wiki/List_of_Arduino_boards_and_compatible_systems
Один из критериев видимо, чтобы shields работали. Тогда конечно, какая там совместимость.
Хуяссе, почему-то я был уверен что есть какое-то официальное хуилоново, или как его, для арм.
>Того, что она не совместима (ни программно, ни аппаратно) с отладочными платами (включая клоны) от «Ардуино»
Вапщето ардуино это просто надстройка над cmsis. Чего бы ему не быть совместимым?
Интересно, если сделать аналогичный DIY компьютер на ладони, во сколько обойдется?
Если есть опыт разводки скоростного говна - дохуя, если опыта нет - дохуя * 3+ сфейленных дизайна.
Пока воняет дерьмом из твоего ротешника. Но да, ценник немного поднялся. Теперь не 500, а 700р. Но и дорар на улице по 80, а не по 65.
Mur4ik, не нервничай, твои пацаны видимо остатки позапрошлогодние распродают.
http://www.aliexpress.com/item/J34-Free-Shipping-ARM-STM8-Development-Board-Minimum-System-Board-STM8S103F3P6-Module-for-Arduino/32351992629.html?
чот не вижу двух контактов для swd
насколько я знаю, это невозможно. Либо SWD, либо JTAG. Но тут нет ни того ни другого
онлайн компилятор, офлайн компилятор можно прикрутить, онлайн сообщество
куча разных годных и неочень библиотек, попытка запилить HAL, в целом сорт ардуины, но поддерживается продвинутое байтоёбство, работа на прерываниях, использование DMA, даже есть RTOS
в целом годная штука, правдо разбор исходников в некоторых местах выявил сильно ардуино-индуский стиль програмирования
пользоваться можно, зависимости нет
Как по мне, лучше, чем официальные примеры от производителя, ничего не придумано.
согласен, но примеры от производителя не охватывают все типы извращений которые можно проделывать с их восхитительными девайсами, и производители не быстро правят косяки котрые изредка имеею место быть, а в mbed можно нарыть различные извращения и воркароунды
на mbed?
сейчас проект разделился на new mbed OS и mbed Classic
в new mbed отношение ко всему что ниже cortex-M4 стало презрительным
а вот в mbed Classic есть поддержка
https://developer.mbed.org/platforms/ST-Nucleo-F103RB/
Это да. Один SPL от ST чего стоит уже (SPL обновляется быстрее чем документация) и файлов-то некоторых нет, о которых они пишут в своей документации, а примеры вообще, хер пойми как сделаны, файлы от примеров не подходят к SPL. Приходится править.
грустно, много лишних тактов, которые можно потратить на более нужное дело
Ну моргнуть светодиодом не такая уж и плохая затея, скажу я вам.
зависит от операции, для операций с флоатами требуется изрядное байтоёбство и gcc умеет это делать очень эффективно, но увы издержки неизбежны
http://www.keil.com/forum/18033/floating-point-performance-on-cortex-m3/
Как пойти к вам работать?
Съеби
Я не по схемоте, я программист, но блядь тот, кто будет это говно разрабатывать, в схемоте еще хуже меня.
>Я не по схемоте, я программист, но блядь тот, кто будет это говно разрабатывать, в схемоте еще хуже меня.
А конечное устройство получится еще хуже чем ты описал.
Первая вариация пиздец какая кривая, ты бы видел. Я не участвовал в разработке, я программировать сел
Ну ты бы рассказал поподробнее что надо-то именно. Тогда понятно будет, чем тебе помочь.
Вешай свой контроллер к дисплею, от него RS485 интерфейса микросхему, можно и без гальванической развязки (MAX485, ADM485), а потом через 485й управляй. Медленнее, но 220В рядом не так сильно сказываются. Либо сам кабель экранируй.
>RS485
А что если в шине сделать в 2 раза больше проводов, передавать дифференциальный сигнал, как на RS-485, а на обоих концах - дешифраторы на логике?
Тогда проще Ethernet прокинуть. У тебя какая скорость обновления экрана? Видео или просто информационный текст?
Не, я другой анон, предложил как версию.
Информация, экран не нуждается в постоянном оьновлении. Я просто хотел видосики запилить, сливать буфер кадра по дма. Можно даже двойную буферизация, ороро.
Короче, будем перекатываться на миландровский ве91т, пущай развивается электроника в России. Я доволен, проц вполне норм
Блоги дихальта же, даташит и примеры стм, тысячи их, исходники, там много инфы
Ты чтобы помигать светодиодом и поиграться с датчиками Холла ты покупаешь stm8l-discovery. Ну не пустая ли трата денег и сил? Лучше бери ATmega8 или ATtiny2313 для таких дел.
А стоит там атмега.
Тебя читать в школе так и не научили?
> я тут помиргал светодиодом на АВР-ке, сделал энкодер с движка от дисковода
Это не "пустая трата", а подготовка к железному занавесу. Ща еще всяко разных контроллеров накуплю.
Бля, к нему ещё ST-Link нужно было брать?
> миландровский
Любопытно, не знал. Можешь пояснить за их микроконтроллеры. MDR32F9Q2I - это аналог STM32 M3? Совместим ли он в плане программирования, или нужны особые библиотеки программатор окрашенный в хохлому?
Касательно сравнения с конкурентами - хз, у меня опыта мало. В целом неплох: атмеловский sam3s и медленнее, и периферии поменьше. Ядро после пллов на 80мгц ебашит, всякие модные ДМА и прочее. Кристалл большой, да, раза в два больше площадь, чем у конкурентов, техпроцесс не как у тайванцев, зато есть ебучая военная и космическая приемка, метал-керкмические корпуса и позолота, выглядит внушительно.
Хал потихоньку пилят, уже мало чем отличается от конкурентов, есть примеры, собранные под кейл, иар, гцц, вся настройка и конфиги линковщика и флешлоадера, для безпроблемного переката с буржуйщины.
Еррата правда большая пиздец, но это просто слишком мало проц обкатан.
Помимо кортекса м3, есть м4ф и а1 - послабее, но и меньше/дешевле.
>Хал потихоньку пилят, уже мало чем отличается от конкурентов, есть примеры, собранные под кейл, иар, гцц, вся настройка и конфиги линковщика и флешлоадера, для безпроблемного переката с буржуйщины.
Оно в открытом доступе?
Да, у них на сайте полно
Очевидно, что у них нет витрины с этим говном, все ориентировано на фирмы. Но есть путь: тупо написать в миландр, сказать, что ты сиартапер-эмбеддер, частный разработчик, и запросить образец. Возможно, даже бесплатный. Общайся, срсли
Это нормальная практика, знакомый кун получил в свое время образцы альтеровских ПЛИС, тупо написав им. А хули, надо же как-то свое говно двигать
Я пытался ST писать, хуй на рыло, TI сказали - лососнешь, пока почту корпоративную не покажешь. В общем - пидарасы.
Что такое "табличная функция"? Алсо, можешь держать и в оперативку, чому бы и нет?
никаких абсолютно, твой выбор. хоть во флеше, если read only, хоть в раме. и главное в отличие от всяких атмелов не нужно никаких безумных макросов. ибо hybrid harvard, linear address space, оперативка с 0x20..... флеш 0x80.... так же мапится в нуль
значения x-> f(x) записываются в таблицу, чтобы в рантайме не генерить, например синус, для скорости.
Ты вполне можешь в ПЗУ впихнуть, чому бы и нет? Правда, там возможен полуассемблер. И банально сделать константный массив, что лучше
Алсо, я так понял, достаточно указать const, и капилятор сам все расположит гуда надо.
беру дамп пикселей с камеры в реальном времени и отправляю на комп через юарт. 405 камень, камера ov7670.
>Не совсем понял о чем ты
думаю, что ты переводишь весь порт во вход или выход а так как на нём висит СТЛИНК то он сразу же отваливается и программатор теряет связь с камнем.
У меня была потрясающая проблема, что волею случая пин дисплея был заведен на цлк-аут, а в конфигах тактировки забыл указать байпас мод, так как стоял генератор. В итоге при подключенном дисплее контролер подыхал, так как ожидал резонатор, а получил хуй.
>>187272
Поковыряй хал, посмотри конфигурацию скорости в соответствие с даташитом, сделай тупейшую портами ио инициализацию, и посмотри, как сбрасывается дисплей
Действительно, зачем? Где ты раньше-то был, я бы 100 тысяч конторе сэкономил.
>а настроить управление окончания трансфера нельзя
ну да блять, конечно. Ищи внимательнее что-то типа Transfer size, то есть сколько элементов нужно переслать
От HSE работает.
От PLL с таким кодом http://pastebin.com/7m1XzuyF не работает.
Внешний кварц 8 Мгц, PLL=(HSEPLLN)/(PLLMPLLP)
По идее итоговая должна стать 116Мгц
Чому не работает?
Куб выдал такой код - http://pastebin.com/31UDg5gN. С твоим не сравнивал, по картинке вроде 116
У меня плата почему-то зависает. Мб дело в том что флеш не успевает за такой частотой, но на сайтах где идет базовое описание PLL ни слова об этом.
размер изображения 120х176 (20760 пикселей)
формат YUV
не кодирую
фпс 6,5 к/с
собираюсь распознавать изображения
У меня почему-то не работает 0 слой, только 1.
GUI_SelectLayer(0);
GUI_SetBkColor(GUI_LIGHTGREEN);
GUI_Clear();
GUI_SelectLayer(1);
GUI_SetBkColor(GUI_TRANSPARENT);
GUI_Clear();
Должно выдавать зеленый экран, выдает заставку экрана.
Судя по документации https://www.segger.com/emwin-multi-layer-multi-display-support.html
оно таки должно работать
> GUI_Clear();
> рисует дефолтную картинку
Чота я совсем не понял. Закинул я свою 429 в дальний угол. Когда получу чорный пояс по сям, достану.
с буферами для рисования. Тоже не работают и хз как их использовать
Мне бы такие.
Ну тебя в пизду! Я только спать начал нормально, а тут опять полез в мануалы по этому стм-овскому пиздецу.
Не видел код, но вангую, что отрисовка подобна фотошопу: есть слои, есть текущий слой, в котором ты выполняешь граф. операции. Ищи команду смены слоя
Потому что малинка - готовый компьютер.
Благодарю.
Если float представить как int/int что будет быстрее.
int=intfloat
или
int=intint/int
Какой-то ты хуевый, наверное, съеби.
Так-то если брать ассемблер, то на х86 на фпу очевидный инт на флоат, если брать архитектуру с хитровыебанными командами, то очевидное использование команд, наиболее подходящих. Если фпу нет, то ебаный флоат будет каким-то пидорством представлен
Разобрался. Просто диод на плате на частоте порта выше 32 Мгц не работает. Прескейлы не помогают.
Встроенный же, наверно микроконтроллерный?
В референс мануале задержки описаны в параграфе "Embedded flash", тобиш встроенный.
Так это камень на 180 летает, на флеш через делитель же идет. Но даже с ним больше 30 МГц надо задержки вводить.
Он написал про 180 без задержек - такое возможно только если камень на 180, на флеш через делитель (который AHB prescaler). Можно и на 180 гонять флешь, но без задержек он не будет работать.
Т.е. SysClk 180, камень тоже на HCLK работает, не заметил.
Но в любом случае вышенаписанное в силе.
void init_ADC()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_reg.ADC_ContinuousConvMode=DISABLE;
ADC_reg.ADC_NbrOfChannel=1;
ADC_reg.ADC_Mode=ADC_Mode_Independent;
ADC_reg.ADC_ScanConvMode=DISABLE;
ADC_Init(ADC1,&ADC_reg);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
}
int main(void)
{
init_GPIO();
init_Timer ();
init_PWM ();
init_ADC();
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM4, ENABLE);
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
NVIC_EnableIRQ(TIM4_IRQn);
NVIC_EnableIRQ(ADC1_IRQn);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1)
{
}
}
void init_ADC()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_reg.ADC_ContinuousConvMode=DISABLE;
ADC_reg.ADC_NbrOfChannel=1;
ADC_reg.ADC_Mode=ADC_Mode_Independent;
ADC_reg.ADC_ScanConvMode=DISABLE;
ADC_Init(ADC1,&ADC_reg);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
}
int main(void)
{
init_GPIO();
init_Timer ();
init_PWM ();
init_ADC();
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM4, ENABLE);
ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
NVIC_EnableIRQ(TIM4_IRQn);
NVIC_EnableIRQ(ADC1_IRQn);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(1)
{
}
}
попробуй повторить код из онлайн-мануала. У меня все работало, даже целых 2 штуки одновременно
СИтуация такая. Я пока нуб в микроконтроллерах, но хочу научиться и мой, скажем так, наставник посоветовал изучить простенькие китайские микроконтроллеры для игрушек всяких и тд. Не просто так, я буду пытаться разрабатывать всякую сувенирную продукцию и поэтому нужен дешевый контроллер.
Что посоветуете?
по сути один котроллер под разные цели.
Для начала хотелось бы запилить что-то типа китайского фонаря который будет реагировать на движение-при раскачивании будет издавать звук +реагировать на уровень освещенности и изменять режим подсветки светодиодов-переливаться, мигать и тд
Где-то еще и пишут в обязанностях разработку драйверов для устройств, вот это для меня вообще темный лес.
Скажем так, если ты не собираешься выходить выше уровня микроволновок, стиралок, сувениров, детских игрушек - то выбирай Sonix (Sn8p2501bpb), AVR (tiny13, atmega16, tiny2313).
Если ты хочешь двигаться дальше в этом направлении просто поверхностно изучи AVR, мигни диодиком, свяжись по USART с компом, пойми как работает сам контроллер и изучи асм. Это для меня было 3-4 месяца.
Дальше изучай ARM, например Cortex-m3 это ST (stm32f10x) или NXP (LPC176x), таким образом будешь двигаться по ARM, и дойдешь до более совершенных армов, т.к. базовая архитектура будет ясна.
Да, и хочу сказать что изучая такие архитектуры как sonix, pic, avr, не забывай что они все имеют свою архитектуру, и каждый раз пересаживаясь с одного проприетарного контроллера на другой тебе надо изучать полностью его архитектуру, т.к. они совершенно разные, изучая NXP после ST у меня больших проблем не взоникло, а вот ST после AVR - честно говоря, я не сразу въехал (ну еще учитывая что он сам по себе сложнее).
вот тут пишут:
>>188758
а есть какая-нибудь общая обзорная статья по ним? Нашел одну, но она 2011 года и уже може быть неактуальна
Ты сначала возьми AVR, то для чего ты описал, МК вполне подойдет. Все, о чем я тебе писал стоит от 15р. до 150р. для китайского фонаря пойдет AVR tiny13, atmega16, tiny2313, для последнего есть документация в инете на русском, а все эти три МК отличаются периферией и количеством ног. Все равно тебе нужны будут внешние датчики.
Я даже примерно не представляю, как это делать и что для этого нужно знать.
Нормально жи общались!? Какого хуя агришься?
Какие богатыри, какие ножки, наркоман? Ты не знаешь, что есть исконно русское жилище - изба?
И какую ты хату считаешь нормальной? У нас тут лес дешевый (на самом деле нет), а кирпич дорогой. Вот и приходится в таких жить. Я правда отбился от рук, не хочу жить как диды завещали, и въебал себе котел.
Я не шучу, я реально в избе живу. Чо смешного то? Я реально собираюсь автоматизировать отопление, работу наружного освещения, охрану, вентиляцию, контроль насоса скважинного, дренажи и т.д. Да и не с дискавери буду делать, а на стм32ф429зит, а дисплейчик подключать через SPI, чтоб ноги не тратить на параллельный ргб. Так что пройди нахуй, дорогой анонимас.
Это в той, где стены говном обмазывают?
>Так что пройди нахуй, дорогой анонимас.
Я не он, но пообщаться готов.
Ты даже себе не представляешь, как ты себе голову ебёшь в данный момент.
Ты ведь ещё не понимаешь, что каждая из твоих систем (отопление, наружное освещение, охрана и т.п.) должны быть независимыми и надёжными, а вместе их может объединять МОЗГ, но он должен жить отдельно, чтобы при нарушении работы не вешать всё вокруг. На одном 32F4 ты этого делать явно не будешь, ибо дорого...
> ибо дорого...
Но я уже приобрел его. И не дорого, 920р.
Конечно я не буду все вешать на один контроллер. Он и будет МОЗГОМ, а всю чОрную работу будет делать мелочевка по 5 копеек, типа stm8s003k, stm32f103, stm32f401, stm8s003f, атмеги в конце-концов.
>stm8
Нахуй.
>stm32f103
Дороговато.
>атмеги
ДА НУ ЕЁ НАХУЙ!
Советую отличный stm32f030... Его хватит на любую автономку из перечисленных.
Осталось решить, как организовать каналы связи. Ваши мысли?
Ок. Выкладываю всю подноготную. Я старый-престарый хуй, во время строительства своего домишки, решил максимально его автоматизировать, чтоб на пенсии жмакать в экран своего говнопланшета, а у бабки вода горячая в душе отключалась бы. Радиогубительством занимался в далеком детстве, почти собрал с одноклассником компуктер "Радио-86РК", добывая на него детали из станков ЧПУ производимых нашим местным военным заводом, за что были пойманы и в виду малолетства и чистосердечного раскаяния были осуждены на 5 лет условно с выплатой родителями по 150к тех еще рублей( это я к тому, что не жалейте денег на личинусовские хобби, а то они пойдут разбирать Эльбрусы за 400к). Долго не держал в руках паяльник (лет 20), а тут решил тряхнуть стариком, купил ебучий дискавери и все пошло кувырком. Чем дальше я лез в эти дебри, тем больше понимал насколько отстал и дабы не объебаться с инфраструктурой, напихал в свою избу 2 упаковки витухи cat 5e. Так что радиоинтерфейсами страдать не буду, а использую чота вроде rs485. Вот.
> >stm8
> Нахуй.
Почему же? Например в кессоне скважинном, мне надо померить температуру, давление в экспансомате, записать это на флешь и заснуть пока старшой не попросит ему отдать эти данные. Зачем туда ARM городить? Я в терре stm8l151c4 жменю на 300р купил, надо же их использовать.
> Почему же?
Потому что для STM8 только три с половиной компилятора. Один из которых SDCC, а остальное с калечными пропиертарными лицензиями.
Cosmic 32к бесплатно компилит.
> сравнивает кирпич с бревном
> считает, что кирпич лучше
Не лучше! У меня охрененный деревянный дом, дед построил в 50х. Есть печь, руssкая, которая и как плита, и как ебаная батарея, и как рассадник котов. Главное, нужно следить и ухаживать за домом, а также жить в нем
Я сейчас, пока строюсь, живу в избе примерно 1905 года постройки. Это пздц, хотя за 5 (планировалось пару лет, но йобанные деньги не хотят зарабатываться в нужном количестве) лет привык.
>>218608
Возможно, я пока как ребенок, тыкаю примеры, вдупляюсь в этот мозголомный HAL, схемотехникой пока не занимался.
посоветуй годной литературы по ARM и с чего начать изучение, а то через месяц придется работать с этим делом, а я только AVR изучал
Конкретно по stm32 "Мартин М. Инсайдерское руководство по STM32", по остальным анон подскажет.
Где найти подобные гайды dmilvdv.narod.ru/AT91SAM9260/intro.html по адаптации линукса под конкрентый контроллер, про BSP, DeviceTree, BoardFile и прочие необходимые вещи?
Правую железку не заводил еще - как минимум DataFlash через sam-ba можно прошить-зачитать - уже что-то, как и работа phy. Сношаю гугол как bootstrap и u-boot готовить и не особо то успешно.
На левой - только из STM32-Cube FreeRTOS + LwIP запущен - только на пинги отвечает.
Да незачто, пожалуйста.
Я скоро этим займусь. Весь низ изучен, суть тоже, загрузчик изучен, флешлоадер написан.
Надоело мигать светодиодом оброабатывать видоопоток и сигналы с ультразвуковых датчиков дальность и угол излучателя, фурье, подобность функций и прочий шлак
мультивибратор
Изучи рынок электронных приборов, сделай свой дешевле конкурентов и продавай
Мало того что там свежая версия компилятора вклеивает 24 байта своего мусора с указанием кем и когда было скомпилено, так еще и в 6 векторе пишет 0 длину/заглушку-вектор и загрузчик только 32 байта бутстрапа читает и в sam-ba вываливается. Приходится вручную править собранный бинарник чтобы указать независимо от реального размера читать 4К кода.
Завис сегодня на запуске u-boot + dm9161 в
MII. Физика верная, линк ловит на 100, MDIO-MDC работает, в ответ тишина, на аппаратном лупбэке видно что что-то шлет, когда компом цепляюсь - ничего не могу поймать.
U-Boot> setenv ethaddr 02:03:04:85:06:07
U-Boot> setenv ipaddr 172.16.0.89
U-Boot> ping 172.16.0.89
macb0: Starting autonegotiation...
macb0: Autonegotiation timed out (status=0x7849)
macb0: link down (status: 0x7849)
ping failed; host 172.16.0.89 is not alive
U-Boot> <INTERRUPT>
U-Boot> ping 172.16.0.89
macb0: Starting autonegotiation...
macb0: Autonegotiation complete
macb0: link up, 100Mbps full-duplex (lpa: 0xc5e1)
Using macb0 device
Abort
ping failed; host 172.16.0.89 is not alive
>>219784
Проверь размер кучи (heap), анон, в файле конфига линкера.
>>220670
Кортекс - ядро арма, которое покупают у внезапно ARM ltd. Вокруг типовой обвес, разводка и производство, все м настолько тупо, что может любой студент /ра/дист сделать.
У нас в России аж две мегаизвестных компании также делают процы на м3 и м4ф. В перспективах ашки, но пока дораха.
Мимо.
arm-linux-gnueabi-gcc -nostartfiles -nostdlib -Wl,-Map=dataflash_at91sam9260ek.map,--cref -T ../../../elf32-littlearm.lds -Ttext 0x200000 -n -o dataflash_at91sam9260ek.elf crt0_gnu.o at91sam9260ek.o main.o gpio.o pmc.o debug.o sdramc.o dataflash.o _udivsi3.o _umodsi3.o div0.o udiv.o string.o
arm-linux-gnueabi-objcopy --strip-debug --strip-unneeded dataflash_at91sam9260ek.elf -O binary dataflash_at91sam9260ek.bin
2.1M Mar 22 04:38 dataflash_at91sam9260ek.bin
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .note.gnu.build-i NOTE 00000000 0000d4 000024 00 A 0 0 4
[ 2] .text PROGBITS 00200000 000100 000e00 00 AX 0 0 16
[ 3] .text.startup PROGBITS 00200e00 000f00 000038 00 AX 0 0 4
[ 4] .bss NOBITS 00200e38 000f38 000000 00 WA 0 0 1
[ 5] .ARM.attributes ARM_ATTRIBUTES 00000000 000f38 00002e 00 0 0 1
.note.gnu.build-i - эта гадость мешала, а так - оно верно все собирало, за исключением одного
00000000 04 00 00 00 14 00 00 00 03 00 00 00 47 4e 55 00 |............GNU.|
00000010 29 58 18 26 e9 db 53 09 5c 97 05 09 c8 dd 49 6a |)X.&..S.\.....Ij|
00000020 e7 2f f9 51 00 00 00 00 00 00 00 00 00 00 00 00 |./.Q............|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00200000 0d 00 00 ea 05 00 00 ea 05 00 00 ea 05 00 00 ea |................|
00200010 05 00 00 ea 05 00 00 ea 05 00 00 ea 05 00 00 ea |................|
00200020 fe ff ff ea fe ff ff ea fe ff ff ea fe ff ff ea |................|
00200030 fe ff ff ea fe ff ff ea fe ff ff ea d4 d0 9f e5 |................|
по адресу 0х14(00200014) - полная хуита вместо FF 0F 00 00 - поэтому загрузчик ничего не читал.
Сейчас проблемка с I2C - банальные LM75 и 24C04 невидятся.
Может есть профи которые подскажут как завести такую память ?
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x44
nand: Micron MT29F32G08CBADA3W
nand: 4096MiB, MLC, page size: 8192, OOB size: 744
nand: No oob scheme defined for oobsize 744
------------[ cut here ]------------
kernel BUG at drivers/mtd/nand/nand_base.c:3925!
Сам камень(at91sam9260) по даташиту держит память до 16гБит, а тут в 2 раза больше + страницы по 8 КБ.
Мелкую память оно нормально хавает, но мелких флешек откуда ее сдернуть в промышленных масштабах нету.
Jan 1 00:01:01 deb kernel: nand: device found, Manufacturer ID: 0xec, Chip ID: 0xdc
Jan 1 00:01:01 deb kernel: nand: Samsung NAND 512MiB 3,3V 8-bit
Jan 1 00:01:01 deb kernel: nand: 512MiB, SLC, page size: 2048, OOB size: 64
Jan 1 00:01:01 deb kernel: Bad block table found at page 262080, version 0x01
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .note.gnu.build-i NOTE 00000000 0000d4 000024 00 A 0 0 4
[ 2] .text PROGBITS 00200000 000100 000e00 00 AX 0 0 16
[ 3] .text.startup PROGBITS 00200e00 000f00 000038 00 AX 0 0 4
[ 4] .bss NOBITS 00200e38 000f38 000000 00 WA 0 0 1
[ 5] .ARM.attributes ARM_ATTRIBUTES 00000000 000f38 00002e 00 0 0 1
.note.gnu.build-i - эта гадость мешала, а так - оно верно все собирало, за исключением одного
00000000 04 00 00 00 14 00 00 00 03 00 00 00 47 4e 55 00 |............GNU.|
00000010 29 58 18 26 e9 db 53 09 5c 97 05 09 c8 dd 49 6a |)X.&..S.\.....Ij|
00000020 e7 2f f9 51 00 00 00 00 00 00 00 00 00 00 00 00 |./.Q............|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00200000 0d 00 00 ea 05 00 00 ea 05 00 00 ea 05 00 00 ea |................|
00200010 05 00 00 ea 05 00 00 ea 05 00 00 ea 05 00 00 ea |................|
00200020 fe ff ff ea fe ff ff ea fe ff ff ea fe ff ff ea |................|
00200030 fe ff ff ea fe ff ff ea fe ff ff ea d4 d0 9f e5 |................|
по адресу 0х14(00200014) - полная хуита вместо FF 0F 00 00 - поэтому загрузчик ничего не читал.
Сейчас проблемка с I2C - банальные LM75 и 24C04 невидятся.
Может есть профи которые подскажут как завести такую память ?
nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x44
nand: Micron MT29F32G08CBADA3W
nand: 4096MiB, MLC, page size: 8192, OOB size: 744
nand: No oob scheme defined for oobsize 744
------------[ cut here ]------------
kernel BUG at drivers/mtd/nand/nand_base.c:3925!
Сам камень(at91sam9260) по даташиту держит память до 16гБит, а тут в 2 раза больше + страницы по 8 КБ.
Мелкую память оно нормально хавает, но мелких флешек откуда ее сдернуть в промышленных масштабах нету.
Jan 1 00:01:01 deb kernel: nand: device found, Manufacturer ID: 0xec, Chip ID: 0xdc
Jan 1 00:01:01 deb kernel: nand: Samsung NAND 512MiB 3,3V 8-bit
Jan 1 00:01:01 deb kernel: nand: 512MiB, SLC, page size: 2048, OOB size: 64
Jan 1 00:01:01 deb kernel: Bad block table found at page 262080, version 0x01
Анон, я почти с тем же мк ебался совсем недавно. Вкрадцыи, не читая тебя:
размер образа бинарника, зашитого во внешнюю флеш, равен оперативке минус несколько килобайт железного загрузчика. Короче, для at91sam9x25 при 32К sram прошивка должна быть 24 КБ. Об этом есть одна строка в даташите, в секции с загрузчиком.
Тут вроде в посте у тебя типа не определилась флеш. Решение до жопы простое: пересобери ебиную либу, вписав типовую строку со своей памятью и ее вендором; поройся в либах
more elf32-littlearm.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(reset)
SECTIONS
{
. = ALIGN(4);
.text : {
_stext = .;
(.text)
(.rodata) / read-only data (constants) /
(.rodata)
. = ALIGN(4);
_etext = . ;
}
/ collect all initialized .data sections /
.data : AT ( ADDR (.text) + SIZEOF (.text) ) {
_sdata = .;
(.vectors)
(.data)
_edata = .;
}
/ collect all uninitialized .bss sections /
.bss (NOLOAD) : {
. = ALIGN(4);
_sbss = .;
(.bss)
_ebss = .;
}
}
end = .; / define a global symbol marking the end of application /
>>221038
Почти угадал, но проблема в другом - сам бутстрап должен быть менее 4К размером. У меня же выходил размер овер 2 мегабайта из-за информационной секции.
Обрезка секции strip-ом - уменьшает размер и сборка по прежнему нерабочая. Снимал обмен логическим анализатором - только тогда заметил что длина загрузчика не указывается. Подправил руками бинарник и заработало. U-boot завел, ядро грузит по tftp, корневую фс по nfs тоже грузит, работать более-менее можно.
>пересобери ебиную либу, вписав типовую строку со своей памятью и ее вендором
Зачем ? память то опознается. Если гуглить по "oobsize 744" - не каждый камень его держит, насильный перевод в коде на oobsize 128 - все засрано что или блок мертвый или ецц не сходится, заканчивается память под бэдблоки, далее обычная разгрузка и в /dev/mtd пустота, хотя в ядре есть описание пары разделов.
more elf32-littlearm.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(reset)
SECTIONS
{
. = ALIGN(4);
.text : {
_stext = .;
(.text)
(.rodata) / read-only data (constants) /
(.rodata)
. = ALIGN(4);
_etext = . ;
}
/ collect all initialized .data sections /
.data : AT ( ADDR (.text) + SIZEOF (.text) ) {
_sdata = .;
(.vectors)
(.data)
_edata = .;
}
/ collect all uninitialized .bss sections /
.bss (NOLOAD) : {
. = ALIGN(4);
_sbss = .;
(.bss)
_ebss = .;
}
}
end = .; / define a global symbol marking the end of application /
>>221038
Почти угадал, но проблема в другом - сам бутстрап должен быть менее 4К размером. У меня же выходил размер овер 2 мегабайта из-за информационной секции.
Обрезка секции strip-ом - уменьшает размер и сборка по прежнему нерабочая. Снимал обмен логическим анализатором - только тогда заметил что длина загрузчика не указывается. Подправил руками бинарник и заработало. U-boot завел, ядро грузит по tftp, корневую фс по nfs тоже грузит, работать более-менее можно.
>пересобери ебиную либу, вписав типовую строку со своей памятью и ее вендором
Зачем ? память то опознается. Если гуглить по "oobsize 744" - не каждый камень его держит, насильный перевод в коде на oobsize 128 - все засрано что или блок мертвый или ецц не сходится, заканчивается память под бэдблоки, далее обычная разгрузка и в /dev/mtd пустота, хотя в ядре есть описание пары разделов.
Я пишу все структурами. И указателями на функции. Так как сказали тебе первые.
Без фанатизма, не использовать дохуя структур и не таскать где не попадя, иногда легче вызвать функцию. Оверинжиниринг ни к чему.
Но в прерывание программа должна быстренько зайти, переключить флаг (как сказали вторые) и выйти, чтобы, если у тебя не накопилось много прерываний, они по быстрому переключаются и выходят и освобождают стек.
второй вариант. Основной медленный поток программы крутится в майне, в прерываниях ставишь флаги. Так проще тестировать, не нужно ебаться с многопоточностью и защитой данных, медленные потоки внутри прерываний не будут наслаиваться друг на друга.
А если есть нужда в длинных задачах то лучше сделать как сказали 2-е.
Но Main должен быть пустой никаких программ не должно быть(ну, или по-минимуму), только переменные указатели на функции или, если тебе нравится, просто вызовы функций.
Структуры с указателями на функции:
в начале заводим наши переменные(или структуры с описанием всего и инициализируем): гироскоп1, лампочка1, panasonic и пр.
main()
{
инициализация.таймер(&таймер1,5600);
инициализация.таймер(&таймер2,3600);
инициализация.таймер(&таймер3,4800);
инициализация.датчик(&датчик1,55,55,77);
инициализация.датчик(&датчик2,85,15,47);
while(1)
{
задача.координаты(&гироскоп1);
задача.свет(&лампочка1);
задача.камера(&panasonic);
}
}
Никакой охуеть большой кучи в майне не должно быть, иначе это полет фантазии. Через месяц запутаешься.
Лучше программу разбить на логические структуры:
Все что касается, например, датчика 1 - в один файл, датчик 2 - другой файл, файл инициализации 3-й файл.(В main только всё в кучу собираешь.) И там, в файлах, лучше никаких привязок к переменным все переменные должны храниться в Main. Функции должны быть гибкими, и при вызове этих функций они меняют только данные в той переменной, или структуре, в которой указали.
Таким образом main является хранилищем всех переменных и связующим звеном.
Как сказал >>221193 делаешь все задачи др. за др. я делаю тоже так же. И как только выставился флаг меняется просто поведение задачи.
>>221177 -кун
А если есть нужда в длинных задачах то лучше сделать как сказали 2-е.
Но Main должен быть пустой никаких программ не должно быть(ну, или по-минимуму), только переменные указатели на функции или, если тебе нравится, просто вызовы функций.
Структуры с указателями на функции:
в начале заводим наши переменные(или структуры с описанием всего и инициализируем): гироскоп1, лампочка1, panasonic и пр.
main()
{
инициализация.таймер(&таймер1,5600);
инициализация.таймер(&таймер2,3600);
инициализация.таймер(&таймер3,4800);
инициализация.датчик(&датчик1,55,55,77);
инициализация.датчик(&датчик2,85,15,47);
while(1)
{
задача.координаты(&гироскоп1);
задача.свет(&лампочка1);
задача.камера(&panasonic);
}
}
Никакой охуеть большой кучи в майне не должно быть, иначе это полет фантазии. Через месяц запутаешься.
Лучше программу разбить на логические структуры:
Все что касается, например, датчика 1 - в один файл, датчик 2 - другой файл, файл инициализации 3-й файл.(В main только всё в кучу собираешь.) И там, в файлах, лучше никаких привязок к переменным все переменные должны храниться в Main. Функции должны быть гибкими, и при вызове этих функций они меняют только данные в той переменной, или структуре, в которой указали.
Таким образом main является хранилищем всех переменных и связующим звеном.
Как сказал >>221193 делаешь все задачи др. за др. я делаю тоже так же. И как только выставился флаг меняется просто поведение задачи.
>>221177 -кун
Да я в курсе. Хорошо, не всех переменных поголовно. Статусные переменные, например датчиков хранятся в их файлах. Main только принимает данные по вызову функций.
Нет. Это в смысле эти переменные хранить в SRAM?
А если задача повиснет? В тот-то и многозадачность лучше, одна зависшая задача не испортит программу.
а это справочник или учебник? Хотелось бы именно учебник, чтобы объясняло принципы
Не, ну все равно почитать стоит, не ради программирования на АСМ, а хотя бы чтоб понять как этот АСМ там работает.
Кстати,>>221284 , ты можешь почитать вот это, про AVR, переведенный Datasheet.
http://kazus.ru/forums/showthread.php?t=284
(ссылка для скачивания ниже).
Переводчику заебись в гуглтранслейте перевёл одну буку, остальные одно и тоже, а в портфолио напишет дохуища технической литературы перевёл. Пидоры они.
Учебники нужны для того чтобы на доцента или профессора ВАК подавать, надергуют хуйни из пиндоских учебников и даташитов и профессорами становятся, а людям они нахуй не всрались, только вымер бумаги.
>>221865
Датащиты датащитами, а все мы начинали с учебников. Нормальный учебник - это расшифровка датащита устройства и не всегда конкретного, иногда рассказывают абстрактно, чтоб читатель понял что к чему. Это сейчас я беру любую микросхему, и на основе полученных знаний из учебников я понимаю как и что там работает. Но в начале, например, я, не сразу понял организацию микропроцессора, там рассказывается как он устроен как таковой: здесь память, здесь регистры, здесь контроллер прерываний. Это слишком много незнакомой справочной информации, тем более сразу.
А почему именно так устроено и никак по другому, никто там не говорит.
Все равно что электронику учить с книг Тицце и Шенка или вообще со справочника, как бы всё с низов рассказывают и подробно, но, блин, все равно, непонятно.
Из книг любимые - Р. Токхейм Основы цифровой электроники и Микропроцессоры. Остальное говно непонятное - пидоры высрали.
зачем нужно обучение вождению автомобилем, если у тебя есть техпаспорт и схема автомобиля?
толсто или не знаешь какое оно это обучение.
Как это обычно - после получения прав за неделю сам научишься
Все эти сранные учебники лютое говно, как и инструкторы вождения и теория в автошколе
Не слушай его, он бугуртит от того что его учили по дерьмовым учебникам, и теперь думает что они все такие.
Зависит от шины и как memcpy работает. Если уебищно по слову копирует, а ты делаешь memcpy((char )buf1, (char )buf2, sizeof(N)), то он и будет побайтово херачить: сместил байт, записал 4, 3 отбросил, снова подвинулся.
DMA очень полезен.
мимо-nios-быдлячер
>32Б
дольше будешь настраивать ДМА чем копировать
>DMA очень полезен
безполезная трата транзисторов
Слыш слыш, а ведь что-то из memcpy можно переопределить на копирование через дма память-память! У х86 такого режима дмы нет
есть кто с Дальнего Востока?
Сап парни, разбираюсь с HAL возникла проблема при попытке завести SPI. С помощью этого кода я пытаюсь оживить SPI1
__SPI1_CLK_ENABLE();
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLED;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
hspi1.Init.CRCPolynomial = 7;
HAL_SPI_Init(&hspi1);
вроде бы все норм, но не знаю как включить его с помощью бита SPE. В SPL это делалось через SPI_Cmd. А как сделать в HAL'е? На данный момент просто тупое вбиваю его через SPI1->CR1 |= SPI_CR1_SPE;
Подразумеваю, но я не си-бог, чтобы знать, как оно собрано в ядре линукса, например, на аимах.
Но факт, анон, память-память на х86 нет, только периферия.
>память-память на х86 нет
Ну а кагбе как ты его сделаешь и в чём будет принципиальная разница если это сделает ЦП? DMA с устройств хорош тем что не надо постоянно синхронизироваться с устройством, чтобы читануть оттуда наполнившийся буфер.
наверно потомучто рынок микроконтролеров намного меньше чем те куски рынков которые есть у лидеров, нет никакого смысла захватывать непрофильных аутсайдеров, ктомуже микроконтролеры это зашквар
Ты посмотри дома соотношение микроконтроллеров и процессоров. Телек, радио, машинка, микроволновка, некоторые холодильники, да даже пульты для телеков, практически каждый прибор, имеет в себе микроконтроллер. Даже в самом компьютере найдется место для него.
все эти микроконтролеры нихуя нестоят, сравни цену с процессором, накрутки на ёбо процессоры охуенны а себестоимость такаяже, объём рынка определяется не только количеством но и ценой, если лидеры не хотят заниматься этим зашкваром значит они это уже всё посчитали, или у вас диваных экспертов с пультами от телевизоров другие цыфры?
Что ты мне хочешь доказать? Есть DSP embedded-процессоры и микроконтроллеры, специально выпускаемые для работы со звуковыми, медицинскими, автопром и пр. устройствами где нужно быстрое реагирование. Интел и AMD туда не лезет. Это специальная ниша, это совсем другие процы.
Майкрософт, к примеру тоже хотел охватить необъятное, например, делал программные фаерволлы (ISA SERVER), Нокиа делала что-то вроде чекпоинта. Но обосрались, потому что у каждого своя ниша. И нахуя? Если это заботы Juniper, Cisco, CP? Чего с ними тягаться?
инбифо:
>intel edison
>Intel Quark
процессоры для встраиваемых систем.
>>223924
Это еще не потолок.
> Эдисон
> кварк
Чото в наших по работе вместо этих неизвестных используются ноутбучные и7 хасвелл/иви бридж
О чем вообще разговор? О том что у вас используется или почему интел не захватил рынок микроконтроллеров и процессоров для встраиваемых систем?
>STM32F4xx
такое в пульты не ставят это говно без задач которое покупают только уебаны чтобы помигать светодиодом, много на этом не заработаешь
уёбывай в бизнач там тебе по хардкору объяснят что на на говне без задач плохо зарабатывать
Дурак чтоле?
В российском интернете увы два года уже мигают светодиодом, надо подождать еще года четыре
Ну на российском интернете свет клином не сошелся. Тем более везде так, любители кроме этого ничем не занимаются, я думаю везде так. А более продвинутых ты не видишь, т.к. они работают а не в интернете пишут.
Помигать диодом, подключить датчик света, подключить сервопривод, это всё для начинающих и просто их много.
Родина дала (пока) ему интернет, но нет, хочу домыслы свои высирать на борду. https://ru.wikipedia.org/wiki/Intel_8051
Лел, я конечно тугой, но в споры пустился уже не я.
Вот ещё вам тугой вопрос: китайские ЦП для телефонов намного дешевле того же STM. Тот же арм по сути. Явно позволяет ещё и гигабайты памяти легко подключать, да в целом мощнее если даже игры тянет. Одна беда: нет доков и туторов, и видимо с портами ещё проблема будет.
Ну вот например MT6572, я могу купить за 500р на али. STM за такие деньги можно купить наверное только серии STM32F1.
Не пробовал никто ещё использовать вместо тяжёлой серии F4 китайский мобильный кремний?
да ты явно упорот, этоже cortex-a с модемом и еще кучей барахла, к нему обвес нужен нехилый, жрет он побольше и доки хуёвые, тут ситуация как с ардуиной, да ты можешь взять чип значительно дешевле и мощнее но хули ты с ним делать будешь без среды разработки?
Но в пересчёте цены на производительность и возможности явно получше же, да? Я не думаю что F4 серия жрёт меньше, а модемы, да и хуй с ними, выкинуть пару чипов из обвязки и пусть себе без них работает. И что там с ардуиной кстати? Если не касаться софтопроблем, насколько дешевле выходят сами чипы?
Эти чипы в большинстве своем в bga корпусах. И доков нихуя нет, хуй подключишь, хотя toolchain-ы/sdk для компиляции часто имеются.
http://mediatek-club.ru/load/for_repair_phones_mediatek_datasheets/datasheet_mediatek_mt6572/4-1-0-69
Ну вот есть pdf с разводкой. Для внутренностей можно поискать на гитхабе патченые ведроиды, китайцы часто выкладывают.
> Полный даташит
> 17 страниц картинок
Сынок, ты качни даташит на сраную АВР-ку 328 и охуей от объема.
>Для внутренностей можно поискать на гитхабе патченые ведроиды, китайцы часто выкладывают
Например?
Зануда, плиз.
>Ну вот например MT6572, я могу купить за 500р на али
Если разработаешь схему, разведешь pcb, то будет еще один одноплатник типа raspberry или banana orange.
А какие сейчас цены на распберри и прочее? Есть смысл? Я слышал краем уха что дороговато выходит, около 3-4к рублей. Но их там наплодили уже хуеву гору, вероятно и убер дешёвые варианты есть. Я не занимаюсь этим, не ориентируюсь совсем, что там как сейчас?
Самый дешевый, что я видел это 14$ orange pi one http://ru.aliexpress.com/item/Orange-Pi-One-ubuntu-linux-and-android-mini-PC-Beyond-and-Compatible-with-Raspberry-Pi-2/32603308880.html
А чем можно флопсы замерить? У меня вот есть ведроид, и есть дискавери с STM. Есть какие-нибудь бенчмарки на сишечке? Чтобы скомпилять со всеми возможными оптимизациями, запустить и замерить время.
По производительности с кремнием такое дело, что удельная производительность (флопсы/цена) сильно падает с понижением класса устройства. То есть чтобы рендерить что-нибудь или видео обжимать лучше раскошелиться на сервер на зионах. Класс ниже это обычный пека. Ещё ниже это платы на атомах. Дальше спектр малинкоподобных плат. Дальше уже микроконтроллеры. То есть собирать кластер микроконтроллеров абсолютно бессмысленно и подбирать их нужно впритык к потребностям, чтобы в один контроллер влезло всё сразу.
>Но в пересчёте цены на производительность
Да я лучше заплачу на 300 р. больше, чем буду ебаться с говном без доков. Есть же TI или Analog Devices. Разница в цене это и есть оплата за техподдержку и документацию.
>То есть чтобы рендерить что-нибудь или видео обжимать лучше раскошелиться на сервер на зионах.
Есть такое понятие как оптимизация. Это означает как бы ты не гнался за гигагерцами процессор может просто не осилить твою задачу.
Пример: процессор выполняющий операции умножения в один такт, но с меньшей частотой может выполнять операции умножения быстрее чем всякие гигагерцовые без аппаратного умножения, так как тот будет многократно складывать и терять такты.
Ну всё не так просто. Мы слишком слабо информированы насчёт устройства конкретных процессоров чтобы утверждать наверняка. Мне кажется что умножение всё-таки в современных процессорах таки быстрое. Насколько помню, там что-то вроде школьного "в столбик". Строки можно параллельно посчитать, а следующими тактами просуммировать. Сомневаюсь что например в видеокартах это как-то иначе работает. В процах внутри умножители частоты могут стоять в любом месте.
Ну так-то да. Но всё-таки цена тоже многое решает. Например ту же малинку никто бы не покупал если бы она не перевешивала по цене. Никому не интересно навороченные малинки, приближающиеся по возможностям к пека, но вот когда выходят совсем дешёвые платы, сразу ажиотаж.
>Мы слишком слабо информированы насчёт устройства конкретных процессоров чтобы утверждать наверняка.
Вы - да, мы - нет.
>Насколько помню, там что-то вроде школьного "в столбик".
Похоже, но не совсем. Посмотри как работает современное АЛУ. Есть АЛУ для работы с плавающей точкой.
Я-то думал мы о целочисленном умножении. Ну да ладно. Для меня в принципе не новость что далеко не все операции однотактные. Ну кроме всяких экстремальных RISC процессоров. Но вот например в случае зиона частота (хотя в последнее время уже латентность, а не частота) оперативки намного ниже частоты проца. И тут какбе хуй знает где у него реально будет ботлнек. Те же видеокарты, в них ядер много, но они простые как пять копеек, да, вероятно они умножают за такт и работают на частоте пониже, но они обрезаны оче сильно, ветвления всё. И насчёт вы да мы нет я готов поспорить, ибо внутри это умножение может произойти за множество внутренних тактов, при том что внешне был всего один.
Да о целочисленном сложении, а плавающая точка просто как пример что и такое бывает АЛУ.
>внутри это умножение может произойти за множество внутренних тактов, при том что внешне был всего один.
Да так и есть.
Я просто говорю о том что есть инструкции, без которых, какая была бы частота, проц может обрабатывать всё равно не быстро. Вот пример оптимизации Nvidia Quadro - вроде быстрая для работы, а для игор не подходит.
Открой да посмотри чего в нем. Ассемблерная хуета - таблица векторов прерываний, размеры стека, и еще чота.
Кейл там начальную инициализацию проводит вроде и (про крайней мере, если использовать rtx) вызов своей какой-то функции __main(), а после уже вызывает мою. Откуда конпелятор будет знать, что программа должна начать выполнение с этого кода?
>мне говорят, мол, хуйня это всё - Кейл свой код добавляет в проект, так что нинужно
Кто тебе такую хуйню сказал?
Коллега, который давал задание. Алсо, сейчас глянул - там вроде ничего лишнего нет, инициализация написана на C и просто вызывается перед __main(). Но вопрос мой остается - откуда я должен взять инфу о том, как выглядит стартап-файл? Вот если у меня кроме IAR нет нихуя под рукой, там же в ней самой вроде ничего нет.
>как выглядит стартап-файл?
Нахуя их вообще писать? Тебе программисты всё написали, а в stm32fxxx.h там почти одни дефайны, нихуя там в код не лезет, а какой-то коллега-юзер который просто берет то, что дают, говорит что инженеры сделали неправильно.
Байтоёб дохуя?
Ну погоди, а если у меня нет готовых библиотек? В том же IAR нихуяшеньки нет ведь. Я, видимо, чего-то не понимаю с этим стартапом. В iar размер стека и кучи настраивается в конфигурации проекта, тогда, получается, стартап-файл можно вообще выкинуть?
Ниудобная хуита, фу.
Если нет готовых библиотек то их должен тебе дать производитель контроллера. Или можно посмотреть Datasheet и там написаны все адреса, дальше делаешь дефайны и вот ты написал. Без CMSIS ты должен будешь работать с голыми регистрами, дефайны - это просто приведение соответствий для программиста. Ни в какой код эти дефайны не компилируются. В IAR не работал, но
> размер стека и кучи настраивается в конфигурации проекта
Всё что настраивается где-то оно в воздухе не висит, оно тоже куда то всё пишется, разве нет?
Если хочется поебаться. Вот асм код майна:
AREA |header code|,CODE,READONLY
ENTRY
EXPORT __main
__main
RCC equ 0x18
main
MOV32 R0, RCC
MOV R1, #1
STR R1, [R0]
END
В любом случаем, нужен SystemInit, core_cm3, stm32f10x.h
Или подключай их или на асме пиши инициализацию.
>В любом случаем, нужен SystemInit, core_cm3, stm32f10x.h
>Или подключай их или на асме пиши инициализацию.
Посмотрел, без этого всего работает тоже, если стартап подправить, так далеко конечно я не углублялся, не знаю, на сколько это чревато.
А вообще нахуя это тебе всё?
Это должен знать линковщик. Читни доки гцц, особенно асм и линкер. Там вкрадции написана вся суть в общем.
Линковщик знает, что нужно начинать с асмофайла стартапа, так как ты руками указываешь его
Не хуже и не лучше, он просто другой.
Под гцц?
Аноны, помогите настроить куте под компилятороотладчики ворованного иара, ибо он мне нра, но вот среда лютое говно говна.
Благодарствую.
>>225116
Что такое макросы и как с ними работать я знаю. Вопрос был про стартап.
>Всё что настраивается где-то оно в воздухе не висит, оно тоже куда то всё пишется, разве нет?
Да, у IAR это конфигурационный файл в папке с проектом, в котором написано сверху капсом "НЕ ВЛЕЗАЙ, УБЬЕТ!" В кейле это в стартапе настраивалось. Для сравнения в Atmel Studio по-моему вообще в дикие ебеня надо лезть, чтобы задать руками размер стека/кучи. Но там тоже был какой-то стартап на асме написан.
Глянул у коллеги проект - там ничего такого нет, о чем написано тут >>225113. Получается, стартап - опциональный файл, и на него можно положить болт? Но его можно использовать, если программа лежит во внешней памяти, чтобы загрузить её в sram, например?
>>225445
В чем аноны пишут/отлаживают под мк тогда?
рандомпик
Такую заливку легче сделать ЛУТом. У ЛУТА вообще проблемы с большими сплошными полигонами
>У ЛУТА вообще проблемы с большими сплошными полигонами
А в чем проблемы? Я наоборот думал для ЛУТ большие полигоны как раз лудше.
>Ёмкость-индуктивность
Ну не знаю, этож земля. Могу предположить, что размер ячеек сетки может быть связан с частотой на ВЧ схемах.
Для СВЧ мы обычно отступали от полосков 2-3 ширины полоска, дальше была сплошняком земля с частыми отверстиями переходными в шахматном порядке на обратную сторону, которая тоже целиком была залита землёй. Но это во всяких аналоговых схемах. А вот решетку такую я нигде не видел ещё.
Да и вообще за ЛУТ у нас обоссывают, даже если для нч.
>за ЛУТ у нас обоссывают, даже если для нч
Ну это слишком уже. Не у каждого же дома есть конвейер оборудования вместо утюга.
>Для СВЧ мы обычно отступали от полосков 2-3 ширины полоска
То есть импеданс на глазок подбираете?
Фоторезист надо ждать пару месяцев, пока слоупочта довезёт. А рулон факсовки или кальки в ближайших канцтоварах лежит.
Мимо из сибирского райцентра
>банальную экономию меди там, где полигон по каким-то причинам всё-таки нужен.
Наркоман? По-твоему, медь на полигон наносится, а не стравливается со сплошного слоя?
Экономят как раз травильный раствор, и для этого иногда все промежутки между проводниками заполняют медью, насколько это возможно. Ну и ещё баланс меди на внутренних слоях МПП выполнять надо для лучшей межслойной адгезии, там тоже заполняют свободные от проводников участки полигонами, которые не подключены ни к чему. Причём обычно там применяют "сетку наоборот" для минимизации роста паразитной емкости, то есть массив разделённых медных квадратиков с протравленной между ними сеткой.
Я тоже не понимаю, чем ЛУТ плох для всякой хуйни в домашних условиях. Почему-то считают все, что даже макетка лучше, чем ЛУТ. А на макетке иногда какая-то хуйня лютая творится - прилепили GPS/ГЛОНАСС модуль туда и поставили рядом батарейку. Я так обрадовался, что с батарейкой не надо полчаса ждать после включения, пока он положение определит своё, а позже оказалось, что батарейка там была не припаяна никуда. Как он при этом работал - хер знает, лол.
>>226415
Нет, в лаборатории СВЧ.
>>226430
Не на глазок, но меня тоже удивляло, что всегда расстояние между полоском и земляным полигоном 2 ширины полоска, а если плата позволяет, то 3, а не какое-то определенное значение из того же AWR, например.
А вообще я к СВЧ мало отношения имею, по большей части пишу под мк, но когда-то было дело.
Во, кстати, проясните за фоторезисты. Что лучше что хуже, тонкие какие-нибудь, или где читать про них.
> из него можно зделать компьютер
> И ебашить в четвёртый фоллач на максималках.
Блядь, школьники уже даже про педивикию не знают?
> слышал
> сосед сказал когда я у него хуй сосал
> слухи ходят
https://geektimes.ru/post/93210/
бамп
А если не включать?
telnet
> Поясните вкрадцыи накатку линукса.
Поясняю: шел бы ты отсюда, петушок.
> Сколько пзу,
Минимум два мегабайта.
> озу,
32 мегабайта. Потом, возможно, получится ужаться до 16 или даже до 8 мегабайт, но до этого счастливого момента надо ещё дожить.
> какой дистрибутив?
http://www.uclinux.org/
Предположу, что сайт крутится на микроконтроллере?
Ну извЕни. Юниксы на системах без MMU в принципе живут (наиболее известные примеры: микрософтовский Xenix и RetroBSD — современный порт 2.11BSD на PIC24), но OCHE KHUEVO.
>проще чем ипаться с установкой люниха.
Если для тебя установка люлиха ето сложно, то юникс ты не напишешь.
да да надо с установки начинать, всегда завидовал тем людям которые сами венды и програмы на комп устанавливали
Автор самописной ембеддед ос TempleOS, полного спектра приложений и игор к ней. Шизофреник со справкой.
жаль не для stm32, а так был бы знатный шизик
> ньюфагу
> STM32F407G-DISC1
> STM32F429I-DISC1
Выбирай вот этот: http://www.hotmcu.com/stm32f103c8t6-minimum-system-board-p-246.html
Ну или готовься к пердолингу с паяльником: http://www.yuriystoys.com/2012/02/using-stm32f4-discovery-on-breadboard.html
пишу для кортексов, но что такое твой "опенцм3", вообще не понимаю.
Перефразируйте вопрос, пожалуйста.
>опенцм3
зачем сразу начинать грыздь говно, когда есть моча
chibios.org
вот под stm32, никакого посикса потомучто автор не шизик, с ним можно даже попиздеть на форуме, нормальный адекват, наса уже приглядывается
>никакого посикса
Как будто что-то плохое.
Рикамендую eCos, там есть посикс и оно спортировано на stm32.
да плохое, поддкржка посикса при прочих равных условиях потребут увеличение потребляемых ресурсов, если нужен посикс то лучше тогда взять ос где это действительно хорошо реализовано в томже линуксе
>на чем пишешь
На хелловорлдах ЛОЛ.
Если серьезно, то все эти CMSIS, HAL или SPL библиотеки - и есть примеры кода работы с железом. Использовать их "как есть" можно лишь в учебных целях.
>CMSIS, HAL или SPL библиотеки - и есть примеры кода работы с железом
>учебных целях
Еще один асмоголик
вся эта стм си поебень меняется год от года, а асм и понимание внутреннего железа дает ясность в голове. причем можно понимать тащемта пик16 или 18 и быстро вникать тащемта в стм8. читнуть дашит и все, ну на край програмер мануал
Прогорел с этого плисовода, задачи у МК и ПЛИС разные и практически не пересекаются а скорее дополняют друг друга.
Месяц назад мигал светодиодом, сегодня обновил проект через STM32CubeMX, функции VPC месяц назад назывались иначе и в параметрах передавались не структуры а указатели только.
Буду задрачивать асму
32 сложно для меня (ударился рогом об STM32) мне бы чего-нибудь наподобие PDP-11
Не имеет смысла. Любой настоящий разработчик под арм знает даташит периферии, но зачем писать на асме, когда придуман си и хал? В хале самый периферийный низ есть по сути запись числа в регистр модуля, и выигрыш по скорости работы, если этот код написать на асме, нулевой.
И си, при этом, ускоряет разборку, и за t времени на Си ты напишешь и отладишь более качественно, чем на асме
я не промышленный программист
Убежден, что пока ОСь находится уровнем не выше CP/M код обязан быть на асме
>Убежден, что пока ОСь находится уровнем не выше CP/M код обязан быть на асме
Религиозная догма
> Убежден, что пока ОСь находится уровнем не выше CP/M код обязан быть на асме
Кому, блядь, обязан?!
P.S. Это не говоря уже о том, что сама CP/M была написана совсем не на ассемблере: http://www.computerhistory.org/atchm/early-digital-research-cpm-source-code/
P.P.S. И не говоря о том, что такие говномониторы давным-давно никому не нужны.
Я понимаю священную войну между си и асмом при программировании тащемта дров виндовза.
это не фраза, дебил, это предложение.
Для контролера среднего уровня вполне достаточно ассемблера, для МС-ДОСа достаточно ассемблера, и на асме программы понятнее. Для модулей ядра ОС Виндовс и Линупса оптимально использование Си.
А) Есть ли какие-то проги эмуляторы програматоров, чтобы просто припаять проволки от USB к ножкам МК
Б) Как отреагируют в магазе, если я попрошу у них подшится и если положительно, то за какую плату.
какой самый сложный проект ты выполнял на МК?
Асма достаточно для любой задачи программирования, но, как говорят, жизнь слишком коротка.
ну смотря что понимать под задачами программирования. В настоящий момент это выпустить продукт в установленные сроки. В чем асм проигрывает.
Ну вот например мне дали найти ошибку в работе мышки, мозг которой был написан другим человеком на асме. Сидел два дня в поиске проблемы, полностью изучил асмо-код. Что тут можно сказать? Если бы код был на си не было компилятора под архитектуру, сам его написать я не смогу, на поиск проблемы было бы затрачено раза в 4 меньше времени, да и разработчик врядли бы допустил этот баг. Выигрыш от асмы взачастую в размере прошивки, а не в скорости работы, а нахрен нам делать 1кб асмокода вместо 2 кб сишного, когда памяти на 16?
> Для контролера среднего уровня вполне достаточно ассемблера, для МС-ДОСа достаточно ассемблера, и на асме программы понятнее
Ну как там, в первой половине девяностых? Всё ещё сидите на 8048/8051/Z80 или уже пики появились?
так-то я на ардуино разрабатывал, повышаю уровень перехожу на арм-процыки, за деньги никогда не програмил, чисто для души
вот в этом и проблема, то что ты ничего сложного и не разрабатывал. Где нужно что то отлаживать тестировать, когда несколько человек работает над проектом и тут ты понимаешь зачем тебе IDE и зачем нужен Си. Но с видом экспеперта делаешь заявления типа(думаю это ты написал):
>Для контролера среднего уровня вполне достаточно ассемблера, для МС-ДОСа достаточно ассемблера, и на асме программы понятнее. Для модулей ядра ОС Виндовс и Линупса оптимально использование Си.
Так же как и анон выше говорил что HAL ему не удобный, еще как удобный если ты понимаешь Си и в состоянии читать на английском. За 5 минут копания в библиотеке можно въехать чего они там поменяли. Ассемблер это лишнее байтоебство, на котором надо сделать пару упражнений и отложить в сторону. Тем более для АРМок где памяти куча обычно. К слову сказать компиляторы достаточно хорошо все сейчас компилят и код получается не таким уж и раздутым, сомневаюсь что если ты будешь писать на АСМе что то то большое у тебя получиться в лучшем случае на 10-20% меньше.
пpoeбaл диск с сорцами, все на двд сбрасывал винты сериалами забиты
Кстате какое ИДЕ можешь посоветовать, какое самое годное для работы с STM8
В обычной жизни доставляло NetBeans
>пpoeбaл диск с сорцами, все на двд сбрасывал винты сериалами забиты
понятно.
>Кстате какое ИДЕ можешь посоветовать, какое самое годное для работы с STM8
ну у нас юзают IAR, вполне себе норм
Юзаю ST Visual Develop с компилятором от Cosmic, ну как юзаю, пару примеров скомпилировал и залил. Лол.
у них там отдельная оболочка программатора, ты ее не юзал часом? или сразу из редактора заливаешь
Через неё и лил. Из редактора чот не захотело заливаться в мою stm8l-discovery
В Терре, 2 года назад.
Привыкнув к АСМу ты становишься узким специалистом, и хуй перекатишься на другое ядро, 8051->PIC ->AVR->etc.
Да хоть бы и между arm и thumb уже сложно будет переключаться.
Будете долго смотреть в систему команд, а на Си дело делать можно сразу.
Мне Пистон больше доставляет, жду время когда портируют на ардуино. На интел эдисоне питон стоит и больше смотреть на Си не могу. Да и Си на самом деле от ассемблера не далеко ушел.
http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm8-mcu-eval-tools.html?querycriteria=productId=SS1673
Выбирай какая подходит и ищи у наших или забугорных продаванов.
Посмотрел это понравилось, но максимум денег у меня 1Крублей
>199 баксов
>>236717
>22килорубля
Вы вообще охуели там чтоли? Пиздец пиздец!1
Я до сих пор помалкивал, но теперь не могу. Ну нахуя вам эти vendor-locked STM8, AVR или PIC ?
Ведь есть же Арм и Кортекс. С которыми, когда хочешь, перекатываешься между конкурентами: AT91 -> LPC -> KINETIS -> STM32 -> SAM3/4,
а инструменты JTag-адаптеры, компиляторы, IDE остаются.
Вы вот скажите, что в этом STM8 есть, чего нету в младшем Cortex M0 STM32 ?
Ты чего воспламенился? Eval-платы у стм-а дорогущие и нахуй не нужны обычному юзеру. Берешь Дискавери за тыщу и радуешься жизни.
Простота. Ресурсов хватает для применения в довольно серьезных поделках. Непонятна ценовая политика производителей, когда 32-битный MK ARM стоит дешевле 8-битного. Я вот понабрал себе всех мастей, но пока мозгов хватает "разобраться" с AVR, потом перешагну на STM8, а потом дойду (надеюсь) до stm32f429 и собранной на ней дискавери.
>Простота. Ресурсов хватает
Микроконтроллеры это проц плюс периферия. Работа с периферией везде одинаковая: пишешь настройки в регистры - ведешь обмен данными через другие регистры, и возможно получаешь переходы на функции прерываний.
Хочешь сказать, от процессорного ядра зависит сложность освоения или сложность разработки? Мне приходилось применять микроконтроллеры семейства i8051, и на мой взгляд ARM/CortexM нисколько не сложнее. Плюс вижу в том, что освоив однажды программирование процессорного ядра ARM, становится возможным выбирать между изделиями любого производителя.
>Я вот понабрал себе всех мастей
Но ведь для каждого семейства нужно будет покупать/паять программаторы, искать компиляторы и среды разработки, осваивать. Это требует времени и сил.
Смысл в этом могу разглядеть только один - расширение кругозора, туризм, развлечение. Типа "а сейчас сходим посмотрим как там в мире stm8".
Где-то тупишь, st link v2 для всех 32-битных идет. Подключись с программатора stm32f407discovery, проверь.
посмотрела, дело реал не в stlink. разъем раздроченый был просто. Но теперь проблемка похуже. платка заводится от юсб, лампочки мигают вся хуйня, режими переключаются, переношу на макетную плату, где питание 5В напрямую подается, нихера не пашет..http://forum.easyelectronics.ru/viewtopic.php?f=35&t=26853&p=450407 вот как тут все прям, откусила резистор к херам, не помогло
>Kinetis
Наконец-то переключаешь билд с Debug на Release
@
оптимизатор выкидывает cfm
@
проц в мусор
нет! мне что то кажется на stm32f103 прошивка косячная забита. прифигачила на nrst и Vdd rc-цепочку, теперь кое как пашет, но конечно надо чтобы импульс прямоугольный был
тян страдает) видишь же, на каком все уровне(
Ананасы, хочу прикупить себе Beaglebone black на что-то подороже денег не хватает, хотя очень хочу купить какую-то DSP-платку с кучей разной периферии, чтобы в полной мере обмазываться матаном и дрочить, однако увидел, что есть еще модификация Green Wireless, в которой нету нахуй не нужного hdmi, зато есть беспроводные интерфейсы. Единственным минусом есть то, что платы разводит какая-то непонятная фирма seeed studio.
Кто-нибудь покупал у них платы? Какого они качества? Стоит ли покупать этот Green Wireless вместо менее функционального, но гарантированно качественного Black от Texas Instruments?
Seeed studio нормальная контора, я у неё несколько раз заказывал платы, делают хорошо и дешево.
В Green Wireless еще нет флешки на борту.
Отписывай на каком-нибудь блогспоте или вордпрессе, а сюда заманушные фото скидывай. Ту все равно потонет в куче бесполезных сообщений.
Тогда ебашь в отдельном треде и моли мочу шоб не потерла. Или обзови тред - "Свистелки и перделки молодых и дерзких" и пусть там аноны хвастаются своими йоба-махарайками.
Дублируй и там и там. Регистрироваться пять минут, на wordpress.com себе стандартный блог заведи. Или вообще на ЖЖ лол. В соцсетях обычно тонет.
Если у тебя есть гуглоакк для ведроида, то в блогспот тебе только войти нужно. Включишь сокрытие мыла и никто тебя не сдеонанизирует.
а, еба, но ведь поддержка microsd все-равно есть, так что вообще похуй.
Берешь и пишешь модуль ядра Линукс, все исходные коды в открытом доступе. Хотя да нвидиа свои дрова в бинарниках распространяла
Хочу замутить часики прикольные.
Есть тёплый ламповый дисплей и контроллер PIC18F252. А вот чего нет - так это желания читать тонну мануалов.
Помоги мне разобраться со всем этим: контроллер - как проверить его, живой или нет. Где поискать туториалы для нубов? С какой стороны вообще начать программировать эту штуку?
Как вообще грамотно с двух источников одновременно сигнал оцифровывать?
coocox же, не?
Что такое "студия"? Первый раз пробую написать программу для контроллера, не в курсе местных мемов.
Туториалы здесь хорошие: https://electrosome.com/category/tutorials/pic-microcontroller/mikroc/
Одну студию только знаю MSVS, кстате
На ютабе один вадим в своих видио Keil и stm32cubemx студией называет, возможно так и есть
По PIC есть книжка Санчоса 2007 года лютая годнота
В ведро не так давно приняли проект fbtft теперь он в стейджинг
https://github.com/torvalds/linux/tree/master/drivers/staging/fbtft
Там дохуя дров под spi и параллельные мониторы. Сам юзал, все работает.
Хочу купить stm32 discovery и программировать его, сидя дома перед компьютером. У меня, кроме пеки, ничего нет- ни проводов, ни паяльника, ни резисторов. Сейчас нахожусь в дс, но скоро уеду обратно к себе в мухосрань, там это все сложнее достать. Что нужно купить, чтобы без проблем собирать различные девайсы? Каких-то практических целей не преследую, просто хочу научиться работать с микроконтроллером.
Удваиваю вопрос. Недавно заказал STM.
Даже писать ничего не надо, благодарствую.
Соединительные провода возьми подходящие, чтоб не паять периферию (dupont female female)
http://ru.aliexpress.com/item/40pcs-dupont-cable-jumper-wire-dupont-line-female-to-female-dupont-line-20cm-1P-40P/32481623557.html?spm=2114.03010208.3.11.9AEKlZ&ws_ab_test=searchweb201556_0,searchweb201602_5_10039_10048_10047_10017_405_404_407_10046_10045_406_10040,searchweb201603_8&btsid=af82167d-58fe-4e60-8a5f-25dbca6679c9
Только смотри не перепутай, если на периферии стандартная гребенка контактов (как на самой дискавери), то провода female-female нужны, иначе не сунешь палку в дырку.
А к чему второй конец джамперов подключать? Нужен специальный программатор с USB?
>программатор с USB
Зачем? Коннекторы - это если ты периферию какую-нибудь захочешь подключить к дискавери, если хочешь только с самой дискавери работать тебе ничего кроме мини-юсб не надо. Как бичпакет - открыл и готово.
Если будешь использовать дюпоны - тебе придется купить несколько планок PLS/PBS, по крайней мере чтоб не паять саму дискавери, к ним же тогда есть смысл взять несколько макетных досок. В случае с дюпонами лучше бери полный набор MM,FM,FF 120шт суммарно, так получишь универсальность.
Но это всё опционально, самое простое чего тебе будет достаточно - моток мгтф-а 0,2мм , кусачки маникюрные с фикспрайса, банка лти/глицерин, пос61 и эпсн ватт на 25 с набором напильников. можешь взять термоусадки подходящего размера. Кроме того, имеет смысл раздобыть USB-UART переходник.
мимокатился
> USB-UART переходник.
Зачем? Дискавери шьется через swd. Выводить инфу проще сразу на ее экран, без всяких путти и уартов.
О какой периферии идет речь? Порты ввода/вывода, АЦП, счетчики и так на плате есть. Вообще я бы хотел побольше возможностей опробовать. Провода, паяльник или еще что-то не проблема купить.
Купи всяких датчиков и серв с шаговиками. Начинать проще с пердуины, я со старта прихуел от замороченности stm32f429i-discovery
Там того экрана, только текущие показания отрисовать.
> хотел побольше возможностей опробовать.
Бери помощней версию, чтоб сразу с акселерометром, дисплеем и т.д.
Всего 79 дораров
Ну, любая хуйня для АЦП/ЦАП (фотодиод, светодиод, лазер, датчик температуры etc), сегментные дисплеи, дополнительные кнопочки или даже клавиатуры, подключение FTDI как сказал >>242176-анон, ибо прошивать это хорошо, но знать интерфейс еще лучше и наверняка ты захочешь связь контроллера со своим приложением на компьютере, через юарт это проще всего
Миллион всего можно подключить к контроллеру.
Пердуина - для детей, не порти анону представление о реальном программировании контроллеров
Алсо, я начинал именно с 429, до этого вообще не программировал контроллеры. Да, местами надо мозг включить, зато потом охуеешь от того, что смог.
Я как раз и хочу посидеть поковыряться, про ардуино почитал- там его чуть не 11-летним советуют вместо конструктора.
Можешь взять плату с кучей периферии, там будут кнопочки с диодами и всякой лабудой, но все равно захочется подключить то, чего не будет на плате (те же шаговики), просто придется меньше паяльником орудовать.
1) STM32F429 - 30 баксов и с дисплейчиком
2) Провода dupont разные
3) USB-UART переходник
3) Паяльник и сопутствующие товары
4) Двигателей и датчиков на свой вкус
Магазины в дс посоветуете? Я пока гуглил несколько раз на Чип и Дип натыкался, там норм?
Если для начала без паяльника брать, то тогда имеет смысл что-то кроме контроллера покупать?
> Чип и Дип натыкался, там норм?
нит
Поверь мне, один хрен все дороги ведут на Али, оттуда и начинай, сейчас быстро доставляют.
Но я же не ОП, я не могу быть хуем!
Ебать конструктор. Студентоте для изучения - да, но на себя я так тратиться не стал бы, лучше научиться самому махарайчить периферию.
Протеус удобнее, если камень поддерживается.
Однако если схема сложная - будь готов к глюкам из-за нереалтайм симуляции. Сам сталкивался
proteus научился в арм?
Там на ней дырки или штырьки? Для подключения периферии хватит джамперов, или нужна гребенка? Если гребенка, то какой там шаг?
Эта хрень в Терре 1400, так шо нормально. Ебать цены нонче на эти сраные макетки. Помню 429-дискавери за 1200 брал.
штырьки
>арм
>электронные часы
Как же я люблю /ra/дач.
Давай, анон, давно жду часики на ПЛИС, пилите поскорее.
Ну я серьёзно же. Хочется вкатиться в микроконтроллеры. Логично начать с эдакого хеллоуворлда, интересного ещё и практическим результатом никсиклок на 176й логике хоть и справляется с отсчетом времени, отображением секунд, энергонезависимостью и наличием будильника, но второй раз пилить антуражный девайс начала 80-х о 18-ти микросхемах уже не хочется. вопрос в том, что если плата с мелким армом стоит копейки, стоит начинать осваивать микроконтроллеры прямо с арма, иди шансов нет, и нужно сперва идти через атмеги/пики/ардуино?
Есть все шансы, начинание сразу с Cortex-M3 будет лучше, чем с АВР про PIC'и вообще забудь Качаешь Keil + CubeMX, читаешь статьи новее 2013 года. Про SPL забудь, CMSIS оче долго и нудно, пригодится но не сразу. Потом, когда ограничения 64кб тебе будет уже не хватать можно прекатиться на STM32SW или другое эклипс поделие, ну или найти кейген на кейл.
Я тут мимо проходил, как раз вопросы есть.
Задача - вкатиться в ARM. Для начала помигать светодиодом. Далее - написать прогу, принимающую по уарту и отсылающую модифицированную инфу по другому уарту.
Дано - я, немного могущий в C. Плата NUCLEO-F103RB. KEIL, который мне не понравился. CooCoX+GCC, который мне более-менее понравился.
Вопросы: CooCoX или пытаться осилить KEIL? Какие библиотеки использовать? CubeMX годен?
CubeMX годен, настройка тактирования и HAL проект для кейла из коробки. Кококс хоть и бесплатен, но мне не понравился. Кейл прильстил реальной простотой и неперегружнным интерфейсом. Ну и возможности отладки с литературой в соседней вкладке просто шикарны.
Самое сложное в кейл это понять, что его не надо осиливать. Сгенил в CubeMX проект, открыл в кейл и работаешь уже в нем, как в любой другой ИДЕ. Ну мб пару вопросов встанет с отладчиком, который ищутся на ютубе/интернете на каждом шагу.
Я предположу, что скрином ты показываешь отсутствие нужного тулчейна в кубе. Я прав? Мог бы прямым текстом написать.
Это старый куб, в новом вроде как-то можно. Но я не разбирался.
Ну я нашел пару инструкций как из куба в кокос запихать проект. Ща осилю конфигурацию и попробую.
Терпеть не могу графические менюшки, потом хуй пойми что откуда взялось и какие там умолчания. Научился одной хуйне - перекатился в другую - все совсем иначе.
Запихал кубопроект в кокос, конпилится. Пойду CMSIS изучать, хочется пердолинга регистров и познания основ.
Я два раза заказывал, первый раз долго шла и потерялась, вернули деньги. Заказал у другого китайца, шла тоже больше месяца, написал продавцу, говорит, потерялась, возвращает деньги. Нашел на olx, продавец тормоз, наложенный платеж не подходит, на карточку деньги принять боится, только личная встреча, послал нахуй. Тут же всплыла на аукро, заказал, завтра будет наконец. Длинный путь переката с пиков в стм, сцуко.
> 1 китаец
> 2 китаец
> olx
> аукро
У вас нет магазинов типа чипдипа? Нихуясе, как героин добываешь.
Нет, ну если ждать 2+ месяца не запаривает, наверное можно и поебаться с косоглазыми соседями...
Тебе от китайского продавца сообщение «Sorry, friend, но я такой хитрожопый, что отправил тебе посылку без трека, хотя обещал ChinaPost Registered» приходило? Ну или просто в описании метода доставки была какая-то поебень вроде ChinaPost Small Packets? Если да, то не удивляйся — безтрековая доставка из Китая это лотерея: может идти пару недель, а может полгода (или вообще пропадёт где-то по пути).
> продавец тормоз, наложенный платеж не подходит, на карточку деньги принять боится, только личная встреча
Проиграл с этого Джеймса Бонда.
>Тебе от китайского продавца сообщение «Sorry, friend, но я такой хитрожопый, что отправил тебе посылку без трека, хотя обещал ChinaPost Registered» приходило?
Нет, такого не приходило. Вообще сообщений не было.
Последние по дате сообщения не совсем понятны. Посылка что ли недавно таможню прошла?
Она где-то между таможней и сортировочным центром. Может, на складе отгрузки таможни. А может и на складе приема сортировки неотсканенная валяется. А может еще где.
Если та плата говно и моча посоветуйте с чего начать.
Меги - это АВР.
Для совсем ньюфага сойдёт. Научишься мигать светодиодами и читать даташит. Разберешься с регистрами и зачем они. Если пишешь на С, то разницы именно в проце ты не заметишь при перекате, а вот переферия будет совсем другая, так что не задрачивай её особо. Она не только между семействами разная, но и сами наборы для каждого чипа разные, именно по этому их такой зоопарк. Из знакомства с аврками ты должен осилить идею, а потом перекатишься как сможешь себе позволить.
Неа, я функциональщик и пишу на scheme. А ARM заказал, потому что раньше доставляло писать на асме, вскрывать крэкми и дергать функции ядра. Хочу подергать прерывания микропроцессоров теперь.
Помогите обезьяне ничего не спалить. По формуле при силе тока 5 В и рассчитанном на 20 мА диоде сопротивление должно быть 240 ом, так? А если выходное напряжение 3.5 В, то должно хватить 175 Ом. Таких резисторов мне хватит?
Там уже есть пара светодиодов, на плате, хватит, чтобы помигать.
Я сегодня, как пришла плата, поморгал сразу 167 светодиодами. Мне понадобится.
Перекат с пиков состоялся. Но покопавшись в даташитах, я, признаться, охуел мощно.
Сейчас в qtcreator завезли плугин bare metal который решает все проблемы
По опыту 20 ма и современный светодиод превращается в ебаный прожектор выжигающий глазки прямо до задней стенки черепа. Ставлю 3 килоома и все норм. Можно смотреть.
> светодиод превращается
Это какой превращается? Ты там не закупил по случаю у китайцы одноваттных светодиодов?
Просто нынешние светодиоды чудовищно эффективны по сравнению с АЛ307 всякими, для заметного глазу свечения типа индикации вкл/выкл им иногда достаточно микроампер.
NumLock ебучий лаком закрашиваю.
>По опыту 20 ма и современный светодиод превращается в ебаный прожектор выжигающий глазки прямо до задней стенки черепа
Охуенно же. Лишь бы не сгорал.
> Что мне нужно знать для начала, чтобы не быть ардуинщиком?
Электронику. Хотя бы в объёмах пикрелетедов.
Да. Ещё тебе понадобится сорт оф загрузчик, у-бут по дефолту. Его тоже нужно сконфигурировать и собрать.
Нот со изи. Как вкатился, так и выкатился. Много, много, много читать теперь.
Пойди, пожалуйста, нахуй. Вопросы из разряда "у меня есть ёба, что на ней сделать годного?" являются крайней формой идиотизма. Надо выбирать контроллер под задачу, а не наоборот. Но ответ на твой вопрос есть: используй его для того, для чего его уже использовали. Вангую, что в твоём случае это а-ля сигнальный процессор. Но я тебя сразу предупреждаю -- ты заебёшься учить всё то, что нужно для его использования, ибо тема весьма специфичная и ты должен заранее понимать, к чему ты идёшь и как ты этого будешь достигать.
А в науку тебе и тебе подобным могу сказать: бери задачу, ищи под неё исполняющий механизм, актуальный на сегодняшний день и доступный тебе "здесь и сейчас", а потом эту задачу решай. У меня, к примеру, лежит PicKit2 и несколько их контроллеров. Я на них кодил под ассемблером и под C. Дак вот, на данный момент я уже несколько лет как работаю с STM32 по долгу службы, и это PIC-говно я готов выкинуть нахуй, ибо дорого, уёбищьно и нахуй не нужно, если только придётся кодить под существующий проект, и то задумаюсь, надо ли это мне, может проще сделать плату-переходник STM32-PIC.
серьезный дяденька
Мне интересно конкретное устройство которое на этом контроллере. Например измерительный прибор.
Купил STM32F4, спиратил софт отсюда: https://rutracker.org/forum/viewtopic.php?t=2305709 думал по гайдам потихоньку разобраться что к чему по этим http://microtechnics.ru/stm32-uchebnyj-kurs-keil-sozdanie-proekta/.
А там и версия у keil-а другая и библиотеки качать надо и все равно в этих библиотеках нет тех файлов, что на скринах. Как кароче эту штуку запустить? Может на ютубе есть что-то годное? для даунов Алсо, я в английском слабо шарю.
Зайди на сайт st.com и скачай последний stm32 periph lib или как там, если в поставке кейла что-то и есть там старое.
Я пока не понял как её подключать. Видосики смотрю вот.
позвольте тупой вопрос:
начинаю прогать таймер systick и не могу понять как его на 1мс сконфигурить?
1. Какую срезу разработки выбрать?
2.Устанавливал CooCox, но не разобрался, как подключать библиотеки, необходимые для разработки под мою STM. На маленьком чипе маркировка STM32 F103C8T6, но в CooCox такого чипа нет, а есть чип похожей модели. Нужных библиотек в настройках проекта не оказалось. Что выбрать для программирования именно этой STM?
Ты об этом?
http://ru.aliexpress.com/item/Hot-Sale-ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming-With/32684040486.html?spm=2114.03010208.3.164.CDhxFE&ws_ab_test=searchweb201556_0,searchweb201602_5_10039_10057_10048_10047_10056_10055_10037_10049_10059_10033_10046_10058_10032_10045_10017_10060_10061_10062_10064,searchweb201603_2&btsid=251ac0e6-4da9-47b1-a32f-523b6da178db
По UART шей.
Поясните за эту IDE. Почему не появляется менюайтем выбора прошивки? Или он появится после подключения программатора?
Насколько знаю, там только активный проект прошить можно после компиляции. Для готовых прошивок можно STM32 ST-LINK Utility применить.
>Насколько знаю, там только активный проект прошить можно после компиляции. Для готовых прошивок можно STM32 ST-LINK Utility применить.
Подробнее можно? Вот я скомпилировал проект в релизе, но кнопка прошивки в Tools, также якобы доступная по F6, не появилась. Способов сделать проект активным, похожих на "сделать проект главным" в сишных IDE, не вижу, в контекстном меню нихуя нет.
>кнопка прошивки в Tools, также якобы доступная по F6
Где ты про F6 прочитал, у меня кнопки прошивки тоже нету. Проект заливаю через отладку.
Алсо, что означает Debug Server is closed/terminated, debug session will stop? Это из-за того, что плата не подсоединена, или надо запускать какой-то демон для дебага?
Говоришь железки послать данные, оно шлет и генерит прерывание
и наоборот - оно приняло данные и генерит прерывание
>>248994
На таких контроллерах прошивка заливается стандартным житагом и остается там после выключения. Тут как бе вопроса как такового и нет.
Uboot умеет в NOR/NAND флеш. В нем прописаны тайминги для флешки. Есть стандартные команды nand write/read/erase.
Образ кернела предварительно заливается через tftp в ddr, а потом записывается в nand: есть команда tftp в uboot.
В самом uboot есть параметр bootcmd где прописывается что-то вроде:
nand read 0x90000000 0x100000 0x300000 и bootm 90000000 - считать начиная с 100 блока нанд (нанд видится блоками по 128кб - 0x20000 * 100 = 0xC80000) 0x300000 байт и поместить в DDR по адресу 0x90000000. С
bootm 90000000 - начать загрузку kernel с адреса 90000000
В моем случае и uboot и линукс загружаются по tftp без мозгоебли с флеш. Сам контроллер умеет загружаться по ethernet.
Гугли arm u-boot user guide и arm uboot flashing tools.
При переключении пинов фронт занимает ~500мкСек. При запуске идентичной программы уже на Olimex E407 время установления фронтов занимает 50нС.
В чем может быть проблема?
У кота какое-то хитрое выражение морды. Он явно в этом замешан.
В этом деле я нуб. ПРограмматор нужен под разные типы микрух свой или они универсальные под одну архитектуру?
Универсальный программатор стоит как боинг. Определись, что ты хочешь программировать. Судя по запросу нихуя ты ещё не хочешь, даже не понимаешь специфики.
Контроллеры, как правило ARM архитектуры, они программируются через Jtag и SWD. Если говорить про "микрухи", которые микрухи памяти, то тут много вариантов, и программатор стоит дорого.
Ты - хуй.
>STM32
Тогда без разговоров бери STM32DISCOVERY демо плату, там тебе будет и SWD и контроллер на поиграться. Стоят они адекватных денег. Сразу F4 не бери -- заебёшься, начиная хотя бы с трёхсотой, чтобы уж совсем низко не падать. Пересесть с F3 на F0 всегда сможешь. Я по работе начинал с STM32F373, но для себя начал работать с STM32F030, ибо они стоит 50 Р за корпус, проблем при пересадке нет. Однако, F4 уже шагнула вперёд, там немного другие принципы программирования и работы с ними. Учиться лучше на F3 и ниже, а после этого тебе и F4 будут по плечу...
>>249357
Да. У самого такая валяется, но в качестве программатора не использовал пока ни разу. У них на сайте документ UM0919:
>2.2 Embedded ST-Link
>The ST-Link programming and debugging tool is integrated on the STM32 value line
>Discovery. The embedded ST-Link can be used in 2 different ways:
> to program/debug the MCU on board
> to program/debug an MCU in another application board using a cable connected to SWD connector CN2.
>For information about debugging and programming features refer to ST-Link UM0627.
Открывай UM0627 с их сайта и раскуривай. Если плату usb-разъемом от себя повернешь, то слева коннектор 4х1 как раз SWD.
>Как можно слезть с keil/iar/прочего под шиндоус?
Собственно с открытыми средами разработки проблем нет, просто их все надо настраивать на работу с той или иной конфигурацией. С компиляторами/линкерами тоже проблем нет, GCC умеет в арм. Открытая версия драйвером под Liunx для ST-LINK есть, но с ней, видимо, придётся потрахаться. Из того, что я читал о их реализации, ясно что внутренная структура ST-LINK весьма, эмм, специфична.
Atollic True Studio кстати бесплатная, но не помню, открытая ли.
А под шиндоус открытые драйвера есть? Я только помню, что давно когда-то на работе накатывал на комп паленый segger, чтобы использовать паленый китайский ноунейм программатор.
Получается, подойдет любая среда, к которой можно прикрутить gcc для арма? А процесс отладки непосредственно в мк как при этом выглядеть будет?
>Как можно слезть с keil/iar/прочего под шиндоус? В чем писать, чем и как компилить, как заливать? Это вообще возможно? Желательно опенсорс. Несколько лет писал всякое мелкое дерьмо под армы и атмелы, и всегда пользовался этими средами, теперь хочу менять работу, а на меня там как на ебанутого на собеседовании поглядели - ты что, и скрипты линкеру ни разу не писал? и далее по списку.
Eclipse.
Китайский J-Link, лучше HW ревизии 9.
>В чем может быть проблема?
Скорее всего в железе:
- Посмотри, что там у тебя на пине сидит;
- Попробуй выводить на пин другого порта;
- Прочисти контакты со спиртом;
- Смотри питание микросхемы во время переключения пинов.
>А под шиндоус открытые драйвера есть?
Не слышал, но если есть по Linux, то можно адаптировать и под винду. Вот только зачем, если ST и так предоставляет драйвера?
>>249397
>Получается, подойдет любая среда, к которой можно прикрутить gcc для арма?
GCC то можно к любой среде прикрутить, а вот как будет отладка работать -- для меня большой вопрос. На уровне breakpoint-ов и простых watch-ей, думаю, проблем нет, а таких плюшек как, например, регистры, память, live-watch и прочее из IAR, сомневаюсь.
Датчик: таймер инициирует считывание с I2C. Прерывание I2C складывает данные в буфер. Колбэк I2C вызывает передачу данных по SPI. Параллельно идёт лог в UART всех действий.
Приемник: SPI складывает полученные данные в буфер и вызывает передачу в UART.
Делать все планирую на F030F4 + NRF24L01, питание от 18650.
>Всё это есть в gdb.
А с ST-LINK нормально дружит? (Я, честно говоря, не до конца понимаю механизм работы.)
>прибор для замера ИК излучения с удаленной передачей
Нахуя такой зоопарк протоколов?
Поясни задачу нормально, что такое замер ИК я не понимаю. И "удалённую передачу" ты по какому протоколу гонять собрался?
замер ик-спектра будет с помощью датчика tsl2561(I2C), удаленная передача с помощью NRF24L01(SPI), уарт для диагностики. Протокол скорее свой, велосипедный или упрощенное подобие modbus.
Ну, то что ты описал про программу похоже на правду. Но дьявол, как всегда, кроется в деталях. Как я понимаю, у тебя будет основной цикл бегать в int main(), и из него будет вызываться всё остальное, а интервалы между замерами будут выверены таймером, т.к. остальное уже в цикле основной программы не имеет временной привязки.
У меня тот тексановский st-util бинарь, что гуглится, нормально работать не хочет, пришлось собирать из исходников
Еще рабочую, но с другим выводом версию можно выковырять из visualgdb
где брать то?
По сути я планирую программу на чистых прерываниях без какого-либо кода в главной петле программы.
В чем риск заключается?
Вот кстати превосходный магазин https://ru.aliexpress.com/store/908915
>на чистых прерываниях без какого-либо кода в главной петле программы
Это плохая идея. Прерывание должно обрабатываться быстро. Всю остальную обработку нужно передавать из прерывания в основной код, ты это делать собираешься, или как?
>В чем риск заключается?
Можно заказывать и у китайцев. Мне вот пофиг, на 100-200 р дешевле у дяди Ляо, или здесь и сейчас в Промэлектронике, например, купить. Но здесь и сейчас у локального (я именно про Промэлетронику говорю) мне нравится больше, т.к. если что я воспользуюсь гарантией. Впрочем, если не насиловать выводы, всё будет хорошо.
В прерываниях идёт лишь укладка данных идёт, порядок вызова определяется через колбэки
>порядок вызова определяется через колбэки
Ты чё там, обосрался??? Начальник!!! Начальник!!! Этот пидор обосрался!!! Я с ним тут сидеть не буду!!!
Я пристастился к QtCreator + Cmake
QtCreator - быстр и всё есть
Cmake - Не могу в голый Makefile, тоесть могу что-то поправить, но не с нуля зебенить. В симэйке есть свои заёбы, и много, но я однажды запердолился, чтобы и в прыщах и в сперме собиралось и теперь ненарадуюсь ФУНКЦИОНАЛУ
Как выше писали, ГЦЦ отлично собирает под армы, гдб отлаживает у меня J-link с али.
Линкер-шкрепты то еще веселье, но по большей части всегда есть примеры или прям готовые для твоего камня помню, как в перый раз с ними пердолился пик стронгли релейтед, но это не под арм.
>>249397
>А процесс отладки непосредственно в мк как при этом выглядеть будет?
Для моего J-link'а скачал какой-то китайский бинарь, который прикидывается GDB-сервером и слушает порт, далее из ИДЕ настраиваешь подключаться к этому порту и всё взлетает. Говорят можно так же через openOCD, но там вроде не работает SWD
>>249397
>А процесс отладки непосредственно в мк как при этом выглядеть будет?
Ну в камне же есть спец модуль, с которым ты общаешься через JTAG/SWD, он имеет власть над процом и системной шиной, по команде отладчика он стопорит прцессор, может читать любой байт из памяти, даже IO правда это не всегда имеет смысл, и содержимое любого регистра.
Пик отвалился
>QtCreator
С Qt, надеюсь, только название общее?
Алсо, я походу вообще неправильно понимаю, что такое make, и зачем им пользуются.
>ГЦЦ отлично собирает под армы, гдб отлаживает
А что насчет просмотра состояния регистров проца? Можно, конечно, по адресу в окне memory смотреть - когда кейл тупил для какого-то nxp-шного мк, я так делал, но это пиздец просто как неудобно.
>Для моего J-link'а скачал какой-то китайский бинарь
Пердолинг и недели поиска или всё гораздо лучше?
>Ну в камне же есть спец модуль, с которым ты общаешься через JTAG/SWD
Да это я знаю, меня интересовало, как с этим всем будет работать среда и сможет ли вообще. Я пока не настолько хорошо пишу, чтобы не отлаживаться внутри процессора вообще.
>С Qt, надеюсь, только название общее?
Нет, это ИДЕ специально для Qt написанная на Qt
>А что насчет просмотра состояния регистров проца? Можно, конечно, по адресу в окне memory смотреть - когда кейл тупил для какого-то nxp-шного мк, я так делал, но это пиздец просто как неудобно.
Пик релейтед, правда это не арм, но в арме так же
>>249923
>Eclipse
Сидел на нём, но марс оказался слишком забагован и тормознут и я дропнул.
Спасибо, но вопрос уже проработан.
Микроконтроллер - atmel at91sam9x5. Этот выблядок не имеет пользовательской пзу и имеет 16кб озу, и поэтому приходится изъебываться с помощью т.н. SAM-BA, утилита атмела для работы с их платами.
Также людьми и атмелом был разработан бутстрап это ультралегкая программа, выполняемая из озу мк, которая подготавливает плату и загружает юбут.
И ядро, и юбут, и бутстрап, и дтб, и даже образ фс (я взял тупо buildroot), я загружал в nand через эту самбу.
make - стандартная программа линуха, которая выполняет файл makefile. В нем, в свою очередь, описано как, где, зачем, кем будет собираться твоя программа. Там описаны файлы, библиотеки для сборки, флаги компилятору, линковщику и т.д.
Язык, на котором все это описано, сложен и не интуитивен, поэтому люди используют различные генераторы типа cmake, которым ты почти человеческим языком указываешь сборку, а он уже лепит makefile.
Очевидно, что мейкфайл, грубо говоря, схож для арма и х86, для винды, линукса, для питона и cpp.
QtCreator - среда, которую пилили для фреймворка Qt. Но он оказался настолько легок и функционален, что на нём стали писать программы, в которых совсем нет Qt и qmake. Нормальная навигация по коду, всяческий рефакторинг напрочь отобьет уебищный богомерзкий иар.
Есть гайды по настройке QtCreator для арм. По схожей настройке ты хоть для пиков сможешь писать.
Плохо объясняешь. Make это программа-менеджер компиляции, позволяющая автоматически разрешать порядок зависимостей при сборке и не пересобирать то что уже собрано.
>на котором все это описано, сложен и не интуитивен
Неправда. Задаются цели (это обычно имена файлов, но могут быть и нефайловые phony-цели), для достижения цели пишется последовательность действий, например вызов компилятора. Стоит учитывать что это не башскрипт, здесь каждая строка работает изолированно, как отдельный башскрипт, и переменные работают чуть иначе. Зато например можно делать wildcard цели, вместо прописывания действий каждому файлу.
Make позволяет там где можно компилировать в параллели, если вызывать его через make -jN, где N максимальное количество потоков.
Я бы так примерно разложил: для совсем простых хелловорлдов компилятор можно вызвать руками, для проектов сложнее писать мейкфайл, для совсем сложных проектов генерировать из cmake. Отдельная пляска начинается при портировании приложения на разные платформы, там уже требуются configure скрипты, которые кстати тоже можно генерировать, cmake вроде с этим может совладать тоже.
>там уже требуются configure скрипты, которые кстати тоже можно генерировать, cmake вроде с этим может совладать тоже.
Cmake - это замета автотулзам так-то, он умеет всё, что умеют они и понятнее по синтаксису.
Алсо есть еще плюхи, вроде скачивания либ прямо из гита в процессе сборки и их подключение к проекту.
Например, в прыщах у меня есть либа libpthreads, а вот в сперме надо скачать и собрать libpthreads-win32 и статически прилинковать к проекту.
синтаксис там оче простой, не большая жопа случается с макросами, ну и объемами тащемта для компиля ядра
>В нем, в свою очередь, описано как, где, зачем, кем будет собираться твоя программа.
То есть, по сути, это как настройки сборки проекта в IDE, только без IDE, так?
Про QtCreator понял, спасибо. Обязательно попробую, только я из постов выше так и не усвоил, есть ли необходимые драйвера и прочие инструменты для шиндоус? GDB тот же по-моему только для linux имеется.
> То есть, по сути, это как настройки сборки проекта в IDE, только без IDE, так?
Безусловно, но сверх того еще всяки плюхи.
Но главное не это! В makefile ты можешь написать совершенно любую логику, тогда как в настройках иде она весьма ограничена разрабом иде.
Алсо, как ты собрался переносить сборку с одной пеки на другую?
В ридми напишешь: настройки проекта->парамеры кококомпилятора->поставит галку тут тут и тут? Ну ты понял.
>поставит галку тут тут и тут
pdf с картинками к исходникам было бы вооще шикарно
Сегодня немного постиг doxygen. Вышел на него после долгого гугла визуализации классов, в любом виде, не только uml. Есть какие-либо альтернативы? Doxygen справился отлично, но это не его прямая задача
Я как-то пытался заставить себя пилить документацию на нем, роаботает конечно охуенно, но надо моч в его разметку, и самое главное не лениться это делать. Ни кто не оценил и времени делать так везде нету.
Проект скомпилировался и получился файл Main.axf, который весит дохуя, и маленький hex-файл.
Сначала я пытался прошить при помощи ST-Link Utility. Открыл в ней hex-файл, подключил в один USB стм, в другой - ST-Link, но при попытке приконнектиться возникает ошибка пикрелейтед.
Когда пытался прошить через Keil и нажал Download (F8), получил ошибку Error flash download failed - couldnot load file Main.axf.
Что я делаю не так? И как прошить только код, а не все говно, которое лежит в axf-файле?
Так у тебя не с прошиванием а коннектом похоже проблема. Если все правильно соединено, должен добиться коннекта через stlink. А потом лучше все делать в хайле. Создаешь проект, настраиваешь тип программатора, например stlink, там прописываещь тип соединения sw. Пишешь код, компилишь, запускаешь. Он сам знает что какой бинарник прошивать, не надо это вручную делать
Я на виндах пользуюсь и хайлем и эклипсом. Хайль шустрый и хороший отладчик, но во всем остальном хуета. Эклипс наоборот, медленый монстр, но охуенен как редактор и отладчик там годный. Да, в отличие от кeil, gcc требует скриптов к линкеру, но в 99% случаев тебе их писать не придется, просто берешь готовые. Это пидоры типа двачеров просто опустить тебя заходели. Большинство ембедщиков хуй тебе с нуля линкер скрипт напишут, ибо нахуй не нужно. Максимум подправить размеры памяти, стека и тп. Если конечно бутлоадер будешь писать, или зачем-то нужно чтобы код во флеш не с нулевого сектора загружался (чтобы например настройки сохранять в начальных секторах небольшого размера), то тогда да. Что касается отладчиков под эклипсом, я пользуюсь и seggerом (в эклипсе напрямую) и stlink - через Open OCD и чуток настройки подправить.
Ну нахуй в 2016 писать руками мейкфайлы. Не нравится keil или eclipse, есть еще Atollic studio, или emblocks, или этот... миниатюрная копия эклипса, маленький но придурковатый, вылетел из башки. Короч все они умеют сами makefile генерить, зачем этот мазохизм.
>подойдет любая среда, к которой можно
Нет, заебешься ты "любую среду" под себя затачивать. Бери готовую интегрированную среду с поддержкой arm - eclipse+arm плагин, или atollic studio и тп. Там все будет и компиляция и прошивка и отладка.
Сложилось стойкое убеждение, что ПО с префиксом Qt - рукожопное творение школоты
На самом деле нет, Qt охуенный. Ваяю на нём по мелочи.
>Или придется вручную дергать ногой, считывать состояние ног данных, складывать в массив?
This.
Тебе быстро надо?
Ну вообще да, быстро, АЦП 10 МГц может держать. Как-то грустно прям, думал можно это все переложить на периферию а ресурсы проца только на обработку тратить.
Можешь это как-то по другому объяснить, что тебе нужно делать? Тебе нужно несколь ADC пинов одновременно опрашивать или что?
А, все понял, познакомился что такое Parallel Output ADC. А зачем его юзать, если у STM32 есть свой ADC?
Ну вообщем да, АЦП - AD9220, по фронту input clock на ногах BIT1-BIT12 собственно выставляет биты сэмла, плюс еще есть нога переполнения OTR. Вот как раз хотелось-бы таймером тактовать clock и опрашивать ноги BIT АЦП, на основании которых формировать значение сэмла.
>>250501
у STM32 есть свой ADC?
Частота дискретизации низкая. AD9220 думаю получше встроенного будет и по другим параметрам.
>Так у тебя не с прошиванием а коннектом похоже проблема. Если все правильно соединено, должен добиться коннекта через stlink
Что могло пойти не так? Я соединил соответствующие выводы на программаторе и плате, снял перемычки, жал даже резет, но не работает.
Трудно сказать. Давай какие нибудь пикчи - как надо, как соединял. У меня где-то валяетс discovery если найду посмотрю, но вроде там все просто - соединил и работает.
А вижу, у тебя 10msps а в STM32 2.4msps.
Но если ты будешь 12 пинов в ручную читать и в массив складывать, то насколько это замедлит?
Посмотри на DCMI или FSMC.
Оказалось, что перемычки не надо снимать, если программирую внешним ст линком.
Алсо, прошиваю hex-файл при помощи ST link utility. Keil выдает ошибку No st link found with the expected serial number.
Да, поменял. SW там стоит по умолчанию.
А зачем тебе мудохаться со внешним. Попробуй встроенный
Может то что он in use пишет, у тебя stlink utility его держит? Так то все верно выглядит
Да, stlink utility его держал. Теперь in use исчезло, но прошить через keil все равно нельзя: No target connected.
Мне кажется ты по какому то сложному пути пошел. Сейчас выудил свою дисквари из кучи мусора, воткнул mini usb и все заработало, см пик. Никаких перемычек никогда не трогал.
Вряд ли по сложному пути. Соединил stlink четырьмя кабелями с SWD-разъемом на борде, mini usb от борды воткнул в юсб, stlink в другой usb.
Зачем тебе внешний stlink вообще. Тебе только кабель от USB воткнуть в дискавери и все.
Теперь я отключил mini usb дискавери, и он получает питание и данные только от ст линка. В настройках хайля ст линк определился. Когда жму F8 Download, один раз возникла ошибка internal error, а сейчас no target connected.
Ты все делаешь чтобы максимально заебаться. Подключаешь внешний stlink, и грузишь отдельно hex файл, вместо того чтобы просто воткнуть провод в дискавери, написать пару строк хело ворлд и запусть свой проект и все. Пять минут.
Открою секрет. Идешь на форум st и там всегда в углу сидит старый азиатский дед из "Матрицы". Забыл как его там звали, но на st он кажется cleve1. Он охуенен и все знает. Я всегда к нему пристаю. И этот вопрос там тоже обсуждался. У меня в голове куча бредовых проектов, но как только я разбираюсь КАК нужно делать, у меня тут же пропадает интерес, так что ни один не сделал. Например цифровой осциллограф на ёбагерцы. Окозывается они пилятся на суперскоростных ADC, которые не один контроллер не в состоянии читать. Между ними нужно сажать FPGA. И вообще, даже для более низких скоростей, как у тебя, STM32 архитектура не предназначена для параллельного синхронного ВВОДА (вывод есть, через FCMS или как эта хуета называется).
>Между ними нужно сажать FPGA.
Да, изначально делал на FPGA, но сейчас опять присматриваюсь к STM32, из-за наличия dsp, ну и допилить что-то свое гораздо проще. Единственное, что пока останавливает - если допустим разогнать до 100МГц, и читать данные на 10МГц, то на обработку одного сэмла остается всего 10 тактов... Но чую, что я где-то обосрался в рассуждениях.
>И этот вопрос там тоже обсуждался.
Может тогда ссылочку скинешь?
>STM32 архитектура не предназначена для параллельного синхронного ВВОДА
А как же AN4666.
>AN4666
ебаать, сложна! не знаю, может в том обсуждении на форуме имелось ввиду что штатных методов нет, а через такое изъебство возможно, хз. сцылку не дам, это был рандом поиск по форуму на st, уже не помню как нашел. пили как написано, чо.
>пили как написано, чо.
Таки да, только там тактирует передающий, а мне нужно чтобы тактировал принимающий, но ладно, буду разбираться. Единственное, что еще волнует - производительность. Мне например нужно понять потянет ли arm_fir_decimate_fast_q15 с заданным количеством коэфиициентов поток данных в 10MSPS. Есть какой-нибудь инструмент для оценки перфоманса или вручную замеры делать придется?
Нога RST не нужна, никогда не подключаю, и так все должно работать (программный ресет)
>почти что надо, только там все наоборот
Ну удачи тебе, может и взлетит
Вот ксати ссыль на мастера ключей, но вряд ли тебе поможет, просто так сказать для отчетности:
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Fast gpio read with sync&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=469
Он кажется во втором посте и намекает на что-то такое, что в твоем application notes.
Спасибо, бро. Почитал, погуглил еще. Короче будет единичная транзакция DMA в режиме память в память, где источник регистр GPIO. Транзакция будет выполнятся по таймеру. Частота таймера и будет частотой семплирования. Вроде не сложно должно быть. Короче прикупил вот такую махарайку https://ru.aliexpress.com/item/Free-shipping-STM32F407VET6-development-board-Cortex-M4-STM32-minimum-system-learning-board-ARM-core-board/32618222721.html
К ней нужен еще программатор или все уже на борту есть?
Гугл говорит что можно, но поверь моему опыту, лучше 1 раз купить программатор с СВД и отлаживать как белый человек, чем ебаться с УАРТом и принтфами
У меня J-link, пусть кто-то с ст-линком пояснит.
А это же ведь еще и дебаггер? Он позволит отлаживать выполнение кода прям на плате?
Так в этом и суть, тащемта.
пиздос, хотел линк из форума запостить, ни хуя не дает, сделал тайни урл все равно не дает - тайни урл латинницей это слово из спам листа оказывается. теперь линки внешние нельзя постить вообще?
О еще раз спасибо. Где-то видел, что GPIO через DMA можно только в режиме "память память" без вкусностей типо цикличного чтения. А тут действительно GPIOC->IDR как адрес периферии используется. Тогда уж и дабл буфферинг можно и прикрутить или прерывание на халф трансфер.
Ага, мне тож понравилось, сама платка вышла применрно рублей на 150 дороже чем просто чип STM32F407VET6 в терре.
И не забудь что тебе DMA2 надо.
И если у тебя семпл рейт мегагерцы, то про прерывания на таких скоростях забыть нужно наверное. Прерывания даже порядка единиц микросекунд это уже скучно.
>И не забудь что тебе DMA2 надо.
Ну да, уже понял. DMA1 что-то там не хватает.
У меня еще такой вопросик. В примере один таймер сконфигурирован Input Capture, а второй Output Compare и типо надо их ноги соединить. То есть Output Compare генерит меандр, а Input Capture по фронту инициирует DMA транзакцию. А мжет ли Output Compare таймер инициировать DMA транзакцию, то есть одним таймером и АЦП тактовать и одновременно инициировать чтение значений ног, которые АЦП выставляет по фронту?
С дивана, могу ошибаться
У таймера там есть некие ивенты, их можно отправлять ДМА-контроллеру, так было в моём проекте на стм32ф103. Почитай датаЩИТ
>мжет ли Output Compare таймер инициировать DMA транзакцию,
Да, может
• Interrupt/DMA generation on the following events:
– Update: counter overflow/underflow, counter initialization (by software or
internal/external trigger)
– Trigger event (counter start, stop, initialization or count by internal/external trigger)
– Input capture
– Output compare
Output compare mode:
Sends a DMA request if the corresponding enable bit is set (CCxDE bit in the
TIMx_DIER register, CCDS bit in the TIMx_CR2 register for the DMA request
selection).
>одним таймером и АЦП тактовать и одновременно инициировать чтение
ХЗ как он там задумали в этой рацухе, но ведь неспроста у них два таймера, один тактует другой читает, в этом у них вся соль.
Ок, спасибо бро.
>>251087
Ну возможно DMA-запрос выполняется раньше чем выставляется уровень на ноге (не знаю, можно ли такую инфу нарыть в даташите), плюс задержка самого тактируемого устройства = нестабильность при работе на высоких частотах. В принципе тоже можно тоже развести ногу тактирующего таймера на клок АПЦ и на ногу Input Capture таймера. Может действительно так даже лучше будет.
Я просто подумал, что раз нет внешней хардверной синхронизации, то могут быть глюки связанные с асинхронностями. А в принципе может не все так страшно. Тебе ж не нужно гарантировать, что каждое чтение соответствует именно предшествующему такту. В худшем случае один семпл может считаться повторно. Главное же чтобы все ебошило непрерывно без затыков с приемлемой скоростью. (Если я правильно понимаю все архитектуру).
Ну вообщем платы приедут - буду экспериментировать, направление куда рыть понятно. У меня еще пара вопросов. Вот я допустим читаю в память GPIOA->IDR, но пины PA0, PA1 заняты какой нибудь периферией, что будет в соответствующих позициях бит, нули? Или может вобще не взлетит и надо обязательно 8\16 пинов как GPIO_Input помечать? И относительн среды разработки - я смотрю trueSTUDIO не балуют тут, но ведь годнота-же, бесплатная без ограничения на размер кода, CubeMX экспортирует, ST-LINK поддерживает, текстовый редактор весьма неплохой. Есть какие-то объективные причины Keil использовать?
Не понял вопроса, какой переферией. Что угодно может быть, 0 или 1. Зависит как пины сконфигурированы. Если код твой, тебе решать чем пины будут заняты и как они сконфигурены и что ты на них повесил. Если это только не особые пины какие-нибудь типа SWIO. Среда вопрос субъективный. Не слушай никого. Попробуй что тебе понравится.
Тебе ли не похуй что там будет на тех пинах, чтение всегда будет успешно а результат всё равно порежешь маской чтобы левак не мешался.
Покажи скриншотами как ты открываешь CubeMX проекты в truestuido и проводишь отладку с брекпоинтами, ничего не понял как в этом разбираться. В том же кейл все интуитивно понятно.
>>251205
Ну отлично, главное что работать будет. Маской\сдвигом значение сэмпла сегда получить можно.
>>251208
File->Import->General->Existing Project into Workspace и выбираешь директорию с исходниками, которые Cube сгенерил. Процесс отладки примерно такой-же как и в дргугих средах, ничего вроде необычного.
Ты имеешь ввиду USB драйвер для программатора что ли? Ему то нужно будет свой драйвер пилить, если он будет через USB с контроллером общаться. Это гимор. Проще через UART + FT232
А я не понимаю тебя. Если на контроллере UART, то в него включается железка FT232 которая включается в PC шные USB. На PC драйвер FT232 (не VCP). Вот это я называю простым вариантом. А ты про что?
Они написаны для другого чипа, поэтому я скачал документацию для своего: www.st.com/resource/en/datasheet/stm32f100v8.pdf
Но в этом даташите нет таблички как на пикрелейтед, которая приводится в статье. Где мне взять нужную документацию, чтобы можно было заставить работать следующий кусок кода?
void init_led(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
GPIOC->CRL &= ~(GPIO_CRL_MODE0_0);
GPIOC->CRL |= GPIO_CRL_MODE0_1;
GPIOC->CRL &= ~GPIO_CRL_CNF2;
}
Диод подсоединен к ножке PC0.
тебе не даташит нужно а reference
>у тебя ж там даже ссылка на него в этой статье прямо над твоим пиком
Тогда я не понимаю, что я сделал не так. Диод подсоединил к ножке PC0, которая управляется портом C. Конфигурирую этот порт как здесь: https://ideone.com/3YmRVz
Но программа работает неправильно.
На каком скрине? Я показал функции инициализации из своего проекта. Они не компилируются на идеоне, потому что там не поддерживается компиляция под микрухи.
Понятно, я не знаю что такое идеон и зачем он компилирует, когда тебе просто нужно было код показать. init_led выглядит странно. где определено GPIO_CRL_MODE0_1?
>где определено GPIO_CRL_MODE0_1
В stm32f10x_rcc.h
>я не знаю что такое идеон и зачем он компилирует
Это просто онлайн-компилятор. Можно использовать вместо пастебина.
А, cmsis. Не понял зачем там CNF2 сбрасывается. Тебе же CNF0 нужно. Но по дефолту там нули так что должно все и так работать.
не бзди, разница не принципиальная, некоторые вещи типа таймеров вообще без изменений, gpio немного подругому например, clock намного изъебистее, но тебе то какая разница, не сложнее, просто чуток по другому. а так все тоже самое, либы, принципы, среда, и четверг.
Ладно, дома проверю. Не мог бы ты объяснить, почему нужен именно CNF0 и что это за регистр?
а тогда шикарно.Мнеб еще в аналог вкатится и будет ништяк просто, потому что бесит:здесь не знаю, тут схему рассчитать не могу и поэтому кидаю на эту задачу МК(хотя там реально туфта наподобие генератора треуголного сигнала или хитрой схемы на одном-трех транзисторах), поэтому на stm перешел и вот как выкрою время-буду заниматься, но рассчеты в аналоге все так же неосилятор(в ньюфаг тредах читал книги до первых упражнений-не осилил и утонул).
Это значения битов в регистре CR. На пике из референс что ты запостил. На каждый пин четыре бита. Два бита CNF два бита MODE. Так как у тебя нулевой пин тебе надо MODE0 и CNF0.
Ну я тоже если выбирать между аналогом и контроллерами, мне проще запрограмить. И то и другое интересно, но аналог безусловно намного сложнее. Это как олдфаги, которые учились ездить на разъебаном стике с убитым сцеплением, а тут тебе дают коробку автомат и оно само едет.
Все как этот анон насоветовал>>249353
и это по сути мой первый шаг в освоении программирования микронтроллеров
допустим, кабель тоже нашелся
А что делать дальше? Какие гайды, мануалы, что нужно на компьютер скачать
нужна какая то прошивка или что? Как прошивать?
Ставь keil или что тебе больше нравится. Там весь софт\драйвера для прошивки\отладки уже должен быть.
Аноны, а кто-нибудь с SIMD инструкциями заморачивался? Читал на каком-то форуме типо в лоб переписал что-то там, в итоге скорость просела из-за перегона данных между памятью-регистрами, или типо того.
Ну вот уроки например.
https://www.youtube.com/playlist?list=PLJTlt64jBcCuRgAMGImQzxRlYdSKa5Ifk
бразильчую
что значит "управление через usb"? обмен данными с твоим софтом работающим внутри stm32? или прошивать тебе надо через usb?
Шикарно драйвер на winapi
>что значит "управление через usb"? обмен данными с твоим софтом работающим внутри stm32?
Да. Например, хочу, чтобы моим софтом внутри стмки можно было управлять, подавая сигналы при помощи драйвера.
>Задачи
Написать драйвер и охуеть от того, как я умею. Смысл не в цели, а в процессе ее достижения.
Для венды тебе DDK надо. Ну и в кубике какой класс USB выбираешь?
Посмотри в сторону HID пока данных немного тебе хватит с головой.
Плюсы:
Не нужны дрова - они стандартные в любой оси есть
Простая реализация со стороны пеки - юзал libusb, работает, доебаться не к чему
Со стороны СТМки юзаешь готовый драйвер, останется только правильно заполнить дискрипторы, с чем я и пердолился большую часть времени.
Мне драйвер самому нужно написать, готовын решения не нужны. Хочу все с нуля зделать на WinAPI. Хочу прокачать скилс в написании дров и железе.
Ты выбрал хороший способ заебаться!
Читай application notes от ST. Возможно это все завернуто в примеры для USB в CMSIS. Там есть пример кода внутри STM32 и примеры драйвера для виндов кажется.
Ебаная идея, блядь. Сначала напиши под линуксы, там и документов, и гайдов уйма
Дух старой школы живет только в венде, где пацаны угорают по SoftIce'у, живут молодостью, васмом и статьями Зомбы. WinAPI 359!
ну давай приступим
отбросим документированные и недокментированные нахуи
и просто вазамним себя богами
что нам надо писать? додик?
всеже есть 7 уровневая модель бытия
кузубова такоа знаеш философа?
он ее пытался реализовывать на канальном уровне
кстати модель знаний нехуевая очень и проста для понимания
на первом уровне биты - тое ты должен каждый бит отлавить етими ебаными транзисторами ну или оптронными ключами не суть важно ...
второй уровень канальный устойчивые сигналы сформированные в пакеты ты должен перенаправлять...
3 уровень программный здесь наши синеглазые и никто кроме их.
4 уровень интерфейсов - функций здесь синеглазые спорят с механиками логики - каму ты нахуй нужен шизик со сваей пид функцией?
5 уровень тут манагеры на своем пхп и прочей хуете
на шестом уровне наши девачки уже обученные фотошопу и 3дмаксу и мае вопщем ляпают контент...
на 6 уровне
на 7 уровне
и это все называеца законценная функциональная модель
конечного девайса - продукта для хомячков
Даташиты. Что то хуйня, что эта. Мк, обычно имеет определённые ножки (адрес, данные, управление) и очевидную аппаратную поддержку. Работает тупо, мк выставляет адрес, стробирует, считывает, что с нанда, что с ддр. Если ее почему-то нет, пытаться поднимать дрочкой жпио ддр не стоит, это глупо.
То есть тот же Allwinner A13 должен сходу поднять подключенные к ней модули памяти?
Ну где-то надо еще указать тип памяти и тайминги, мб частоту завести с кристалла, возможно (как на оп-пике) сделать инициализацию, да и при программировании знать и учитывать диапазоны адресов, а так да, все тупо. Ну и, естественно, необходимо правильно развести оперативку, там своя история там одинаковая длина дорожек и подтяжка, я ее не знаю
Короче пишу как есть: если нанд или рам подключены не правильно, или их нет вовсе, а ты пытаешься с них считать, то операция пройдет без ошибок, просто ты считаешь мусор
Подключал НАНД к PICу через ЖПИО, было дело. Однако это медленно.
С ДДР - хз скорее всего и вовсе невозможно. Нужен спец-блок - контроллер памяти.
купил два таких кольца, думал поуправляю AVRкой, не пинайте меня - хуй!Там длительность сигналов около 150 нано секунд. НАНО. Я разогнал мегу до 20 мегагерц и писал на асме без вызовов подрограмм, только sbr и cbr, ели включал нужный свет, об регулировании и речи не могло быть.
EK-TM4C1294XL http://www.ti.com/tool/ek-tm4c1294xl#2 и STM32F4DISCOVERY http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/stm32f4discovery.html .
На какую сам сядешь, на какую мать посадишь? Разница 200 рублей пользу СТ, но у ТИ есть ethernet, больше рам и вроде как писали, что у ТИ лучше документация.
Охлаждение сделаю, цена не так принципиально (желательно до 3k). Требуется на оочень нагруженный проект по вычислениям. Микрокомпьютеры не пойдут (хотя арм от малины можно, только документации нормальной по типу stm так и не нашел.)
Память должна быть выносной, порты usb (еслии3.0, то шикарно), gpio
>только документации нормальной по типу stm так и не нашел.
В смысле не нашел? Идешь на http://infocenter.arm.com/help/index.jsp
Открываешь Cortex-A7 MPCore processors и хуяришь, хуяришь, хуяришь...
Может лучше x86? Всё равно линух будешь запускать. Там такие же платы как малина, со всеми usb.
>Требуется на оочень нагруженный проект по вычислениям
Вычисления или реакция? какие вычисления? объем? купи mini-itx и i5 на него, если нету ограничений по питанию и объему - переварит что угодно при должной оптимизации алгоритмов.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/CHDJAAJF.html
>Addition VADD.F32 1 Cycles
>Multiply VMUL.F32 1 Cycles
>Multiply Then accumulate VFMA.F32 3 Cycles
Как так? И нахуя тогда нужна VFMA.F32 если она на один такт больше жрет чем две инструкции?
В чем помощь? Типо использование одной инструкции дает более комактный но менее производительный код? А в случае -O3 развернет в две инстркуции, которые на 1 цикл быстрее отработают?
Понятие мощности оче растяжимое. В чем заключается, в математике? Ищи системы ARM+dsp, вроде blackfin.
Алсо, почти досвязал Qt + ASF + JLink
да это помогает компилятору и процессору заниматься спекуляциями, ведь выбирать инструкции из памяти тоже тяжолая работа
два прерывания. одно возникает когда половина, втрое - когда полностью
Почему-то значение, полученное с канала ADC, выходит за рамки 12-ти битного числа. Конечно, если выполнить >> 4, результат получается правильный, но как-то странно это.
Анициализация:
ADC_InitTypeDef adc_setup;
adc_setup.ADC_ContinuousConvMode = DISABLE;
adc_setup.ADC_Resolution = ADC_Resolution_12b;
adc_setup.ADC_ScanConvMode = DISABLE;
adc_setup.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None;
adc_setup.ADC_DataAlign = ADC_DataAlign_Right;
Чтение результата:
ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 1, ADC_SampleTime_56Cycles);
ADC_SoftwareStartConv(ADC1);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
val = ADC_GetConversionValue(ADC1);
может значение adc записывается в старшие 12 бит в твоём случае, а не в младшие? посмотри настройки adc
1. Пропала вся периферия в меню View->System Viewer
2. На неподключенных входах АЦПа прыгают байты, но при подключении AUX кабеля от телефона там просто нули.
люто-бешено проебался и понял что не хавтает портов уже в середине проекта. прошу помощи: необходимо использовать spi программны, т.к. порты на которых spi1 контроллера уже занят . помогите советом как реализовать clk на обычно порте программно на stm32f030.
хотел же блядь брать stm32f103 сука. оебят выручите плиз
Только вчера пилил програмный I2C, работает.
SPI проще же там сигналы однонаправленые. Поищи либу не обязательно даже для стмки и перепиши кусочки где запись/чтение пинов.
Однако есть одно существенное НО. Скорости от такой схемы не жди.
можно поподробнее. всмысле чтение пинов? библиотеку spi? stdperiph подойдет? я с ними работаю.
Кто из вас имел дело с пикрелейтедом? Цена сравнима с аналогами, есть даже макетные платы по 5К за штуку.
Имею дело с 1986ВЕ1Т. Обычный ARM-микроконтроллер, не лучше и не хуже множества других.
Розничная цена К1986ВЕ92QI около 800р, аналогичные STM32 у нас в розницу продаются за 250р. Поэтому целесообразность использования их в самоделках сомнительна.
Хотя, стоимость деталей в любой самоделке часто намного больше стоимости микроконтроллера, поэтому может и есть смысл их использовать.
http://www.avrfreaks.net/forum/spi-bitbang-implementation
Вот прям почти все готово, но это АВР-ка. Замени содержимое четырех первых функций из названий понятно что они должны делать.
>>259744
Юзал freemodbus на всех своих подельях и не арм тоже. Там есть порты на разные контроллеры и на армы тоже.
Возможно придется написать колбэки для
1. Инициализация/сброс таймера
2. Чтение/запись UART
3. Обработчики перываний UART и таймера
Они все очень простые, смотри примеры.
Конкретно скинуть не могу рабочий проект, да и реализация сильно завязана на остальные части проекта, понять примеры будет много проще.
Использовал все кроме CAN, USB и ethernet.
>Какие ощущения от сего поделия?
По набору периферии мало отличается от других микроконтроллеров, разве что I2C иногда не хватает. Errata по объему не отличается от каких-нибудь STM32.
Тут вот какая хрень.
Я юзал только Slave, однако в одном проекте у меня был Nuttx на STM32F103 и там несколько проапгреженая версия freemodbus с поддержкой Master, в ридми написано, что мастер взят из
https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32
Где можно найти примеры готовых устройств и кода, разработанных на STM32? Чтобы лежала схемота, описание функционала и исходники.
Например, как вот такая дикая годнота: http://rusefi.com/wiki/index.php?title=Main_Page
Интересно читать примеры кода для досок разработчика, но там в основном изи примеры из разряда мигалок светодиодом.
Может ли быть проблема внезапно быть в прошивке? Ну типа волею случая в первой инструкции лочит жтаг. Прошивка в spi-флешке.
Как можно полупрограммно проверить жтаг?
ну бампчик же анонасики
Че за грибы бля. Бутлоадер в атмеге записан. Внутренняя память внутри. Есть способы её расширения внешним чипом, но не все атмеги это умеют. Или ты про другое?
>>261443
просто хочу разобраться как там бутлоадер устроен ковыряясь в старых андроидофонах что у меня лежат. И по возможности накатить туда что то типа арчлинупса.
Я гуглил про те вопросы что сейчас ниже спрошу. Инфа очень размытая в инете может у кого есть годная инфа про архитектуру андроидофонов буду рад почитать.
1) Как происходит разблокировка бутлоадера. Да я знаю что некоторые производители предоставляют возможность по адб разлочить, мне интересно какой принцип. Типа мы по адб связываемся с процом ведроида, и выставляем там какой нибудь бит посредством команды fastboot oem unlock?
2) Куда зашит сам бутлоадер, в отдельной ром микрухе? Или внутри самого проца? Получаеться чтобы перезаписать ром мне надо что то процу сказать?
3) Где лежит раздел /boot/ как я понял там находится ядро линупса андроидного? И к нему можно получить доступ если разлочить бутлоадер. Они лежат в одной ром памяти? Или это две разные физические микросхемы?
3) Что представляет собой внутренняя память андроида? встроенная память по типу sd карты?
4) Раздел / корень андроида, если его рутануть, это раздел /data/ или раздел /system?
Благородным делом занимаешься Антон, жаль не могу помочь ни чем. Сколько ебли с той же оранжевой пи, а уж про рандомный планшет и говорить не чего. Не подьемное дело
может я нивтом треде? типа увидел арм типа написано но тут типа слишком низкоуровнево и на уровне железа токо помогают? может где есть операционных систем и архитектуры тред?
может я нивтом треде? типа увидел арм типа написано но тут типа слишком низкоуровнево и на уровне железа токо помогают? может где есть операционных систем и архитектуры тред?
чот я капчей обдвачевался аж задаблпостил
Все нормально, тред именно тот.
Собрать ядро и прошить линаксом планш с нуля архи сложная на сегодняшний день задача.
ну ок, если кто знает или чо пускай советует я не тороплюсь. Если чо сам смогу отпишусь
Присоединяюсь к этому антону.
Могу порекомендовать найти и поковырять аппараты Sony 2012 года, тк на них утекли доки и полный набор исходников (там еще был срач, что какой-то тип не хотел накатывать защищенный правом драйвер на BT и пытался родить решение сам).
про adb прошивки и тд.
У тебя же на картинке верная схема. Я сейчас расскажу про оп-пик. Бутлоадер пацаны дома используют u-boot лежит в 0 адресе памяти, например, nand. Проц имеет т.н. bootstrap программу - набор команд по простейшей инициализации всей памяти на борту. Потом этот бутстрап делает опрос памяти (сначала с spi, потом nand, i2c, mmc), он ищет особый заголовок (20 байт каких-то там чисел и размер прошивки в байтах). Находит заголовок, и загружает в свою маленькую внутреннюю оперативку код, как раз уже загрузчик u-boot.
U-boot загружает ядро с той же нанд флешки. Кернел уже инициализирует фс с тем учетом, что на флешке уже есть инфа и нужно начало выбрать смещенное.
Нормой хранить загрузчик и ядро на разной памяти. Ю-бут мощный, от тебе и с интернета ядро загрузит.
Я хз как точно сделан загрузчик в телефоне, вероятно, что есть загрузчик загрузчика , который лежит в пзу чипа, чтобы в случае проблем с нанд флешкой можно было бы полностью записать туда систему. И этот первичный лоадер как раз может контролировать разблокировку лоадера.
это STM32F103C8T6
Как заливать в неё код?
знаю можно через usb uart, но какой?
знаю, что можно прошить загрузчик, чтобы потом по распаянному usb можно было, если есть такой, кинь соус на него, в гугле не нашел.
Я ньюфаг, перехожу с arduino на st
все там есть
>знаю можно через usb uart, но какой?
Через любой с уровнями 3,3В Что-нибудь на PL2303, CP2102, FT232 и подобных. Подойдет даже из ардуино, если там уровни 3,3В.
Для загрузки используется программа: http://www.st.com/en/development-tools/flasher-stm32.html
>>262131
>Вроде в STM32F103C8T6 нет USB
Есть.
>>262119
>чтобы потом по распаянному usb можно было
Нет смысла. Купи лучше J-link, сможешь пошагово выполнять программу на микроконтроллере.
Два мк тебе анон.
но смысл загрузчика есть - будет загрузчик, покупать не че ненадо будет.
пошагово - в чем профит?
Отладка программы же. Залил что-то своё, а оно не работает, как узнать, в чем проблема?
Есть спаянная плата радара, есть прошивка. Вопрос, как её туда впихнуть и что для этого использовать?
Анон, твоя помощь весьма кстати
З.Ы. Допиливаю ссыль до кучи на весь проектик https://github.com/Ttl/fmcw2
> Нет смысла. Купи лучше J-link, сможешь пошагово выполнять программу на микроконтроллере.
Джва килобайта sram этому.
Без отладчика тяжело крупные проекты пилить, иногда оно тупо не запускается, будто сжег все, а с отладчиком всегда моно найти траблу. Да и не дорогое удовольствие совсем.
>>262193
Сириусли, ты, значит, собрал это поделье, а как прошиться подумал в последнюю очередь?
>jtag не подключен
Ты что, расчитываешь, что она без пердолинга возмет и заработает?
>uart0 я не нашел
Стандартный загрузчик не заюзаешь
>есть юсб
Может у этого проца есть загрузчик с него?
>есть spi флешка U3
Вангую, что проц может грузиться из неё, но опять же как должен быть сформирован образ - хз
http://www.nxp.com/documents/user_manual/UM10503.pdf
Страница 53. Да, может грузится через USB и с флешки.
Так как эта схема на основе hackrf, то стоит смотреть руководства по hackrf.
Еще одна минута поиска: https://github.com/mossmann/hackrf/wiki/LPC43xx-USB-DFU-Notes
Остается только сравнить эту схему с hackrf в части USB и ножек BOOT[0:3]
Вы тут разный скарб покупаете регулярно, где берете? Я вот себе хочу МАЛИНКУ прикупить, дома серверок поставить для личных нужд. Сначала хотел пойти на АМПЕРКУ и купить за семь тысяч коробку с МАЛИНКОЙ и другой поебенью, но мне кажется, что руснявые наебывают с ценой. У них коробочек аж восемь сотен стоит, сука. А на Али сходил прицениться - там цены будто случайно выставляют, абсолютно одинаковые коробки с малиной могут быть и за две с половиной, и за четыре. Что посоветуете? Если кто-то брал МАЛИНКУ на Али и может посоветовать, я буду только рад.
https://ru.aliexpress.com/store/908915?spm=2114.12010608.0.0.Q5HAV4
У этого заказывал всё. Всё натуральное
Прости, у меня глаза разбегаются. Что заказывал? У него есть набор, чтобы собрать и сразу поставить? Ну, сама МАЛИНКА, БП, карта памяти, кажется.
>>262446 Малинки настоящие, бп и карты памяти китайские.
>>262447 Бери голую малинку, с качестве БП сгодится фирменный телефонный зарядник на 2А, карту samsung evo+ лучше купить в рознице.
>>262457 Посылки дороже 5$ как правило китайцы шлют с треком/отслеживанием их доставляют до отделения, а домой тебе приносят извещение. Посылки без трека кидают прямо в ящик.
Никакую. Хватит симулятора в IDE. В симуляторе только периферия обычно не соответствует реальности.
А изучение ассемблера и изучение работы с периферией это не одно и то же.
Мне ядро изучать надо Linux. Надо конпелировать ядро, чтобы ставить свое оптимальное ядро на платы. С какой платы лутше начинать? Распбери пай на китае заказал уже, зря наверное
Cubemx есть, как его компилить через make?
отсюда www.nanopi.org ?
или отсюда nanopi.io ?
Как у них с доставкой в Пахомию?
На гербесте NanoPi-NEO-Air только с 256М и стоит 1000р
Если у тебя JTAG, то не должно быть проблем найти почему не грузится, а так тоже интересно как оно там всё собирается у людей, может скоро пригодится.
Алсо, в u-boot'e же дохрена всего, можно-ли как-то поднять своё приложение поверх него? Типо использовать его либы и интерфейсы?
Есть опыт.
Кристалл - SoC? FPGA+ARM? Что за плата? Какой проц? SPL в ддр лежит? Уточняй параметры.
Навскидку советую проверить в s_init: включается ли ддрка. Смотри config.h. для твоей платы environment - че там в параметрах накрутил.
Я обычно собираю убут в config_minimal и вручную инициализирую интерфейсы.
> Алсо, в u-boot'e же дохрена всего, можно-ли как-то поднять своё приложение поверх него? Типо использовать его либы и интерфейсы?
Можно. Команда source <addr>. Но зачем? 99% Задач убута - врубить периферию и выполнить bootm для загрузки линукса или что у тебя там. Городить там что-то свое никому нахер не нужно.
> Если у тебя JTAG, то не должно быть проблем найти почему не грузится
Действительно, никаких проблем, если бы не -Os
TI эмбед-инженегр в треде. С AlteraIntel фпга тоже немножно работал.
> Действительно, никаких проблем, если бы не -Os
Я уже и с -Оs придрочился отлаживать. Да, половины переменных не видно, да шагает хуй пойми как, выбора не было, только боль и страдания.
> Можно. Команда source <addr>. Но зачем? 99% Задач убута - врубить периферию и выполнить bootm для загрузки линукса или что у тебя там. Городить там что-то свое никому нахер не нужно.
За тем, когда линукс избыточен, а в у-буте уже достаточно всего. И не через команду, а на этапе кококомпиляции прилепить к нему своё приложение.
Раскидай за камни олвинер, распери или вообще хуй86. Хочу потеребить кортексы, но смущает очень малая информация о том, как писать модули ядра на линукс и вообще поддержка от производителей.
> За тем, когда линукс избыточен, а в у-буте уже достаточно всего. И не через команду, а на этапе кококомпиляции прилепить к нему своё приложение.
Насчет прилепить хз, но никто не мешает разместить отдельно скомпиленный код в nand/загрузить по тфтп и дать команду go <addr>. Насчет source напутал - эта скрипт выполняет. А go - выполняет код. Если от убута нужно только включить периферию, то в конце s_init() функции пихай свой код и не еби голову. Но имхо, это пиздец, какое извращение. Лучше из убута надергать код, где выставляются регистры девайсов в свое приложение.
http://www.denx.de/wiki/view/DULG/UBootStandalone - тут про загрузку отдельных приложений.
Что за камень хоть? И что плата делает?
>>264543
> смущает очень малая информация о том, как писать модули ядра на линукс и вообще поддержка от производителей.
Написание модулей аналогично написанию на десктоп: пишешь, добавляешь printk, компилишь, делаешь insmod и крашишь систему смотришь, что в dmesg свалилось. Если производитель уже написал тебе API для работы с нужными девайсами (они в arch/arm/mach-<имя твоей платформы>), то заебца. Если нет, то берешь даташит на проц и в модуле сам инициализируешь значения регистров.
По камням: Пох на камень, важна архитектура и обвес SoC. Смотри arm a8/a10: cubieboard с олвином, raspberry с бцм - твой выбор. Жирный обвес = один раз купишь и на 10 лет наиграться хватит: и диодами поморгаешь, и линукс накатишь, и со звуком поиграешься, и вообще в космос слетаешь.
Я накатил юбут, спасибо за ответ. Сейчас возникла другая проблема - юбктовская функция get_ram_size() получает только 32мб вместо 256. Кристалл - atmel at91sam9x25 (серия МК at91 на ядре arm926ejs). Оперативка - micron mt48lc16m16 (sdr, это как ddr, только single, 0:12 row, 0:9 column).
Проблема вот в чем: при записи в 0 адрес ram (не считая смещения 0x20000000 микроконтроллера), инфа записывается и в 0 ячейку и одновременно в 0x08000000 адрес , аккурат в 32х мегабайтное смещение. Да, инфа валидная, записывал через жтаг, проблема повторяется со всеми адресами подряд... Видно, будто ножки спаялись вместе, но на рентгене все было нормально, а прозвонить не получится, tp нет и корпуса с выводами вниз.
Тайминги настраивал и всячески крутил, в т.ч. понижая и повышая, в целом уменьшал скорость работы sdr, переписывал и четко следовал даташиту по инициализации контроллера оперативки, но все равно определяет неверно. В чем может быть проблема, я непонимат
> четко следовал даташиту по инициализации контроллера оперативки
Скорее всего что-то упустил, потому что похоже, что в контроллере неправильно указаны размер шины адреса/конфигурация и количество банков именно для твоей микрухи памяти. У меня давно была такая фигня, правда на другом процессоре. Тоже сначала думал, что ноги спаялись, оказалось, что один бит в конфигурационном регистре недоглядел
Боюсь, что все верно, потому что сам на это грешил. Перепроверил раз 10, на всякий случай выставлял неверные значения. Более того, атмел статью выпускал с конфигурацией той же памяти (столько же банков, та же модель, только тайминги чуть ниже) с мк моего семейства at91. Не помогло.
Я грешил на гонку на линии (автор схемы мог выровнять их), но вроде как сильно увеличенные тайминги должны были решить длину.. Да и до этого адреса оперативка работает.
> Я грешил на гонку на линии (автор схемы мог выровнять их), но вроде как сильно увеличенные тайминги должны были решить длину.. Да и до этого адреса оперативка работает.
Та не, если бы это были гонки, то память бы просто работала хреново, а так у тебя она же нормально работает, это явно что-то в адресе. Проверь по схеме, правильно ли шина адреса подключена и шина выбора банка
Посмотрю тогда 9го. А вообще, вот неплохая статья http://processors.wiki.ti.com/index.php/Common_DDR_Issues
Алсо, сколько ты получаешь денег? :3
> Алсо, сколько ты получаешь денег? :3
Когда разбирался с адресацией sdram, а это было примерно в 2009, получал примерно 8к, лол. Сейчас, после налогов, 90
> micron mt48lc16m16
> получает только 32мб вместо 256
Чувак, я вспомнил, память у них считается в битах, а не в байтах. То есть там 256 мегабит, что как раз равно 32 мбайт. Посмотри датащит на память, там написано в начале
> The 256Mb SDRAM is a high-speed CMOS, dynamic random-access memory containing 268,435,456 bits.
И конфигурация 16m16 как раз означает 16 миллионов 16-битных слов. Так что всё нормально
>Проблема вот в чем: при записи в 0 адрес ram (не считая смещения 0x20000000 микроконтроллера), инфа записывается и в 0 ячейку и одновременно в 0x08000000 адрес
Повторение значений очень похоже на то, что в конфиге убута ты неверно указал размер памяти, подключенной к chip select-у. Насчет 32 МБ, а не 256 уже сказали. Попробуй в качестве эксперимента указать 16 МБ в DDRSDRC. Проверяй NR ака row bits.
> Я грешил на гонку на линии (автор схемы мог выровнять их), но вроде как сильно увеличенные тайминги должны были решить длину.. Да и до этого адреса оперативка работает.
Гонки на линиях вроде только в ддр3 начинаются ибо частоты на порядок выше, не? Их легко избежать, снизив частоту до минимально поддерживаемой чипом. Снижай клок с контроллера до минимального.
Собираюсь обмазаться RTOS, так получилось, что первый кандидат у меня RTX-Kernel от Keil (задача допилить старый проект), поэтому хочу прояснить для себя: RTX-Kernel был под MDK-ARM v4, а под MDK-ARM v5 сейчас что-то новое? Есть ли смысл разбираться со старым или лучше сразу начать новый?
Насколько я знаю, нет такого. Есть только Performance Analyzer и Execution Profiler. Вркатце - меряют время выполнения инструкций и количество вызовов.
http://www.keil.com/support/man/docs/uv4/uv4_db_dbg_perfanalyzer.htm
http://www.keil.com/support/man/docs/uv4/uv4_db_dbg_execprofiler.htm
Не могу врубиться, можно ли сделать на attiny85 (digispark), с помощью V-USB, USB to Serial преобразователь? Нужен софтварный Serial, туда просто ретранслировать данные с USB, только вот с реализацией не могу разобраться...
У бля, на оппике же. Сорян.
Вот еще сам себе отвечу SAMA5D3 Xplained
https://www.terraelectronica.ru/catalog_info.php?CODE=1333939
И цена не сверхъестественная. И поддержка CMSIS есть.
Антон, моргающий диодами на еду. Подскажи, реально ли мимохую вкатится в сферу?
Давно занимаюсь на уровне мелкого любительства, очень люблю это. Хочу полностью уйти в это, но я не гений и боюсь без профильного буду послан на хуй. С чего мне правильно будет начать? Какие знания и на каком уровне НЕОБХОДИМЫ, а какие желательны?
>очень люблю это
Значит всё получится
>но я не гений и боюсь без профильного буду послан на хуй
Это тебе не теоретическая физика. Задачи в принципе на уровне ПТУ, никаких многоэтажных дифуров и прочей хуйни, нормально в-общем, это лишь ремесло
>С чего мне правильно будет начать? Какие знания и на каком уровне НЕОБХОДИМЫ, а какие желательны?
Да везде по-разному кончено. Но С конечно же знать необходимо. Ну и архитектуру, примерно как работает вся эта хуета, даже не знаю, чего добавить. Бери короче и пиши что-нибудь, по ходу наберешься опыта и знаний. Лучше всего танцевать от задачи, а не от теории
Ты может не правильно меня понял, анон, в перечисленное тобой я уже умею, в той или иной степени. Меня интересует как вкатится в профессиональную область. Что потребуется там? Какие знания требуются, что бы устроится мартышкой на подсосе? Где искать такие фирмы?
>Какие знания требуются, что бы устроится мартышкой на подсосе?
Ну я нашёл НИИ рядом со своим универом, пришёл студентом и сказал, возьмите меня, правда я низуя не умею. Там уже набирался опыта за еду, ребят спрашивал, что да как, потом перекатился в нормальную контору
По подробней перекат не опишешь? Что хотели? Что спрашивали? Всем ли устраивал? Были ли трудности?
Тебе самому макака бесплатная не нужна? доплачу еще, лол
>Что хотели?
Да ничего не хотели. Вообще были немного удивлены, что я сам пришёл (я на 5 курсе был). Я просто прошарил, что рядом есть контора, которая занимается тем, что мне интересно и пришёл.
>Что спрашивали?
Была у них стандартная методичка с вопросами. В основном по интерфейсам, сетям, FPGA, процессорам. Я наверное ответил на пару вопросов из 20. Но сказал, что сильно хочу вкатиться, и мне поверили
> Всем ли устраивал?
Ну формально ничем не устраивал, лол
> Были ли трудности?
Было пиздец сколько много новой информации. Было трудно читать всё на английском, лазия в словарь за каждым словом из документации, а там сотни страниц. Просто голова пухла от этого всего. Пару месяцев ходил как зомби блять. Но с другой стороны, я вообще не тогда знал ничего
Вообще, в таких государственных совковоподобных НИИ за работу почти нихуя не спрашивают. Там в основном функция у работника - майнить человеко-часы, чтобы побольше бабла можно было распилить под определённый проект. Бывали случаи, когда крупные конторы толпами набирали студентов под распильный проект. Зарплата соответствующая. У меня было что-то вроде 4к на полставки, но это было давно, и вместе с повышенной стипендией хватало на пожрат. Но есть плюс в том, что у них дохуя аппаратуры, даже довольно современной, и людей, которые что-то шарят (процентов 30% от всего персонала, остальные - пиздец никакие), у которых можно что-то спросить.
Но сейчас я вижу самый лучший вариант старта - устроится интерном в какую-нибудь западную, ну или нашу понтовую и коммерчески успешную контору. Но это трудно. Зато очень хороший старт
>Тебе самому макака бесплатная не нужна?
Нет, нам нужны теперь хорошие специалисты на высокую зарплату
Я про перекат в нормальную контору =). Про НИИ так и думал.
>Нет, нам нужны теперь хорошие специалисты на высокую зарплату
В контексте выше смотрится особенно весело.
ПС Изучение ПЛИС это "не плохой бонус", "желательно" или "обязательно"?
В любом случае спасибо, за разъяснения.
>Я про перекат в нормальную контору =). Про НИИ так и думал.
Я там пару лет позадрачивал, набрался опыта немного, разобрался что к чему, а потом - в нормальную. Увидел объявление в интернете, там были требования, в которых я уже после НИИ хоть что-то понимал. Написал, договорились на собеседование. Пообщались, позадавали мне всякие вопросы про архитектуру процессора, про ядро, кэши, ДМА, память, оптимизацию. По языку Си вроде даже не задрачивали, по крайней мере ебанутых вопросов в стиле "разбери, что делает этот говнокод" не было. Что-то ответил, что-то не ответил. Но даже про то, что не знал, пытался логически рассуждать и на ходу догадаться до правильного ответа. Это, кстати, было высоко оценено и понравилось будущим коллегам. Ну немного про системы контроля версий, которыми в НИИ естественно никто не пользовался, лол. Еще, могу ли я хоть что-то понять на английском, а я уже тогда довольно бегло читал техническую документацию, но это даже не проверяли. Ну потом перезвонили, озвучили сумму и условия, и я согласился (еще бы)
>В контексте выше смотрится особенно весело.
В сегодняшнюю нормальную, не в НИИ, как ты уже понял
>ПС Изучение ПЛИС это "не плохой бонус", "желательно" или "обязательно"?
Ну если будешь писать прошивки для ПЛИС, то обязательно, лол. Вообще, плисоводов традиционно мало требуется
>Ну если будешь писать прошивки для ПЛИС, то обязательно, лол
Ну, я думал, что все хотят что бы и жнец и швец и на херу сидец.
>Пообщались, позадавали мне всякие вопросы
Бумаги о образовании? Вообще насколько с этим строго и насколько обращают внимание? Если не по себе, то м.б. коллеги есть без бумаг о профильном, а то и вообще вышки.
>Ну, я думал, что все хотят что бы и жнец и швец и на херу сидец.
Не, успешные конторы потому и успешные, что в них есть разделение труда. Мне, например, никогда не приходилось лезть в ПЛИС или в верилог. В свою очередь, плисоводы никогда не лазят в мой код, и это прекрасно
>Бумаги о образовании? Вообще насколько с этим строго и насколько обращают внимание?
Вообще походу всем насрать. Нужны были только в отделе кадров, такие правила российского законодательства. Короче, в мой диплом никто и не заглянул, просто сняли копию и засунули в папку с документами в отделе кадров
> Если не по себе, то м.б. коллеги есть без бумаг о профильном
Не знаю, что ты подразумеваешь под "профильным образованием". Есть у нас всякие. Ну вроде инженеров-строителей по образованию или там инженеров-нефтяников нет. Кончено, диплом магистра в computer science даёт преимущество, но скорее только в знаниях, и не является обязательным
> а то и вообще вышки
Да вроде все с вышкой, я особо не интересовался
Спасибо за твои вопросы.
После таких постов чувствую себя на днище.
Сам себе и плисовод и быдлокодер и схемотехник и на пеку обслуживающий код ебашу. И всё это за 18к в мухосрани.
Одно отрадно: ни кто не подгоняет. Если лень одолела - могу и нулевую поскролить и хуи попинать.
Ну ты надеюсь этим не долго планируешь заниматься?
Есть одна йоба, с которой нужно оцифровать до десятков миллионов
отсчетов без потерь с частотой выборки около 1мгц, после чего их неспешно слить по любому удобному протоколу на пекарню для дальнейшей обработки.
Возможно ли реализовать подобное малой кровью (с точки зрения железа, не влезая в разводку и производство кастомых плат с bga, трассировку дифпар и тому подобного), например, на paspberry pi или подобной девборде? Или только хардкор с топовыми армами или на плисах?
>десятков миллионов отсчетов 1МГц
это ~мбайт данный в секунду
в твоем случае только АЦП+ПЛИС+FRAM+ARM для управления и выкачивания данных из памяти.
FRAM таких объемов если и существует, то слишком дорогая.
Хватит микроконтроллера с SDRAM.
Возьми STM32F429 Discovery или перерисуй оттуда проверенную схему. Вот только не понятно, будет ли нормально DMA складывать отсчеты во внешнюю память.
Возможно окажется проще передавать напрямую, смотри как сделано в airspy mini.
> Есть одна йоба, с которой нужно оцифровать до десятков миллионов
> отсчетов без потерь с частотой выборки около 1мгц,
Пфф, я такое на stm32f4discovery с сетевой платой делал. У меня еще и стек tcp/ip одновременно работал, и передавал я всё это по сети на комп. Делал двойную буфферизацию через ДМА и передавал примерно по 500 16-битных отсчетов за раз. Ничего, естественно, не терялось
>>268129
> в твоем случае только АЦП+ПЛИС+FRAM+ARM
Сразу видно попильщика из совкоподобного НИИ. И 5 человеко-лет на это всё, да? Чтобы если пилить так миллионами
>Ничего, естественно, не терялось
Что ж, спасибо, буду смотреть сюда, если не пошлю всех нахуй.
>Сразу видно попильщика из совкоподобного НИИ.
Лол, ты угадал. Предлагают пилить на девборде на fpga c pci-e, и писать данные без буферов непосредственно в память пекарни. Подумалось, что если не пиздят что такое вообще возможно, то может и распберри пи потянет. я ноль в цифре, но предложение запилить 32-битную параллельную шину с гальванической развязкой кажется маразмом, проще же взять какой-нибудь уже развязанный эзернет или сделать на уарте.
Все же проще взять discovery с SDRAM и передавать по UART. С tcp/ip без опыта можно долго ковыряться, а UART заработает сразу.
Когда заработает вариант с UART, можно будет что-то посложнее сделать.
> С tcp/ip без опыта можно долго ковыряться
Кстати да. Я использовал связку lwip + freertos, которую предлагали ST в своём CubeMX. Так вот, там нашлось несколько багов в драйвере ethernet, в связке lwip и freertos выделялась память не размера структуры, а размера указателя на структуру, то есть всегда 4 байта, лол, а еще не было полноценного драйвера для ацп с двойной буфферизацией, пришлось немного самому писать. Не знаю, как сейчас, но тогда пришлось подебажить и покодить
У меня вопросы. Нужно ли что-то делать для конфигурирования пина в качестве альт.функции TIM2_CH1? В даташите написано "floating input", который по идее стоит с ресета и так. Значит его можно использовать одновременно и как обычный импут и как capture? Пишется ли что-нибудь в GPIOx_IDR если использую альтернативную функцию и флоатинг инпут?
Нет, я вроде переключал именно на функцию входа таймера. Сам подумой, у него внутри же мультиплексор подключен, который к нужной переферии его подключает
Может есть эмуляция какая программная, типа как для ПЛИС?
Как нормально подключить CMSIS в iar? Гайды из гугла какие-то ебанутые, мол накидайте миллиард файлов всяких разных в папку с проектом, ну я накидал их и ничего не работает. Что делать?
Я делал по этому гайду и вроде бы заработало как надо, но когда я захотел свой проект создать у меня нихуя не получается, хотя я пытаюсь так же все эти 100500 файлов в проект запихнуть
void main() {
RCC->APB2ENR |= (1<<11 | 1<<3 | 1<<2 | 1<<0);
RCC->APB1ENR |= (1<<2 | 1<<1 | 1<<0);
GPIOA->CRL |= (1<<3 | 1<<1 | 1<<0);
GPIOA->CRL &= ~(1<<2);
TIM2->CR1 |= (1<<7);
TIM2->CCMR1 |=(1<<6 | 1<<5);
TIM2->CCR1 = 2;
TIM2->PSC = 1;
TIM2->ARR = 3;
TIM2->EGR |= (1<<0);
TIM2->CR1 |= (1<<0);
while(1) {
}
}
все регистры 100 раз перепроверил, должно работать, но нихуя нет
вначале #include "stm32f10x.h" есть
блять нашел ошибку.
нужно еще TIM2->CCER |= 1;
сука, почему все так сложно, у меня понос начался от такого количества регисторв
Ну попробуй и так и так, чего там, пару бит переключить, можно даже не выходя из дебаггера
> Может есть эмуляция какая программная, типа как для ПЛИС?
У тебя же есть уже юнит тесты, не совсем понял, что ты собираешься эмулировать? Не знаю, поможет ли, но посмотри googletest - универсальный фреймворк для тестирования
А так, ну натрави ты дженкинс на свой репозиторий, пусть кажлый час проверяет новые коммиты, и если они есть, то пусть билдит и запускает, а потом отчет присылает тебе по емаил или даже складывает в базу данных. Очень удобно, можно баги писать не думая, все равно потом быстро узнаешь, что не так. Тем более, дженкинс - очень гибкая вещь, можно как угодно настроить. Сделать отдельные задачи на билд, бенчмарки, юнит-тесты, строить зависимости между задачами, использовать результаты одной задачи как вход для другой
> выделить экспериментальный образец устройства и подключить к девелоп-серверу; но всё равно какой-то пиздец.
Ну да, всё так, никакого пиздеца, а наоборот, очень удобно, особенно когда много народу работает над проектом
> в виде текстового отчёта по уарту
Чем тебе уарт не угодил? Вполне неплохой вариант. Главное руками ничего не запукать - только автоматизация
На сайтике для мк нет примеров и либ?
if (TIM1->ARR == 9999) {
GPIOB->BSRR |= (1<<1);
}
if (TIM1->CNT > 11000) {
GPIOB->BSRR |= (1<<0);
}
И зажглись ОБА выхода. Как такое может быть? Насколько я понимаю счетчик тупо не может выйти за пределы ARR, но он каким-то образом вышел. Что за хуйня?
И прескалер почему-то не вбивается. Точнее вбивается, но не работает. 1000 импульсов дают 13-микросекундный импульс и при TIM1->PSC=71; и при 710 и вообще любом.
Честно говоря, выглядит как ёбаный стыд. Например, SD-слот есть, а SDIO-периферии нет.
Вообще странный подход. Единственный плюс древнего говна STM32F103 -- низкая стоимость. Зачем его обвешивать такой еболой? Чисто "для обучения"? Ну так имхо взял бы лучше пикрелейтед за полторыевры копейки.
Я не очень умный.
Все хвастаются отладочными платами, один я всегда бегаю с макеткой, из которой торчат все мои провода.
Плюс взял его бу
>что ты собираешься эмулировать
Cortex-Mх ядро же. Одно дело юнит-тесты проходят скомпиленные моим gcc для моего core-i7 и в принципе несколько другое дело - arm-none-eabi-gcc и stm32fхх, например. Например, если где-то по недосмотру использовался int вместо более строгого int32_t.
>пусть кажлый час ... билдит и запускает
Ну так-то можно, но ведь же количество перепрограммирований флеш-памяти ограничено :3
>Чем тебе уарт не угодил?
Ну хотя бы тем, что в очередном проекте свободного уарта в устройстве может и не найтись. Я вот и подумал, что раз уж всё равно SW-интерфейс всегда задействован хотя бы для прошивки, может по нему же и тест-репорты выкачивать, это наверняка делается, надо копаться в gdb или openocd, но на то и тред, чтоб спросить, может найдётся кто сразу в нужном направлении пнёт, может уже готовые есть примеры, статьи или даже утилиты.
>всё так, никакого пиздеца
Ладно, спасибо за доброе слово, пока пусть остаётся уарт с автосборкой на коммит в develop и/или master.
А, лол, да.
> Cortex-Mх ядро же
Вроде qemu умеет, но я не запускал
> Ну хотя бы тем, что в очередном проекте свободного уарта в устройстве может и не найтись
Так, подожжи. Если у тебя может не найтись свободного порта, то это предполагает, что твоё устройство активно связывается с внешним миром. Поэтому, если работу ядра процессора еще можно эмулировать, то эмуляция ядра + периферия + внешние события - это даже чисто теоретический ад. Там только проект эмулятора сложнее самого устройства будет
> Ну так-то можно, но ведь же количество перепрограммирований флеш-памяти ограничено :3
У тебя код всегда напрямую с флеша исполняется? Может там есть instruction ram, откуда исполняется код? Тогда отладчиком можно прогрузить только его
> всё равно SW-интерфейс всегда задействован хотя бы для прошивки, может по нему же и тест-репорты выкачивать, это наверняка делается
Я делал такое в keil, там что-то просто сильно было
Глянь вот это
https://mcuoneclipse.com/2016/10/17/tutorial-using-single-wire-output-swo-with-arm-cortex-m-and-eclipse/amp/
Правда тут только про jlink, но смысл описан понятно
Поясните, возможно ли вообще переслать аудио-файл с ПК на СД-карту контроллера? В гугле все только запись текста тестируют. Ещё один раз про картинку попалось, но там она тоже не готовая была, а на ходу создавалась.
И ещё, мне в примерах часто попадается запись в регистры в шестнадцатеричном формате и я практически никогда не могу разгадать, что там за херня происходит. Сам пишу через структуры либо биты двигаю.
Вот, например:
PORTD->ANALOG &= 0xFF93;
У меня есть генератор кода под мой контроллер, и я знаю, каким именно портам какая функция отводится, но когда я выбираю то же самое в генераторе, мне выдает совсем другие цифры. В общем, я вообще не представляю как эту шестнадцатеричную лабуду расхлёбывать.
>Арманы, есть среди вас адепты test-driven-development? Как автомати
Как ты вкатывался в ТДД? Как вообще в ымбыдеде юнит-тесты организовать? Есть ли примеры опенсурсных проектов, покрытых тестами?
С чего начать? AVR 8-бит и MSP430 знаю, а вот к ARM никак не могу подступиться.
>AVR 8-бит и MSP430 знаю, а вот к ARM никак не могу подступиться.
Берёшь и ПРОСТО пишешь код. Какая нахуй разница, какая архитектура. Ты же на ассемблере пишешь.
>Берёшь и ПРОСТО пишешь код
Это подходит, когда знаешь ЧТО ты хочешь сделать. А как придумывать свои устройства?
Тут просто нужна сноровка и привычка, которые придут быстро и безболезненно, но только при способности внимательно читать (доки, примеры) и аккуратно писать.
А то знаю одного весьма опытного на 8-битных атмегах и способного иликтронщика, который неделю ебался с I2C, обмазавшись осциллографом и стандартом интерфейса, но в итоге оказалось, конечно, что просто невнимательно прочитал пару страниц из референц мануала.
А давайте поморгаем светиком с разжёвыванием каждой строчки инициализации и рассказом о возможных вариантах, а?
там нихуя сложного
так-то сейчас 21й век.
для AVR есть отличная Atmel Studio
для MSP430 зачётный Code Composer Studio
а для arm какие-то глючные костыли, а не нормальные IDE
Я выбрал настройку eclipse по гайдам из интернета.
IDE для быдура. Выше анончик правильно сказал, обмазываешься консольными прыщами и конфигами и кококо под себя.
> Вкатывальщик в треде. Аноны, подскажите с какой платы лучше начать еблю с микроконтроллерами, то на али слишком большой выбор(f0-f4, l серия, или там разница только в размере памяти и частоте?). Кстати, что делать, после того как научился моргать светодиодом? Есть какие-нибудь полезные учебные проекты(как на ардуино умный дом, или метеостанция)? Решил заняться, тк интересна архитектура процессоров, до этого долго ебался с асмом и писал разные эмуляторы. Или для изучения архитектуры процессоров лучше выбрать другой путь, а не ебаться с железками? Алсо, подскажите годных книг по архитектуре(таненбаума уже пролистал)
нуклео бери.
http://amperka.ru/product/stm32-nucleo-f401re
Такую, например? Что сразу к ней можно докупить, чтобы можно было не только светодиодами моргать
Протошилд ардуиновский для начала. А лучше полноценную макетку с дырками под пайку и пару катушек монтажного провода. Для конца и далее - тестолит, лазерный принтер, глянцевая фотобумага, ламинатор (желателен), дремель или самопальный сверлильник с цанговым патроном под микросверла.
>>276001
Стоит почти как stm32f4discovery, но в отличие от discovery это совсем уж пустая плата.
>>275999
>Или для изучения архитектуры процессоров лучше выбрать другой путь, а не ебаться с железками? Алсо, подскажите годных книг по архитектуре(таненбаума уже пролистал)
Не знаю что ты понимаешь под архитектурой. Если хочешь понять что там внутри процессора, то учиться программировать микроконтроллеры бесполезно.
Лучший способ понять как работают процессоры - это сделать процессор в симуляторе самостоятельно. Для погромистов есть даже игрушка nand2tetris с убогим HDL-языком.
изучай ЭЛЬБРУС, очень перспективно, с руками оторвут и у нас и в силиконовой долине!
>для изучения архитектуры процессоров лучше выбрать другой путь, а не ебаться с железками?
this
Про архитектуру с этими метеостанциями хуй чего узнаешь, сишечка она везде сишечка.
Я бы порекомендовал копать в сторону FPGA+softcore, типа бомжоальтера с ебэя и Nios II (есть даже бесплатно же оффициально). Захуярь туда своих инструкций, добавь каких-нибудь шин, поэкспериментируй. Потом запили свою архитектуру уровня /ra/. Прикрути для неё бэк-енд к gcc. Вот ты и вкатился, велкам.
Спасибо за совет.
>Вот ты и вкатился, велкам.
Этого будет достаточно, чтобы устроиться в условный интел/амуде на джун/мидл позицию?
Выше >>276015 я написал почти то же самое что и >>276048
Без знаний основ цифровой электроники за FPGA браться не стоит. Нужно хотя бы знать что такое триггеры, комбинационные и последовательностные устройства, иметь представления как там суммируются задержки. А этих знаний у тебя, судя по этому вопросу, нет.
>типа бомжоальтера с ебэя и Nios II
Nios я бы не советовал, поскольку его внутренности практически не видны. Да и разбираться придется больше с тем на какие кнопки в IDE нажимать, чтобы оно заработало.
>Потом запили свою архитектуру уровня /ra/.
С этого стоит начать, разумеется после изучения основ цифровой электроники и верилога. Написать на верилоге простенький процессор можно за день. Плату с ПЛИС покупать не обязательно, все это симулируется.
>Прикрути для неё бэк-енд к gcc.
По моему это совсем сложно, для меня так вовсе наверное не реально. Максимум можно какой-нибудь лисп или форт для самодельного процессора сделать.
>>276078
>Этого будет достаточно, чтобы устроиться в условный интел/амуде на джун/мидл позицию?
Смотри требования по вакансиям. Как минимум еще необходимо владеть методами верификации.
> Nios я бы не советовал, поскольку его внутренности практически не видны. Да и разбираться придется больше с тем на какие кнопки в IDE нажимать, чтобы оно заработало.
Что тумаешь по поводу openrisc и симулировать его на verilator? Вообще можно тогда ничего не покупать
>Без знаний основ цифровой электроники за FPGA браться не стоит
Ну я читал книги по компьютерной архитектуре, там эти вещи описывались, плюс немного схемотехники и булевской алгебры знаю. Думаю, за некоторое время смогу осилить. Энивей, идея написать свою архитектуру под проц звучит очень уж заманчиво.
>Nios я бы не советовал, поскольку его внутренности практически не видны
Почему это плохо? Я же не собираюсь туда паяльником лезть
>С этого стоит начать, разумеется после изучения основ цифровой электроники и верилога
Есть какая-нибудь классика по этой теме?
>Плату с ПЛИС покупать не обязательно, все это симулируется.
Симуляция офк круто, но когда перед тобой реальная железка, то на душе как-то поприятнее
>По моему это совсем сложно
Ну для llvm это точно возможно сделать за разумное время
>методами верификации
Можно поподробнее плз
Алсо, спасибо за ответ
>openrisc
Это не то с чего следует начинать, если хочешь разобраться с основами. На гитхабе хватает намного более простых процессоров.
Простой синтезируемый процессор на верилоге - это не более 150-300 строк.
>verilator
Не пользовался, но для него даже нормального GUI нет, наверное и с остальным не лучше. Стоит взять modelsim, можно даже бесплатно из quartus webpack.
Но ПЛИС - это не набор совсем уж простейших вентилей, это скорее набор небольших 3-5 входовых ОЗУ и триггеров, с добавлением блоков двухпортовых ОЗУ побольше. Ты можешь на верилоге описать трехпортовые ОЗУ, но поскольку таких блоков в ПЛИС нет, то они будут синтезироваться из триггеров и займут много ресурсов.
В любом случае, пока не изучишь основы цифровой электроники, браться за FPGA нет смысла.
> Не пользовался, но для него даже нормального GUI нет, наверное и с остальным не лучше
Зря ты так, им пользуется очень много компаний с известными именами, потому что он позволяет получать довольно быстую cycle-accurate модель. Всё потому что он переводит модель с верилога на кресты, а потом это можно откомпилировать и получить экзешник с твоей моделью. А gui ему не за чем, он генерирует времянку, которую потом открываешь gtkwave. Ну и дебажить можно как обычное приложение любым удобным способом
>Смотри требования по вакансиям. Как минимум еще необходимо владеть методами верификации
И еще вот книжка
http://ic.sjtu.edu.cn/ic/dic/wp-content/uploads/sites/10/2013/04/CMOS-VLSI-design.pdf
И вот софтина с мозолями на богомерзкой жабе для того что бы свой "працессар в жилези зопелить":
https://github.com/imr/Electric-VLSI/tree/master/electric
>И вот софтина с мозолями на богомерзкой жабе для того что бы свой "працессар в жилези зопелить":
Кочать здесь:
http://ftp.gnu.org/pub/gnu/electric/
Я 4 дня проебался, что бы прикрутить к Keil 5 отладчик Colink
Алсо, если вставить в плату флешку, то флешка при подключении питания горит, но всё равно сомневаюсь на счёт исправности.
Записываешь образ на флешку, втыкаешь через ethernet в роутер и включаешь. DHCP в роутере должно выдать устройству IP, который можно посмотреть в веб-интерфейсе роутера. Если роутера нет, то скорее всего придется ставить DHCP сервер на компьютер или подключаться через UART.
Все, IP есть и можно подключаться через ssh.
У меня orange pi нет и не было, но могу предположить что светодиод может контролироваться операционной системой и в зависимости от дистрибутива может быть отключен.
>>276610
>Colink
Проблема в этом. Ты бы еще попробовал JTAG из FT2232H сделать.
В lite версии нет езернета.
> но могу предположить что светодиод может контролироваться операционной системой
Ну не знаю, это как-то дико. Тащемта сейчас у меня на флешке дебиан, это первое что под руку попалось, сейчас попробую их дистрибутив взять.
Хотя нет, не попробую, лучше подожду переходник hdmi to vga.
Цепляешься к UART любым адаптером USB-TTL и смотришь на serial console:
http://micro-pi.ru/orange-pi-pinout-pin-definition-gpio/#_Orange_Pi_One_Lite
https://linux-sunxi.org/UART
Алёна Водонаева считает, что все работает нормально.
> без использования таймеров
Почему такое условие? Работать будет как говно при таком подходе в любой реализации, а "калибровать" заебёшься, а для отладки и для релиза будут разные реализации (либо будешь хуярить `__asm("")`), а при смене, скажем, умножения PLL нужно будет всё делать заново.
Всего-то надо один раз аккуратно написать модуль, рабтающий на таймере (можно 16-битном, переполнения отслеживать и "складывать" в старшие 16 бит, это на самом деле самая геморройная часть), который при инициализации вычисляет задержку на вызов `delay()` (скажем, в цикле вызывает 1000 раз `delay(1)`, потом по таймеру определяет фактически прошедшее время, среднюю задержку запоминает и впоследствии для всех вызовов её учитывает). И таким модулем можно будет пользоваться хоть с -O0, хоть с -O2, хоть с HSI, хоть с HSE+PLL, точность выходит обычно в 1-2 такта.
Достаточно просто знать сколько тиков в одной микросекунде.
Использование HAL накладывает какие-то ограничения на изменение и использование Systick?
>Достаточно просто знать сколько тиков в одной микросекунде.
Только если устраивает систематическая ошибка в "плюс" (задержка на вызов функции, возврат из неё, вот это всё).
>Использование HAL накладывает какие-то ограничения на изменение и использование Systick?
Какого HAL? Если ты про STMовский, то да, он сам использует этот SysTick для отслеживания таймаутов операций, более того - с помощью прерываний, т.е. про прецизионность и детерминированность собственного `delay()` можно забыть.
>Какого HAL? Если ты про STMовский, то да, он сам использует этот SysTick для отслеживания таймаутов операций, более того - с помощью прерываний, т.е. про прецизионность и детерминированность собственного `delay()` можно забыть.
Мерсибо. Бредить в этом направлении прекращаю.
Ещё немножко понаркоманю
Вот это будет работать?
void delay_us(uint32_t value)
{
int32_tfv; // future value Systick
uint32_t tmpSysTickVal;
tmpSysTickVal =SysTick->VAL;
fv = tmpSysTickVal - value*TICKS_IN_US;
if(fv < 0)
{
fv = SysTick->LOAD - fv;
}
while (SysTick->VAL >= fv);
}
Посоны, почему периоды моей мигалки разные? В keil5 - 10.5us, а логический анализаторsaleae logic analyzer 24mhz 8ch показывает 15.79us, кто из них пиздит? Алсо, смотрел уарт логическим анализатором - скорость показывает правильно.
Тебе нужно задуматься о том что показывает Keil и что показывает LA.
И значение какого именно параметра твоего микроконтроллера Keil-у неизвестно.
Задумываться о том что именно ты измеряешь, чем, и что именно означает результат этого конкретного измерения этого конкретного параметра этим конкретным прибором - вообще полезно
Вот, тупая задержка:
void Delay(uint32_t d_count){
for (; d_count > 0; d_count--){
__nop();
}
}
Процессор выполняет определенное количество определенных команд, которые в свою очередь выполняются за определенное количество тактов. Даже не знаю что тут должно отличаться ирл от симулятора, частоты-то одинаковые.
>Процессор выполняет определенное количество определенных команд, которые в свою очередь выполняются за определенное количество тактов.
Если у тебя Cortex M0 без пайплайна, то это, хотя и очень грубо, но более-менее верно.
Но дело даже не в этом.
Что по твоему мнению означает слово выполняются?
После того как ты подумаешь и ответишь на этот вопрос, задай себе следующий - в чем разница между значениями слова "команда выполнена для Keil и LA?
В качестве подспорья приведу аналогию - выражение взрыв сверхновой* отличается для самой этой звезды и для наблюдателя, скажем, с Земли?
Нагрузил ты меня. Камень у меня stm32f103c8t6, если что. Объясни на пальцах почему так происходит.
Потому что суперскалярный конвеер который в зависимости от кода либо может одновременно несколько инструкций выполнить или нет.
Спасибо, что-то где-то про такое читал, только ничего не понял, вроде предвангователь следующей инструкции. То есть для точной задержки можно использовать только таймер, как писал анон выше?
Во-первых, случай "переполнения" отработан некорректно: если `fv < 0`, то условие `while(...)` выполнится, скорее всего, сразу же, никакого ожидания не будет, т.к. новое значение `fv` будет вообще больше, чем `LOAD`. Чтобы починить, нужно сделать код совсем нечитаемым говном, из-за 24-битности этого сиськотика.
Во-вторых, есть хренова тьма "накладных" задержек, причём размер большинства из них сильно зависит от конкретного компилятора, концертных его опций, а также контекста вызова функции и, наверное, состояния конвейера:
1) время на вызов функции, если она не заинлайнится (а может местами инлайниться, а местами нет);
2) время на загркузку констант в регистры, типа адреса `SysTick` и `TICKS_IN_US` (может требоваться, а может и нет, если вызовы идут подряд);
3) время на загрузку значения `VAL` (может быть 2 такта, а может быть и 1, если функция заинлайнена и предыдущий вызов тоже `ldr`);
4) реализация блока `if(...)` может быть через бранчи (и тогда будет плавающее количество тактов в зависимости от (не)выполнения условия) или через условное выполнение (как решит конпелятор);
5) значения переменных могут храниться в памяти или в регистрах (как решит конпелятор);
6) ещё, наверное, куча всего, чего я не знаю.
Не говоря уже о том, что вся эта пурга наложится на механизм загрузки инструкций из флеш-памяти, размер соответствующего буфера, конкретная частота (твой стм тянет до 72 МГц, но его флеш-память только 24 МГц).
Короче, для совершенно конкретных условий (компилятор, опции, частота, конкретная программа) ты можешь подобрать пару констант таким образом, чтобы задержка приводила с точностью до нескольких тактов к ожидаемой паузе, в конкретном месте программы. Но стоит изменить что угодно или вызвать функцию из другого места, и результат поплывёт.
>>277811
Согласно документации `nop` не обязан приводить к задержке, якобы ядро может выбрасывать его из конвейера (хотя лично я с таким поведением не сталкивался); эта инструкция нужна для выравнивания кода в памяти.
Во-первых, случай "переполнения" отработан некорректно: если `fv < 0`, то условие `while(...)` выполнится, скорее всего, сразу же, никакого ожидания не будет, т.к. новое значение `fv` будет вообще больше, чем `LOAD`. Чтобы починить, нужно сделать код совсем нечитаемым говном, из-за 24-битности этого сиськотика.
Во-вторых, есть хренова тьма "накладных" задержек, причём размер большинства из них сильно зависит от конкретного компилятора, концертных его опций, а также контекста вызова функции и, наверное, состояния конвейера:
1) время на вызов функции, если она не заинлайнится (а может местами инлайниться, а местами нет);
2) время на загркузку констант в регистры, типа адреса `SysTick` и `TICKS_IN_US` (может требоваться, а может и нет, если вызовы идут подряд);
3) время на загрузку значения `VAL` (может быть 2 такта, а может быть и 1, если функция заинлайнена и предыдущий вызов тоже `ldr`);
4) реализация блока `if(...)` может быть через бранчи (и тогда будет плавающее количество тактов в зависимости от (не)выполнения условия) или через условное выполнение (как решит конпелятор);
5) значения переменных могут храниться в памяти или в регистрах (как решит конпелятор);
6) ещё, наверное, куча всего, чего я не знаю.
Не говоря уже о том, что вся эта пурга наложится на механизм загрузки инструкций из флеш-памяти, размер соответствующего буфера, конкретная частота (твой стм тянет до 72 МГц, но его флеш-память только 24 МГц).
Короче, для совершенно конкретных условий (компилятор, опции, частота, конкретная программа) ты можешь подобрать пару констант таким образом, чтобы задержка приводила с точностью до нескольких тактов к ожидаемой паузе, в конкретном месте программы. Но стоит изменить что угодно или вызвать функцию из другого места, и результат поплывёт.
>>277811
Согласно документации `nop` не обязан приводить к задержке, якобы ядро может выбрасывать его из конвейера (хотя лично я с таким поведением не сталкивался); эта инструкция нужна для выравнивания кода в памяти.
>с точностью до нескольких тактов к ожидаемой паузе
И ты забываешь что изменение логического уровня на одном из выводов МК происходит совсем не мгновенно.
нет ты
Под "подобрать" я имею ввиду добиться , скажем, от кода `set_pin(1); delay(1); set_pin(0);` длительности импульса 1 микросекунда, скажем, по осциллографу, то можешь быть уверен, что вызов функции длится ровно микросекунду, и совершенно не важно, какую задержку дают порты, хоть час, важно лишь что она не зависит от выставляемого уровня.
алсо, реально у stm32f103 задержка крошечная, сопоставимая с минимальной длительностью такта (~14нс).
Тааак, падажжи ёбана, чего-то я хуйню сморозил.
Конечно, от задачи зависит; и если задача - дрыгать ногами с заданными интервалами, то всё так, хотя "истинная" задержка будет хз какой, тут вообще слишком много факторов: режим работы порта, ёмкость нагрузки етц.
Но я вообще изначально не про порты думал, а про что-то типа
t1 = YOBA_TIMER->CNT;
delay_us(1);
t2 = YOBA_TIMER->CNT;
ASSERT(t2 - t1 == SystemCoreClock / 1000000);
Тут, конечно, тоже по-правильному надо учесть задержку на чтение волатильного регистра CNT, но это уже совсем просто.
И вообще, при правильной организации такой задачи не должно возникать, по-моему :3
>"истинная" задержка будет хз какой, тут вообще слишком много факторов: режим работы порта, ёмкость нагрузки
Начинаешь догадываться, похвально.
ждем, когда ты догадаешься, что детали работы портов с программными задержками связаны примерно никак
Ну если ты на Си nop-ами их делаешь, то обычно да, никак.
Но это, мягко говоря, не единственный способ.
nop'ы не предназначены для задержек и могут их производить или нет в зависимости от реализации и/или ситуации, см. instruction cost в доках от ARM.
Вообще, заебал.
Если заморочиться с минимизацией задержек и сделать напрямую, т.е.
GPIOA->BSRR = PIN;
delay(...);
GPIOA->BRR = PIN;
то ситуация будет эквивалентна работе со счётчиком таймера в программном плане на 100% (запись в волатильный регистр - то же, что чтение из него), т.е. калиброванная по таймеру задержка будет корректной и для работы с выводом; а в аппаратном плане - с точностью до таймингов, приведённых в даташите, что для stm32f1xx составляет 5 нс. Ты из-за 5 нс мне тут мозги ебёшь?
У TI если хорошо попросить, отладки бесплатные.
Но насчет Tiva лучше сразу почитать errata и заплакать. Как оно у них не летало, так и не летает. Баг на баге.
Вообще, я её для этого курса заказывать собрался, бо там на её всё завязано.
https://courses.edx.org/courses/course-v1:UTAustinX+UT.6.10x+1T2017/info
Но раз так, то, пожалуй, просто проделаю то же на имеющейся у меня STM32F3 Discovery
Понятно, что код будет другой, ну да и йух с ним.
А хорошо попросить - это наобещать закупку крупной партии для продукта/учебного заведения?
Программка примитивнейшая чтобы тупо зажечь светодиод.
#include "stm8s.h"
int main() {
GPIOB->DDR |= (1<<5);
GPIOB->CR1 |= (1<<5);
GPIOB->CR2 |= (1<<5);
GPIOB->ODR |= (1<<5);
while (1) {
asm("nop");
}
}
Прошиваю ST visual programmer, пишет
< File successfully loaded. File Checksum 0x731B
> Programming PROGRAM MEMORY area...
Cut Version and Revision of device: 1.2
< PROGRAM MEMORY programming completed.
> Verifying PROGRAM MEMORY area...
Cut Version and Revision of device: 1.2
< PROGRAM MEMORY successfully verified.
Но нихуя в итоге не работает, светодиод не зажигается. В чем проблема?
Может тактирование порта включить нужно? Не знаю как в стм8, но в стм32 по умолчанию все модули отключены.
1. В стм8 нельзя вообще нет настройки тактирования порта.
2. Даже если бы было, они все равно по умолчанию все включены с ресета.
Пиздос. А где инит gpio на вывад? Что, тоже с ресета как output сконфигурирован, да?
Светодиод там низким уровнем зажигается вроде бы.
Также для инициализации имеет смысл использовать библиотечные функции.
#define GPIO_LED GPIOB
#define PIN_LED GPIO_PIN_5
GPIO_Init(GPIO_LED, PIN_LED, GPIO_MODE_OUT_PP_LOW_SLOW);
>>278985
Для мигания светодиодами практически все равно какой микроконтроллер.
>Возможность устроить реалтайм.
Поясни, плиз, а то я что-то не уловил почему "реалтайм" на STM32 нельзя устроить.
Что такое "реалтайм" - СРВ?
Да, меньше, но не принципиально.
>Потому что у stm32 пайплайн, кэши и прочая недетерминированность.
А в измеримых величинах это как-то подтверждается?
Ну скажи мне, за сколько тактов или наносекунд исполняется та или иная команда на STM32.
"Обычно" не прокатывает. Точно скажи.
Наш ядерный реактор обычно успевает отдать команду вытащить стержни. В 99% случаев
>I am having trouble understanding the rationale for using an ARM or PIC32 in a hard real-time application. These chips are designed with the goal of reducing average-case execution time at the expense of increased worst-case execution time and increased jitter.
В 1% случаев когда не успевает.
От 0.0000000000000000000000001% случаев принципиально не отличается в данном контексте ничем.
Это не так, если сравнивать самые дешевые микроконтроллеры, то разница будет максимум в 2 раза.
Даже если есть какая-то разница в цене, то что нужно делать, чтобы она была существенной? Серию из нескольких тысяч махараек, в которых кроме микроконтроллера только корпус и пара светодиодов?
>>278995
Многие микроконтроллерные задачи сводятся практически к миганию светодиодами, например часто от микроконтроллера требуется только инициализация каких-то микросхем по I2C и конфигурация FPGA.
>>279015
Но один и тот же объём работ за 1 секунду stm32l выполнит при более низкой частоте, чем stm8l. Так что потребление не аргумент, если только речь не идёт о чём-, что спит 99% времени.
>>279022
Ай ну что за еботня. Вот ты в наносекундах скажи время реакции stm8l на некоторое событие. 16МГц, это значит неопределённость от 0 до 63 нс просто из-за тактовой частоты, что вдвое больше, чем для stm32l.
Далее, в системах реального времени важно гарантированное худшее время, а не детерминированность в принципе. И если реакция на событие сколь-нибудь нетривиальна (ну, там, включая пачку 32-разрядных умножений, скажем), то STM8L среагирует гарантированно и детерминированно -- медленно.
https://www.chipdip.ru/product/stm8s003f3p6tr и https://www.chipdip.ru/product/stm32f030f4p6
Можешь посмотреть то же на https://www.digikey.com или еще где-нибудь.
Даже если в 5 раз дороже, как это может заметно повлиять на стоимость махарайки? Или ты кроме микроконтроллеров никаких микросхем не применяешь?
Специально для этого ti придумала сопроцессор ввода-вывода, pru subsystem. Работает на 200 МГц, нет пайплайна, инструкции за 1 такт, внешние пины воткнуты прямо в регистр ядра
>один и тот же объём работ за 1 секунду stm32l выполнит при более низкой частоте, чем stm8l.
Серьезно? stm32 быстрее сложит два 8-битных числа чем stm8?
>Так что потребление не аргумент, если только речь не идёт о чём-, что спит 99% времени.
Если чему-то важно потребление, оно обычно как раз и спит 99% времени. Кстати, за сколько там просыпается твой STM32?
>гарантированно и детерминированно -- медленно
И что характерно, STM32 с отключенным даже только кэшем (с неотключенным worst case будет еще хуже), сделает это настолько же медленно - только при этом еще и будет больше жрать и дороже стоить, и места больше занимать.
>Серьезно? stm32 быстрее сложит два 8-битных числа чем stm8?
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cihidhaa.html
И да, даже одно сложит быстрее по причине конвеера.
>по причине конвеера
По причине конвеера он сложит быстрее в типичном случае, мы же говорим о worst case.
но если worst case попадает в интревал гарантированного ответа, то не всё ли равно?
> Ай ну что за еботня.
В какой момент земляне все проебали? Как диды умудрялись летать до Луны на контроллерах с ферритовой памятью, а теперь нам подавай стм32 для мигания светодиодом и то он не успевает вовремя?
>>279180
Кажется, я догадался. Ты неверно понимаешь это самое "worst case" и что означает "средняя скорость конвейера".
Это вовсе НЕ среднее значение по времени. Будто работающий контроллер может по некоему пуассоновскому процессу изредка "спотыкаться" - хуй там.
"Среднее" - оно по множеству различных реализаций различных алгоритмов. Можно специально искусственно написать код, который будет постоянно сбрасывать конвейер, но если конкретный код работает за определенное время, то он так всегда и будет работать.
Вероятности, случайность, эти твои 0.000001% "худшего", относятся к случаю, когда ты берешь архитектуру м3 еще до ознакомления с задачей, вот тогда есть небольшая вероятность, что случится худшее и задача окажется медленно решаемой на конвейере.
К детерминизму выполнения заданного кода это не имеет отношения.
Ты так пишешь, будто в STM8 нет конвейера, а в cortex-M3 он особо длинный.
> Для чего "для этого"?
Для кастомной периферии, для жесткого реалтайма
> Чем оно лучше CPLD?
Ну "лучше" - понятие слишком широкое, и им не стоит бросаться в обществе уважающих себя инженеров. Но основные преимущества такие - это один корпус, а не два, и cpld ты не сможешь подключить напрямую к ddr памяти, нужен всё равно какой-то интерфейс к хосту
>cpld ты не сможешь подключить напрямую к ddr памяти, нужен всё равно какой-то интерфейс к хосту
Не вполне понял что ты хотел сказать. Внутри микроконтроллера статическая память. Через FSMC можно подключить SDRAM и CPLD одновременно.
Пиздец ты уже загнался, началось с stm8l для жёсткого реалтайма, потом TI, теперь ещё DDR память, охуеть вообще.
Сначала говорили о другом: >>278985
>Посоны, зачем нужен stm8 при наличии stm32?
>а ddr3, не микроконтроллер, а арм процессор с линуксом
К чему по твоему там обычно подключаются параллельные NAND флешки? Там обычно два интерфейса внешней памяти, к одному из которых можно подключать не DDR память. Конкретно в этих TI с DDR3 >>279152 имеется два интерфейса памяти.
Ну и DDR3 является синхронной динамической памятью, то есть SDRAM.
>>279267
Судя по всему это разные аноны, один любитель TI >>274377 и другой с боязнью конвейеров >>279012
> Сначала говорили о другом
Я мимопроходил и увидел, что идёт обсуждение дрыгания ногами, пайплайна, реалтайма и всего прочего. Передо мной тоже вставали такие задачи, и я перерыл кучу инфомации, перечитал много мануалов, а такие вопросы как задержка между instruction fetch стадии и появлением сигнала на ноге далеко не на первой странице мануала написаны, приходится долго вчитываться. В итоге остановился на техасовской Ситаре, и это довольно универсальное решение, к тому же времени на разработку новой периферии значительно меньше уходит. Может, я кому-то сократил много времени и денег, рассказав о такой штуке
> один любитель TI >>274377
Да, в том треде тоже я писал, я походу один на всей доске про эту систему прошарил
Хочу взять на F413 (f0 и f1 уже заказал с али от lc-tech) .
Есть куча ардуинской обвязки (обменял у коллеги на пиво) - лучше для совместимости брать nucleo? Хотя про диско пишут, что там ардуино-совместимые пины.
Чем-то кроме формфактора с экраном и цвета они отличаются? Есть какие-нибудь неочевидные киллер-фичи?
Уровень в прикладной разработке у меня относительно высокий, а во встроенную/мк только вкатываюсь.
Для них самые годные книги Reference manual и Data sheets, беллетристики особо нет
Вот эта понравилась Valvano J. - Embedded Systems. Real-Time Operating Systems for Arm Cortex M Microcontrolle - 2017
Кто-то должен сделать автопилот для гироскутера. А у местных ни гироскутера нет, ни на смузи не хватает.
Для мака эмулятора лялиха или винды нет?
Я в дриснятке во встроенном лялихе абсолютно все делаю. стм8 только в винде.
>>279464
>Можно программировать микроконтроллеры на маке?
Для мака есть те же самые GCC и eclipse. Поэтому проблемы могут быть только с отладчиком.
>т.к. почти все туториалы под шиндоус
Действия по установке всего этого под линуксом и виндовсом практически не отличаются, могу предположить что для мака все аналогично.
>проблемы могут быть только с отладчиком
OpenOCD должен запуститься без проблем, плагин для эклипса имеется.
У меня вот тулчейн QtCreator+GCC+OpenOCD, выбирал с критерием кроссплатформенности, но по факту ей и не пользуюсь.
http://www.myirtech.com/list.asp?id=563 за $24.80 на i.MX6ULL
Главное - "Linux 4.1.15 (Debian, Yocto, QT)"
> OrangePi IoT
Хм, и что можно на этой хуйнюшке сделать? Там только на Питоне говнокодить можно, или и на С++?
Русскоязычного комьюнити как обычно не сыскать? Хуй с ним, поупражняюсь заодно в англицком.
Русскоязычное коммьюнити очень даже, один из главных пилильщиков Armbian под эти Оранжи наш человек.
Но общаются конечно на английском потому что зачем же и ради чего сокращать размер коммьюнити отсечением от него всех кто русского не знает?
В гугле забанили? Или ты на каком-нибудь 68K based антиквариате сидишь?
http://lmgtfy.com/?q=programming+stm32+on+macintosh
> Orange Pi 2G-IOT
Че за ебала такая? Что за rdamicro, первый раз вообще слышу. На неё хоть линукс есть в сорцах, хотя бы для виду. А драйвера? А закрытые прошивки для модулей gsm и gps? Потому что работать там врядли что-то будет. Что ты вообще с ней делать будешь, там же ни документации, ни аппнотов, ни сорцов? Взял бы лучше за 60 баксов beaglebone, так у тебя бы шикарнейшая поддержка была от ti, всегда рабочий и свежий линукс, куча примеров и проектов. Вот тут реально можно изучать и въезжать в тему на хороших примерах
Нужна была sd карта. Теперь красный светодиод горит но горит только он, зелёный нет. Орандж не работает с медленными картами? У меня микрософт от этих анальных ограничений, скажите что это не так.
Блядь, это я VGA кабель не вткнул в монитор, а оно оказывается работает! Распбиан приветствует меня!
Алсо, на счёт sd карты, это во всех оранджах она обязательна? Я хотел купить орандж с сатой и поставить ОС на внешний HDD.
> Взял бы лучше
Возьму если приспичит.
> А закрытые прошивки для модулей gsm и gps?
ЖПС на ней нет, а ждя ЖСМ, - думаю он выложит попозже. На старые апельсинки на гитхабе хватает всякого.
>Браслет собран на основе чипа Nordic 52832.
>Нордик для легкой разработки сделал готовый режим обновления ПО чипа — DFU.
>Как раз недавно на браслет пришло обновление.
вот линк кому интересно
>В гугл плэй есть приложения от фирмы Нордик, возможно кто то достаточно разбирается что бы порыться в ПО
Table of Contents
Part I: Assembly as a Language
1: Introduction
2: GNU Assembly Syntax
3: Load/Store and Branch Instructions
4: Data Processing and Other Instructions
5: Structured Programming
6: Abstract Data Types
Part II: Performance Mathematics
7: Integer Mathematics
8: Non-Integral Mathematics
9: The ARM Vector Floating Point Coprocessor
10: The ARM NEON Extensions
Part III: Accessing Devices
11: Devices
12: Pulse Modulation
13: Common System Devices
14: Running Without an Operating System
Благо дарю душевно.
У меня была такая ошибка. Пишут, что она появилась в 4.20 версии куба http://www.openstm32.org/forumthread4668.
Так используют ли HAL несмотря на такие баги люди, для которых это работа, а не хобби? Или Вы сами все настраиваете, как в avr (TIMSK = (1<<TOIE1);).
Профессионалы тоже Куб используют.
> Так используют ли HAL несмотря на такие баги люди, для которых это работа, а не хобби?
Как раз таки его и используют. Поэтому еще везде пишут в требованиях "умение разбираться в чужом коде,читать документацию" как раз и для этого тоже. Потому что делать нехуй каждый раз часто используемые куски заново писать. А насчет багов - обычно это можно быстро раздебажить и исправить.
Но для новичка лучше всё самому ручками по мануалу писать. Чтобы понимать, как там что работает. К hal нужно придти, самому понять, зачем он нужен и захотеть его использовать
Обновил Куб до 4.20.1 - да, действительно, этот баг поправили. Я, сцуко, "счастливый" - только STM32 начал изучать и сразу напоролся на баг Куба. Всю башку себе отъебал, пока понял, что Куб гонит.
Вот поэтому нужно начинать учиться без всяких кубов. Чисто свой код использовать
> без всяких кубов.
Да этот стм32 и с кубом меня до трясучки доводит. Эта инициализация всяких шин просто перелом мозга производит.
> да-да! начинать нужно с машинный кодов, никакого ассамблера!
Тоже неплохо денёк поковыряться в опкодах, понять, что это такое, какая у них структура и т. д.
>>281851
Моё имхо, если хочешь прям хорошо разбираться, нужно начинать писать без куба. Долго, муторно писать по мануалу свою инициализацию всей хуйни. Вот когда ты сможешь писать свой рабочий код, но тебе будет впадлу это делать, это значит, что ты созрел до куба, и после этого момента, ты его будешь использовать легко и непринужденно, и сам быстро находить в нём баги.
Если же тебе не охота лезть в дебри, то можешь сразу использовать куб, но будь готов, что он может работать немного не так, как ты предполагаешь, и тебе придется либо самому всё-таки погружаться в специфику железа, либо гуглить по форумам, что да как
У эстма вся периферия похожая. Попробую с стм8 начать на асме. Потом все просто будет.
> Долго, муторно писать по мануалу свою инициализацию всей хуйни.
так и делаю в иаре, только работа с регистрами, только хардкор, никаких стд-либов и периферал-либов.
Решил заняться этой хренью, потому что прочитал, что некоторые инструкции недоступны в сях, операции вроде 64 = 64+32*32 за 1 такт и прочую хрень. естесна, буду делать вставки в сях, ибо весь ниасилю
> асм для М4 почитать?
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0439b/DDI0439B_cortex_m4_r0p0_trm.pdf
Ранон не может в гугол? Может тогда и не нужно мучить себя?
>прочитал, что некоторые инструкции недоступны в сях, операции вроде 64 = 64+32*32 за 1 такт
это где такую хуйню несут? ЯП тут вообще не при чем, дело в конпеляторе, и слабо верится, что что-либо современное не может в такую примитивную инстракшн-левел оптимизацию.
Дрочил несколько раз критичные куски кода на асме, обскакать gcc -O3 так и не удалось. Имхо асм оправдан только когда важно иметь кусок кода, работающий одинаково независимо от компилятора и его опций. Так-то в CMSIS сишные обертки на все инструкции прописаны.
Это я читал, так ни хрена и не понял. Где нормальные описания команд? Где написана структура асм файла? Названия аргументов вроде Rd, Rn, Rm, <op2> мне ни фига не говорят.
Видимо нужно учить основы асма с нуля. Спасибо хоть за мануал по NVIC
>обскакать gcc -O3 так и не удалось.
Я только один раз переписывал на ассемблере кусок кода для cortex-M1, по сравнению с -O3 кейла, был прирост скорости на четверть. Точно не помню, но вроде бы прирост был из-за того что мне удалось распихать все часто используемые переменные в регистры.
Так что такой оптимизацией стоит заниматься только в крайнем случае.
> Где нормальные описания команд?
Они там и есть "нормальные", вплоть до инстракшн-кост, чего тебе не хватает?
>Где написана структура асм файла?
В документации на компилятор жи. Ты чем бинарник собирать и линковать собрался? Вот там и наисано.
>>282688
Чего-то слабо верится, оптимально распихивать переменные по регистрам -- это то, что первым делом умеет любой компилятор, их изначально для того и создавали, задача для компьютера элементарная.
Ну или -О3 у кейла значит что-то другое, например минимизацию размера бинарника.
Хуйню спизданул. s это size, придурок. Тогда уж -Ofast, хотя большого прироста по сравнению с -О3 не даёт
вообще прирост очень редко даёт
>первым делом умеет любой компилятор
Если эта оптимальность зависит от входных данных, то оптимизировать сможет только тот кто знает статистические характеристики этих данных.
>>282750
>>282749
В кейле таких параметров нет, в нем есть только -Otime
И вывод другой: если хочешь скорости, бери другой микроконтроллер, чуда оптимизации не будет.
TIM2->CR1 |= 1;
while ((!(TIM2->SR)) && (k < 1000000)) {
if (!(GPIOA->IDR & btn)) { TIM2->CNT = 0; k++; }
}
Запускается таймер, считающий до 50 мс. В цикле проверяется статус кнопки, если она сбрасывается (происходит дребезг), то таймер обнуляется и увеличивается счетчик. Цикл крутится, пока не апдейтнется таймер (дойдет до 50 мс) или счетчик досчитает до 1000000. Счетчик нужен на случай, если пользователь сумеет отпустить кнопку раньше, чем 50мс.
> таймер (дойдет до 50 мс) или счетчик досчитает до 1000000
Я чот условие цикла не вдуплил, оно "TRUE" пока TIM2->SR (что это, 50мс?) И(!!!) k<100000.
>TIM2->SR (что это, 50мс?)
Это флаг апдейта. Там восклицательный знак стоит, т.е. условие TRUE, пока флаг апдейта НЕ выставлен.
>И(!!!) k<100000.
Да, все верно. Когда счетчик станет больше, условие перестанет выполняться.
Ерунда какая-то. Запускается этот кусок кода по какому условию? А если у тебя несколько кнопок? При переходе на другой микроконтроллер будешь переписывать целиком?
Дребезг контактов проявляется и при отпускании кнопки. Типовой алгоритм подавления дребезга выглядит как-то так:
if (вход) {
if (счетчик == макс) {
выход = 1;
} else {
счетчик++;
}
} else {
if (счетчик == 0) {
выход = 0;
} else {
счетчик--;
}
}
>по какому условию?
По нажатию кнопки.
>А если у тебя несколько кнопок?
И что? GPIOA->IDR & btn условие проверяет конкретную, нажатую кнопку.
>Дребезг контактов проявляется и при отпускании кнопки.
А это неважно, потому что первый же фронт будет сигнализировать об отпущенной кнопке.
Бля, понял свою ошибку. При дребезге во время отпускания будет зарегестрировано ложное нажатие после отпускания
>>283073
Таки рекомендую использовать SPL. Причина: такие конструкции как #define IS_GPIO_MODE(MODE), ассерты бьют по рукам за неправильную инициализацию. В том же CMSIS названия регистров - обертки над числами, и АНВ2 насрать, что ты пихаешь в него бит от АНВ1 - для компилятора это просто число. В SPL такая штука не прокатит. Про хал не знаю, не пробовал. Притом использование в одном исходнике и CMSIS, и SPL считается дурным тоном.
Пиздец, столько наворочено, что в башку не помещается.
Простейшая задача - хочу считать таймером нажатие кнопки.
>>283077
Точно, поправил. Но все равно не работает, теперь первое значение 1D0, а потом так же 20-28. Уже и предделитель, и количество сэмплов менял.
Сначала я вообще CubeMX открыл и все наконфигурировал, но он выплюнул столько кода, что я решил делать все сам. SPL не по хардкору, писать напрямую в регистры гораздо интереснее, плюс проект не хотел компилироваться, когда я SPL в кеил добавил.
>>283086
Лучший источник информации — даташиты. Прочитываешь весь раздел по таймерам и ищешь те функции, которые тебе нужны. Можно поискать переводы на русский, вот тут, вроде, много чего описано: http://chipspace.ru/stm32-general-purpose-timers-1/ .
> Точно, поправил. Но все равно не работает, теперь первое значение 1D0, а потом так же 20-28. Уже и предделитель, и количество сэмплов менял.
> Сначала я вообще CubeMX открыл и все наконфигурировал, но он выплюнул столько кода, что я решил делать все сам. SPL не по хардкору, писать напрямую в регистры гораздо интереснее, плюс проект не хотел компилироваться, когда я SPL в кеил добавил.
Во первых, есть ли у тебя тру компилер arm-none-eabi-gcc? Spl поддерживает.
Во-вторых, лучше поставить кокос 1.7.х. Он специализируется на стмах, нет ограничения кода, халявный. Инклюдишь библиотеки одним щелчком мыши, прототипы функций с докладным описанием смотришь там же.
И документацию на cmsis найти гораздо труднее.
>Лучший источник информации — даташиты.
Да всё понятно про даташиты, но всё же - как считать, используя HAL, значения счётчика TIM2?
Захожу по нажатию кнопки в прерывание по нужному фронту - всё ок, а значения счётчика получить не знаю как...
Аааа, проорал. У тебя РА0 на кнопке сидит, которая к плюсу подтянута. Фак.
void TIM2_IRQHandler(void)
{
cnt = __HAL_TIM_GET_COUNTER(&htim2);
HAL_TIM_IRQHandler(&htim2);
}
По нажатию кнопки приходит в прерывание, но cnt не увеличивается.
Попробуй напрямую к регистру TIM2_CNT обратиться. И вообще, кинь весь код. Одна функция ничего не даёт.
Не выходит - гуглишь RM0090 и читаешь доку от ST.
извините за много сообщений, постоянно новое в голову приходит
Я на сайтике caxapa (латинскими символами) находил для 7.5.0, там автор кряки вкладывает. Пароль фтпшника - анка
У меня стандартный, стоит ставить? Переход с ардуино на регистры был непрост, теперь еще и компилятор отдельный указывать. Я все еще хочу обойтись без SPL. Хотя, если ее использование увеличивает размер кода так же, как и CMSIS, то можно попробовать.
>кокос
Читал, что серьезные дядьки в нем не пишут. Плюс официальный сайт лежит уже, судя по форумам, продолжительное время, что не говорит в его пользу.
>И документацию на cmsis найти гораздо труднее.
Я из него пока только setInterrupt() использую, потому что не нашел, как это через регистры делается, лол. Документация даже на сайте кейла есть, http://www.keil.com/pack/doc/cmsis/General/html/index.html .
>>283160
Так написал бы сразу, что с HAL, а то склаждывается впечатление, что ты совсем ничего не знаешь.
>>283161
Ты, наверно, предположил, что у меня discovery? Я себе купил вот такую плату: http://www.ebay.com/itm/272501820584 , она и дешевле, и меньше, а для выхода логический анализатор есть.
Компилястер стоит ставить - оптимизация классная, spl тоже стоит по вышеизложенным причинам.
>серьёзные дядьки
Серьёзные дядьки названия регистров не путают и вообще, пишут на асме. Для быстрого старта рекомендую кокос. И тот сайт, ссылка на который несколькими постами выше.
Сам попробую АЦП запустить в течении недели
>RM0090
Это не катит. У меня STM32F103C8T6 - курю UM1850
>И вообще, кинь весь код. Одна функция ничего не даёт.
Чертова спаморезка не даёт код выложить :-О
>Так написал бы сразу, что с HAL, а то склаждывается впечатление, что ты совсем ничего не знаешь.
Да я практически ничего и не знаю, что касаемо STM32 - после AVR очень сложно.
Я лучше словами.
К TIM2 на CHANNEL3 я подключил кнопку.
По нажатию на кнопку попадаю в прерывание.
Это всё работает.
Как мне в прерывании, используя HAL, получить значение счётчика TIM2? Хочу знать сколько раз нажималась кнопка.
Как то так
static TIM_HandleTypeDef s_TimerInstance = {
.Instance = TIM2
};
int timerValue = __HAL_TIM_GET_COUNTER(&s_TimerInstance);
я по ходу туплю с непривычки.
TIM2. Тактирую от входа TIM2_ETR (pull_up, опускаю на землю кнопкой)
Должен от нажатия кнопки счётчик увеличиваться?
>>283264
>и читаешь тики
За тики должны быть нажания кнопки. Нет?
>Если будет ругаться пробуй без __ спереди
Не, нормально.
Только не растёт счётчик от нажатий.
Понятно, что я могу настроить прерывания по паданию уровня и в нём увеличивать счётчик.
С этим я разобрался. Хочется считать импульсы таймером.
Get counter - это получить время прошедшее с нажатия кнопки. Если хочешь считать нажатия, обьяви переменную и инкрементируй её во внешнем прерывании. И не мудохайся с таймерами.
Постой. Откуда в счётчике взяться времения, если Clock Source это вход ETR2 c кнопкой?
Если не кинешь код, я не смогу разобраться. Ты бы ещё пять инструкций асма скинул и сказал:"у меня не работает, помогите"
Хохо, наконец-то я догадался посмотреть регистры GPIO.
РЕГИСТРЫ ПЕРИФЕРИИ НЕ РАБОТАЮТ С ВЫКЛЮЧЕННЫМ ТАКТИРОВАНИЕМ.
Сегодня решил завести ЦАП, но не включил тактирование и думал, почему он не реагирует на запись. Потом посмотрел и точно, я в инициализации АЦП сначала выставляю аналоговый режим, а потом включаю порт A в RCC.
> Мосье сидит на модеме 14400?
Нет. Просто 6Мб сорсов в архиве для контроллера это убер-дохуя. Хотя потом посмотрел, ты туда и CMSIS и HAL и Аллаха заархивировал. Мне правда глубоко похуй, я просто мимокрокодил и ничем тебе помочь не могу
Я всю папку с Keil-овским проектом заархивировал. Ради чего мне из неё что-то вырезать? :-) Что бы архив был меньше?
> Ради чего мне из неё что-то вырезать?
Нахуя мне рыть всю твою папку с проектом, чтобы найти код отвечающий за сраную кнопку?
Ты еще и кейл с кубом туда заархивируй. Или весь системный диск. Хуле, инторнеты сейчас быстрые.
зря ты так агришься, у стм бардак в либах и версиях, я сам предпочитаю держать фиксированную копию SPL/HAL для каждого проекта отдельно, лучше уж один и тот же баг в их либе пофиксить отдельно в каждом проекте, чем следить за сохранением совместимости всех проектов с очередной микроправкой.
зато проект можно открыть в Keil и спокойно начать работать, а не искать откуда скачать недостающее.
Если такие сложности у тебя - забей.
Наверняка ты прав. Я пока не имею опыта оценить твои слова.
В общем, тьфу на вас :-) Нужно было всего лишь вход подтянуть к питанию.
https://ru.aliexpress.com/item/5-Inch-800-x-480-HDMI-TFT-LCD-Touch-Screen-For-Raspberry-PI-2-Model-B/32629828030.html
Опыт работы с orange pi и вообще с такого рода компьютерами нулевой. Будет ли этот дисплей работать? Если не , то посоветуйте какой-нибудь 5-дюймовый.
Он подключается через HDMI , и я так понял что всё что через HDMI подключается - работает везде. Это ведь так? И тачскрин подключается отдельно как-то?
Запустить таймер;
while (условие);
Остановить таймер
Считать значение счетчика. Готово
Всего 4 строчки кода вместо громоздких конструкций для захвата таймера, обработчиков прерываний и т.д.
Если ты про режим, когда по внешнему сигналу значение счетчика копируется в другой регистр, основная причина в обеспечиваемой точности.
Можешь ли ты сказать, сколько тактов будут выполняться предложенные тобой операции?
А если в момент ожидания условия возникнет прерывание? Или ты собираешься еще и прерывания запрещать? Но тогда микроконтроллер не сможет выполнять другие задачи во время этого ожидания.
>Можешь ли ты сказать, сколько тактов будут выполняться предложенные тобой операции?
А не похуй на частоте 72мгц? Явно не больше микросекунды это будет
>Но тогда микроконтроллер не сможет выполнять другие задачи во время этого ожидания.
А нах какие-то еще задачи? микроконтроллер предназначен для выполнения одной задачи в 99% случаев
Насколько я знаю - нет. DMA просто копирует значение из регистра в память либо из памяти в память, ты даже не можешь тунелировать данные, чтоб через DMA с одного I2C на другой пересылать, только I2C - память - другой I2C
Про периферию в даташите написано. Настроил, теперь надо как-то скорость увеличить. Continuous mode выполняется значительно быстрее, чем серия 8 одинаковых каналов, но в этом режиме срабатывает переполнение и данные не записываются.
Поиграйся с burst режимом, хотя он нужен для передачи пакетов данных, а не для непрерывного считывания ацп, также ты можешь в прерывании обрабатывать ошибки в том числе overrun (возникает, если ацп конвертирует данные быстрее, чем их успевает считывать dma).
Circular mode тут больше подходит, если я правильно понял его работу. Теперь у меня только одно прерывание по таймеру, где все выполняется, раньше еще от АЦП было. Только в режиме дебаггинга все значения за один шаг программы обновляются независимо от времени сэмиплирования, хотя счетчик тактов увеличивается на адкватные величины.
Ну дебаггинг это дело такое, точки остановки зависят от того, что там навалял компилятор
Через два месяца у него др. Я думаю, может, купить ему что-нибудь помощнее atmega16?
Проблема в том, что я решал лабы на си и отладчиком пояснял преподу, что да как работает. Выебнулся, да - потому что преподаватель хотел, чтобы я на асме писал.
Так вот, мой друг си не любит, и вообще от программирования не в восторге пытался заманить его изучать си шарп вместе с собой, да разные книжки по программированию читать. Несмотря на это, атмега с асмом ему понравилась.
Понравится ли ему что-нибудь на более производительном арме?
Хочу купить девборд, программатор и рассыпухи до кучи
Дело в том, что на асме дальше лаб особо не уедешь. Он охуеет писать и потом отлавливать дохуища багов с утечками памяти в более менее серьезном приложении.
Думаю, сразу stm32 взять. Мощности больше, цена та же. Единственное, чего бы хотел попросить - ссылку на годный diy-набор, потому что те, что я нашёл - лютая хуета. Думаю, нужно купить маленький oled-дисплей, динамики, диоды, рассыпуху (резисторы, конденсаторы, катушки), плату для травления
Хочется как можно меньше паять, потому что в наличии один здоровый батин паяльник
>>284982
Так это даже хорошо, может, насчёт писать код на С. Некрасиво решать за друга, но я хочу себе союзника
Да, можешь взять STM32F103C8T6 и заодно попроще 20-ногую STM32F030F4P6. Но я б еще взял STM32F030C8T6, мне он даже больше чем STM32F103 нравится, да нету USB и батарейного питания для внутренних часов (которые все равно отстают и надо дрочиться с регистром подстройки), зато в 2 раза больше таймеров, что для меня обычно важнее в большинстве задач.
Сама плата в правом верхнем углу? Да где-то такого размера лол, только чуть шире.
Если плата чуть шире, то похоже дырки должны точно совпадать с дип40 пинами.
Блин, как это называется? Буду гуглить даташит. Эта штука точно подойдет в один девайс, прямо в сокет.
Но вот вопрос как ее в колыбельку дип40 воткнуть и есть ли даташит
Ясно что 2.54, хм, расстояние между рядами должно быть кратно 2.54, так что 99% что подойдет.
Спасибо, антоша, ты избавил меня от страданий
я только из-за кейла и сижу под виндой, потому что 10 из 10 идешка с отладкой, навигацией по статусам регистров, просмотром памяти во время отладки и прочими ништяками, она даже лучше чем AtmelStudio для avr
Первые 3 пикчи - кейл (2 и 3 в режиме отладки), я обвел интересные инструменты, но их там в несколько раз больше вплоть до софтверного осцилографа, который во время отладки будет рисовать че там на входе/выходе ножек.
4 пикча - STM Studio, отдельный интсрумент для отладки с визуализацией данных, очень удобно если надо проверить стабильность работы чего-нибуть (например как часто i2c отпадает или датчик отправляет неверный CRC, просто запускаешь, добавляешь переменную и через некоторое время смотришь график с провалами)
Ты так пишешь, будто всего этого в других IDE нет. А все это, кроме разве что STM Studio, имеется даже в эклипсе в виде плагинов.
>>285135
Отладка под линуксом ничем не отличается от отладки под виндовсом при использовании gcc. Для GNU GDB есть разные gdb-сервера для разных отладчиков. OpenOCD - поддерживает много разных, и есть проприетарные st-util и J-Link GDB. И все они работают почти одинаково под разными операционными системами.
>Ты так пишешь, будто всего этого в других IDE нет.
Скрины в студию (хотя бы просмотр состояния регистров и оперативной памяти)
http://gnuarmeclipse.github.io/debug/peripheral-registers/
>оперативной памяти
Это вообще в любой IDE для С/С++ должно быть.
В любом случае, просмотром содержимого регистров приходится заниматься крайне редко. Это скорее начинающим более полезно.
Ну тогда все ок.
Тащемта, девайс-девайс есть в определенных мк
http://www.ebay.com/itm/321569700934
Вот к этой хреновине нужен конвертер usb<->uart? Кроме этой платы, диодов и диодов, что еще нужно, чтоб начать пользоваться?
Да я не знаю, анон. Сам захожу в тред, потому что осенью закажу stm32
Он не только для stm32 же. Ок, а чем заменить говнохал на стмках? Самому велик изобретать не охота, а хал - говно.
>а хал - говно.
Поясни плз. Мимо 2 года уже использую хал, некоторые девайсы на нем работают с нагрузками 220, управляют симисторами и т.д. Все это время никаких нареканий. Фо фан делал обработку изображения с камеры и типа слежение за объектом заданного цвета, работало как часы. Код писать на нем очень приятно, при этом не раз лазил в исходники хал, там все написано четко и красиво.
>четко и красиво
По мне так нихуя не красиво и много какого-то лишнего говна внутри. Наличие поллинга в обработчиках прерываний -- это вообще пушка по-моему да и вообще именно обработчики прерываний мне там больше всего не нравятся. Да, с ним писать намного проще, потому что зачастую можно даже мануал не открывать на камень, но случись чего разобраться в этой куче будет тяжелее, чем в их старом spl, который тоже был не конфета.
Хер знает, насколько четко оно работает, но мне кажется, что любая более простая либа типа libopencm3 будет работать быстрее, и в ней будет проще ковыряться, если возникнут какие-то проблемы.
Ниразу не видел поллинга в халовских функциях обработки прерываний, как минимум в таймерах, I2C, UART, SPI для последних версий F0 и F1 (в них больше всего ковырялся) их точно нет. Там просто набор проверок с выставлением флагов в регистры и вызовом __weak методов. Есть while в методах типа HAL_UART_Transmit, но они там и должны быть, потому что это не передача через прерывание или DMA. Про отладку я вообще молчу, достаточно взглянуть на метод и сразу понятно где ставить точки остановки и какие переменные мониторить, потому что нормальные названия + комментарии.
Всё правильно говоришь.
Также хал - это оверхед (тяжеловесная ебола, всё-таки); это высокая нижняя граница сложности (weak-callback меня не пугают, по сути те же irq-handler, но они не нужны в простейших задачах, а хал бывает только с ними); это баги (sdio под STM32L правил весьма основательно); это уродливый DSL (микс из __MACROSOFF(hyoba) и HAL_YOBA_Off(&hyoba)); ну много ещё вопросов к халу, его архитектуре и документации.
Но вот для больших проектов с FreeRTOS, USB-CDC, SDIO+FAT32, RMII+LwIP и т.п. я бы настоятельно рекомендовал именно HAL и именно в связке с Cube. Охуительно упрощает.
Еще забыл упомянуть главную фишку в виде возможности легкого переноса кода с одного ядра на другое, пару раз сталкивался, когда писал что-то на F0, а потом переносил на F1 из-за не хватки периферии или памяти, перенос занимал от силы 5-10 минут.
>Там просто набор проверок с выставлением флагов в регистры
Сейчас работаю с f7, там в SPI в цикле проверяются флаги, по-моему это не норм. По крайней мере в железе там был косяк: в режиме слейва как будто в какой-то момент клок проебывался. Данные принимались, но флаг bsy в периферии не сбрасывался, он у меня так и оставался в этом цикле крутиться. Колбэк по tx/rx complete предполагает конец передачи, по факту же он вываливается туда по мере опустошения fifo, то есть, передача еще идёт, и отключать периферию нельзя.
Да, насчет комментариев не могу поспорить, но есть слабо описанные
места, наприме, usb device. Ковырять его тяжко. С другой стороны, писать всё это самому было бы гораздо хуже.
>>285776
С точки зрения переноса хал действительно очень крут, тут не поспоришь.
>>285775
>Охуительно упрощает.
Упрощает, но вопрос в том насколько он будет медленнее работать, чем что-нибудь куда более лёгкое? Есть ли вообще какие-то альтернативы, кроме libopencm3 и старого spl?
Короче, на работе встал вопрос ребром на эту тему. Я не хочу изобретать велик и не считаю, что монструозность хала сильно снизит производительность, хоть он мне и не очень нравится. С дургой стороны альтернативы две: писать самому и убить кучу времени на отладку, либо взять что-то лёгкое и низкоуровневое типа libopencm3, но я и другие разработчики в отделе никогда ей не пользовались, и если накидаю говна в проект, то вряд ли меня за это поблагодарят. Вот я и думаю, что делать.
>Сейчас работаю с f7
У меня похожие проблемы были пару лет назад с F4 (я тогда на нем делал обработку изображения с камеры и были проблемы с DCMI, пришлось поковыряться и поправить ручками), тут ничего не поделаешь баги в любой области присутствуют (посмотри на тот же ESP32, помимо багов в железе, часть которых исправлена в новой ревизии, присутствуют еще и в их SDK + сам SDK не полный, как и мануал на периферию, который допиливают на коленке). Но их в любом случае правят, хал для F4 который был до какого-то времени с багами стал все-таки стабильным, тоже самое будет и с F7 со временем.
>вопрос в том насколько он будет медленнее работать
По-моему такие вот нагруженные периферией проекты - это всяко сплошные DMA, где всех вычислений - парсинг да простая логика, т.е. без какого-то жёсткого реалтайма, потому и хал допустим. При этом делал однажды проект USB-осциллограф с параллельным логированием на microSD с FAT и россыпью медленных датчиков на i2c и spi, так вот безотносительно производительности я просто не представляю, как бы я заебался без куба, скорее всего просто даже не взялся бы начинать. Ну а куб - это только хал.
другое дело, что такие вещи надо на малиноподобной хуйне делать, а не стм32
DMA действительно упрощает работу в плане быстроты чтения данных, а если надо кучу всякого говна слепить в единое целое, то в любом случае нужна RTOS. Ну и не стоит забывать, что даже самый медленный STM32 это 48МГц, что в 3 раза быстрее среднестатистической Атмеги с 16МГц, на таких частотах можно уступить парой циклов в пользу быстроты и простоты написания кода.
>их в любом случае правят
Вот поясни, как с этим быть вообще? Запилил я проект на хале, нашёл там пару багов, пофиксил. Стм выпустили новую версию, где что-то пофиксено. Мне что в такой ситуации делать? Обновляться или нет?
Я б обновил, это ж просто уровень абстракции, перегенерил проект в кубе, скомпилировал, если надо переименовал функции и все работает. Но при этом я б не гнался за новыми версиями, если все норм работает на старой, они в основном для новых МК типа F7 и могут содержать потенциальные баги, после "оптимизации" общих методов, для их совместимости со всеми ядрами.
Вот в том-то и вопрос; на переименования похуям, а вот не нахватаешься ли новых багов и не откатишь ли собственные изменения не понять, так что вынь да положь регрессионное тестирование. Как было просто при коммунизме SPL.
Я сейчас сижу на кубе 4.19 (4.20 был с багом инициализации чего-то там, который поправили в 4.21, но мне и на старом норм) и последними FW для F0 и F1, которые последний раз обновлялись в конце и начале 2016 соответственно. Пока не сталкивался вообще ни с какими багами, работал со всей периферией, кроме разве что CAN.
DMA везде используется, где только можно, это даже не обсуждалось. Жесткого реалтайма в проекте вроде как нет, поэтому мне кажется, что хал там применим будет. Мне вообще кажется, что при использовании freertos с его переключениями и прочей малафьей пытаться угнаться за тактами убрав хал -- бессмыслица. Да и вообще стоит ли пытаться выиграть 10 строк кода на проце с частотой 216 МГц?
Ладно, спасибо, аноны, буду пытаться настаивать на использовании хала.
>>285784
Можно посмотреть на предмет исправления известных тебе багов. Если ничего не изменилось, то и смысла обновляться может не быть. Так или иначе когда периферию поднимаешь, пишешь ведь какие-то тесты, чтобы понять, что всё верно работает. Можно в отдельной ветке обновить либы, погонять тесты, если ничего не отвалилось еще помимо старого, то оставить, в противном случае просто забить хер до выхода следующей версии. Но просто так херачить новую либу в проект не надо, я как-то раз много времени потратил на поиск и исправление косяка в i2c. А в старой все как часы работало.
>либо взять что-то лёгкое и низкоуровневое
Можешь еще посмотреть в сторону этой штуки: STM32Cube Low-Layer Application Program Interface (LL API)
http://www.st.com/content/st_com/en/about/media-center/press-item.html/n3837.html
Я правда ей никогда не пользовался и ничего не могу сказать, но она позиционируется как облегченная версия хала для высокой производительности, что-то среднее между регистродрочем и абстракцией. Также его можно использовать вместе с хал.
dosikus, залогинься!
Заказал у пиздогазых пикрелейтеды.
Программатор именно с такой распиновкой. Собстенно, подключил 2, 4, 8 и 8-й выходы программатора на IO, GND, CLK и 3,3 выходы платки соответственно.
В кубике выбрал STM32F103C8T6. PC13 - output. Собрал в кокосе стандартный блинк. Все компилится. Заливаю прошивку - и нихуя! Причем, пробовал заливать и через STM32 ST-LINK Utility. Что-то туда заливается, т.к. если в ST-LINK Utility слелать Erase а потом залить кокосом - то там появляется что-то. Кодяра лупа ниже. Что я делаю не так?
while (1)
{
int i;
for (i=0; i<3; i++){
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
}
HAL_Delay(1000);
for (i=0; i<5; i++){
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(300);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
}
}
Дополню конфигурацией тактирования и тем фактом, что обе перемычке на плате находятся в положении, как на пике в предыдущем посте.
Аноний, спасибо, в кейл все гуд - завелось с полтычка. Алсо, правильно ли я понимаю, что
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
устанавливает пин не в HIGH, а в то значение, которое было сконфигурено в кубике в GPIO Output Level?
нет, SET устанавливает в HIGH, RESET в LOW, а то что ты в кубе установил, это каким оно будет после инициализации GPIO.
Пришёл сюда узнать об этом. Об AT91, досталась парочка, посмотрел у китайцев цена минимум за шт. 250, решил поехать мозги. Смотрел смотрел - Flash и еепрома нуль, как и куда прошивать его?
Пришёл сюда узнать об этом. Об AT91, досталась парочка, посмотрел у китайцев цена минимум за шт. 250, решил поехать мозги. Смотрел смотрел - Flash и еепрома нуль, как и куда прошивать его?
"Решил поебать"*
Анон, перекатываюсь с пердуино на арм и охуел от его возможностей.
Можно советов по книгам. Лучше на финоугрском конечно, но англ IFT.
Двачну. Анону книг зажал!
http://www.twirpx.com/library/comp/microcontrollers/arm/
DI HALT хорошо пояснил.
Для обучения CMSIS онли. Потом SPL, если нужно будет что то сейчас и немедленно.
Зачем? В SPL куча косяков, которые не зная CMSIS и не разбираясь регистрах ты не найдешь.
Мимонюфак.
Зойчем spl если есть ll(HAL)?
Кстати почему не? Тот же линупс поставить как? Как свой собрать для платки
Поидее ты можешь настроить ножку open drain и включить подтяжку вверх/вниз, чтоб не переключать ее режим работы, тогда можно по ней и передавать данные и читать.
Вопрос к знатокам. С помощью куба забахал проект с lwip и freertos, прописал пути в эклипсе, начинаю компилировать. вылезает пикрил. если приглядеться, то можно увидеть, что в описании ошибки указан путь STM32F4xx_HAL_Diver. Понятное дело, что он неправильный, но почему то поиск объектного файла происходит по нему. создается нормальный объектный файл по нормальному пути. кто и почему коверкает мои пути? у меня такой искаженный путь нигде не фигурирует
Ананасы поясните как прописать на keil 5 malloc. stdlib.h какой надо инклудить?
Если с примером так вообще нихуя дам.
НАЧАЛЬНИК! Пораша протекла. Иди залатывай нахуй, я с говном в одной камере сидеть не будут!.
Какие не находил статьи - нигде адекватно не расписывают что к чему. Тупо показывают, как надо сделать, чтоб в такой IDE с таким проектом плата замигала лампочкой.
Как? Почему? Что происходит? По минимуму объяснений. А приходится срочно вкатываться в MCU.
Что почитать-то?
Если бы ты осилил учебник по Си, у тебя бы осталось два вопроса: какой кнопкой компилировать и где документация на микроконтроллер.
Те статьи которые ты находил, как раз про то "какой кнопкой компилировать".
>осилил учебник по Си
Безусловно, в каждом учебнике по си описаны тонкости конфигурации МК STM.
в даташитах все расписано тащем то. Как че конфигурировать, а если не можешь читать даташиты на английском то надо заходить с другого конца к проблеме ииииииии учить английский.
Не, с даташитами как раз проблем нет.
Просто концепция в целом не осознаётся на 100%.
Сложно сформулировать в чём именно мне не хватает знаний, но подошедших уроков найти не смог.
Смотря что понимать под более/менее полным пояснением.
В книге >>288641 объясняется что такое процессор, память, как происходит управление периферией. Остается только изучить Си.
Не зная что ты осилил, трудно советовать что-то конкретное. Например, что тебе не понятно в примере https://github.com/kcuzner/stm32f103c8-blink/blob/master/src/main.c ?
Если имел опыт с AVR, то никаких проблем не должно воникнуть, вся периферия работает так же (дрыганье ножками, прерывания, АЦП, таймеры, ШИМ, ...), только их больше и у некоторых появился расширенный функционал (передача данных черех DMA, интерфейсы для памяти и дисплеев, 2-х канальный АЦП со всякими плюшками, применимыми для DSP и т.д.).
Прогать можно используя CMSIS, либо HAL (SPL устарел и не поддерживается на новых камнях). Я предпочитаю HAL, так как с ним быстрее генерить пустой проект с инициализированной периферией и есть возможность быстро перенести проект с одного камня на другой, остается лишь писать сишный код. Подавляющее большинство примеров написаны с использованием SPL либо HAL, что упрощает поиск инфы, если что-то не получается.
Вобщем не вижу никаких проблем во вкатывании, если имел опыт работы с 8-битными МК, другое дело вкатываться в контроллеры типа ESP32, который китайцы поленились сделать на ядре Cortex, а даташит ограничивается лишь общим описанием того как работает та или иная периферия. Хорошо хоть для SDK состряпали доки.
Не, до этого не прогал микросхем.
Впрочем, наткнулся на канал Sappise на ютубе - он хорошо разъясняет.
Я правильно понимаю, что CMSIS - это менее абстрактная и более низкоуровневая библиотека, а SPL и HAL - аналоги по этому критерию и более высокоуровневые, чем CMSIS?
Мне сейчас самому надо определиться на чём начинать.
В первом приближении CMSIS - это описание регистров периферии. Другими словами CMSIS - это прямой доступ к регистрам периферии. Соответственно, если ты осилил Си и документацию микроконтроллера, ты автоматически осилил CMSIS.
Если ты не смог осилить Си и/или документацию микроконтроллера, у тебя получится освоить HAL только на уровне копипаста и прочего ардуинства.
В любом случае для начала тебе требуется понять как процессор взаимодействует со своей памятью и периферией, а это доступным языком изложено в >>288641
После этого тебе будет необходимо осилить Си. Причем при программировании микроконтроллеров не используются какие-либо особенности языка Си, не изложенные в учебниках. Рекомендую один из этих двух учебников:
1) Керниган Б.В. Язык программирования С.
2) Подбельский В.В. Программирование на языке Си.
Если бы ты не поленился и хотя бы бегло прочел >>288641 , а потом прорешал бы примеры из учебника по Си, то множество всяких глупых вопросов наверняка бы не возникало.
Ок, спасибо.
КМК архитектуру на уровне юзера я понимаю, т.е. когда смотрю примеры на CMSIS вопросов по работе регистрами не возникает.
Скажем так: основным вопросом было то, что я не знал, с какой стороны взяться за изучение.
Сейчас, когда худо-бедно начал, вопросов меньше.
Ну тогда придется поднапрячься если захочешь писать с CMSIS, проще б было начать с 8-битных МК AVR типа Atmega16, у них неплохой набор периферии, можно дебажить и смотреть что происходит в регистрах, если есть необходимость разобраться как что-работает. У STM32 референс мануалы на 1000+ страниц, сразу охуеваешь от количества информации. У AVR мануалы в 3-4 раза меньше, по ним легко прогать и изучать как работают всякие базовые штуки типа таймеров, ШИМ, АЦП и т.д.
Как недавно перебравшийся с AVR, скажу, понятного разбора архитектуры ARM сейчас по горло. Все таки перелезая с архаичных avr происходят некоторые разрывы шаблона.
>с какой стороны взяться за изучение
1) Основ электроники, хотя бы до транзистора.
2) Основ цифры
3) Общей архитектуры МК
4) Покупки макетной платы
5) Конкретной архитектуры вместе с ассемблером.
6) СИ
А дальше сам уже будешь понимать. Главное не лезь в пердуины.
3, 5 - не нужно.
1, 2 - достаточно знать что есть цифровой и аналоговый сигнал + зачем нужны резисторы, транзисторы и конденсаторы.
4, 6 - пожалуй хватило бы только этого.
Практическое знание ассемблера нахуй не нужно, только зря потратишь время на изучение этих ебучих микрокоманд, чтоб забыть их через пару месяцев. Архитектура МК тоже не несет никакой пользы, ну знаешь ты что там есть блок памяти какого-то размера, мультиплексоры и еще всякая хуита, но при написании программ ты даже не вспомнишь об этом.
Интересно кем работают или что делают те, кто советует дрочить архитектуру МК и ассемблер, наверное уженестуденты каких-ниубть тех. вузов, в которых им забивали мозги устаревшим дерьмом
Хочу вкатиться в ARM, у меня есть плата STM32VL, но я не умею пользоваться даташитом. Посоветуйте статей, где бы параллельно с написанием кода велась работа с даташитом типа "А эта константа имеет такое значение, потому что в даташите в такой-то главе такой-то порт расположен по такому-то адресу".
Понятно, что каждый, кто прохавал проганье с регистров, получает +5 к ЧСВ, но всё же есть конструктивные аргументы в пользу отказа от библиотек?
Видел комменты, мол, библиотеки ограничивают гибкость работы. Но в чём заключается это ограничение понять не могу.
HAL по сути надстройка над CMSIS, которая наоборот добавляет гибкости, потому что ты можешь претаскивать куски кода с одного камня на другой, не тратя кучу времени на переписываенрие CMSIS функций к КАЖДОЙ инициализации, вызову, обработке и т.д. Хз почему все так рьяно дрочат на CMSIS, ведь он не дает никаких преимуществ, только гемор с запоминанием важных кусков кода и постоянным лазанием в референс мануал.
А по моему разницы по трудозатратам почти нет, потому что обычно код инициализации периферии намного меньше остального кода программы.
>>288938
>достаточно знать что есть цифровой и аналоговый сигнал + зачем нужны резисторы, транзисторы и конденсаторы.
Для программирования микроконтроллеров самих по себе, даже это не нужно. Но для разработки более-менее сложных устройств с микроконтроллерами этого не хватит.
>Практическое знание ассемблера нахуй не нужно
С этим скорее соглашусь. Но некоторые подробности будет не лишним знать, например наличие/отсутствие аппаратного умножения, деления и прочего.
>Архитектура МК тоже не несет никакой пользы
Как минимум, без поверхностного понимания не получится понять откуда берется выравнивание данных. Знания о том как работают всякие процессоры помогут при программировании ПЛИС.
>дрочить архитектуру МК и ассемблер
Достаточно для расширения кругозора почитать >>288641 или что-нибудь подобное.
>Для программирования микроконтроллеров самих по себе, даже это не нужно.
Отчасти да, но часто приходится между МК и подключаемым девайсом лепить всякие элементы: транзисторы для управления 12/24В нагрузкой, резисторы и конденсаторы на I2C шину, делитель для АЦП и т.д. по мелочи.
Многое зависит от того, какими навыками обладает вкатывальщик, изучал он радиоэлектронику или программирование в универе:
>Но некоторые подробности будет не лишним знать
Для радиоэлектронщика - да, для программиста так себе инфа в конечном итоге, на многих ИТ специальностях есть курс по комплюктерам и их процессорам, где рассказывается про устройство внутренней памяти, конвееры и прочее.
>помогут при программировании ПЛИС
Это уже совсем другая категория разработки устройств, чаще крупный проект богатого заказчика, для вкатывания и разработки чего-то своего МК получше выглядят. А поверхностное понимание, при необходимости, можно получить, прочитав за вечер пару статей по устройству и работе тех же AVR, которые очень хорошо разжеваны. На самом деле достаточно знать как работают регистры, оба типа памяти, тактирование (считай таймеры, шим, вочдоги) и аналоговое преобразование, все остальное это цифровые интерфейсы "высокого уровня", для которых нужно больше знать программирование, чем работу МК.
>почитать >>288641
Я открыл в середине и осили только пару глав, не могу в эти сокращения на русском, в англоязычной документации по МК как-то все понятнее и привычнее.
Считаю что лучше все-таки поиграться для начала с AVR, по статьям в инете либо по книге пикрилейтед. Я больше предпочитаю статьи, потому что изучал так пхп, питон, руби и после 6 лет работы, когда все это заебало так же изучал Си и AVR а затем перекатился на STM32, никаких проблем во время их изучения не возникало, особенно если у тебя под рукой есть отладчик, который при любых непонятках позволяет во всем разобраться самому.
> код инициализации периферии намного меньше остального кода программы
Дело не только в инициализации, но и во всех обращениях к портам, регистрам таймеров, шинам данных, оработках прерываний и тому подобного. Используя HAL их не надо искать и переписывать по всему проекту, потому что написанный код будет совместим с любым другим камнем STM32, можно написать проект на STM32F1 и потом за 5-10 минут перенести его весь или частично на STM32F7.
Конкретно с HAL/SPL проблема одна единственная: их писали рукожопые индусы. Но, поскольку писать на чистом CMSIS что-то сложнее морганияя светодиодами это тот ещё чемпионат по фигурному зигхайлю, то все плюются но пользуются, дорабатывая напильником.
P.S. Ну или не пользуются, а берут какой-нибудь opencm3 или HAL от ChibiOS.
HAL от STM очень даже ничего, как минимум проверял абсолютно всю периферию на F0 и F1 + многое на F4 - ни одной проблемы не возникало.
>4, 6 - пожалуй хватило бы только этого.
Для помограть диодом да.
1, 2 - достаточно знать что есть цифровой и аналоговый сигнал + зачем нужны резисторы, транзисторы и конденсаторы.
Диоды, стабилитроны, тиристоры, индуктивности....
А так же знать как они работают, иначе, даже сраный силовой ключ не сделаешь.
>3, 5 - не нужно.
Кроме попсы описанной в туториалах нихуя не изучит, будет сидеть каждую детскую проблему решать на форумах. Никто не говорит, что надо все вызубрено знать, но некий сферический вакуумный перемалыватель команд надо.
Нужно знать так, что бы в если потребуется, в конкретной можно было разобраться.
>>288940
Просто изучить архитектуру любого попсового контроллера.
>>288966
> кто прохавал проганье с регистров
Что там прохавывать то?
3003 было дело.
шо, не? я просто из деревни
Я правильно понимаю, что практически это как бы аналоги десктопных камней от интел/амд? Т.е. вокруг камня собирается базовый набор периферии (озу-пзу-дисплей-управление), в камень заливается типовой загрузчик, который грузит с флешки, на которую заливается некий базовый дистрибутив линукса в качестве ОС, который впоследствии допиливается доп. софтом и драйверами.
Однако все же не могу найти инфы, как такое смахараить с нуля? То есть собрать некую минимальную платформу, на которой, грубо говоря, запустить тетрис. Или же продаваемые малинки и их аналоги - это и есть такие минимальные платформы?
Это уже не минимальные платформы, а вполне себе самостоятельные
> The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors
https://www.eecs.umich.edu/courses/eecs373/labs/refs/M3 Guide.pdf
Как ты вообще умудряешься по клавишам попадать, если книгу найти и скачать не можешь?
вот и все. предыдущий пикрил - собственно код, который я туда добавил. больше ничего. ловить пытаюсь преобразователем USB-UART на микросхеме pl2303. пользуюсь терминалом с остроумным названием Terminal. драйверы все в порядке, прошивается нормально (дополнительно после отправки дрыгал светодиодом - он благополучно дрыгался). терминал работал нормально (подключал SIM800L). я уже не знаю на что грешить.
Он примитивист. Кайфует от двачгугла.
Условно - есть задача сделать достаточно сложный девайс. Надо сделать это сейчас с перспективой дальнейшей работы с STM32. Посмотрел на HAL и огорчился - проинициализировал все в Cube, написал прошивку - не влезло в контроллер. Тыкался в SPL и не понял толком - поддерживается ли он до сих пор или ST занимается сейчас только HAL? CMSIS - вообще не догнал как с ним работать, а нормальных обучалок не нашел. Во все вникал только читая сами либы, а это долго. Вопрос в том, есть ли какое-нибудь развернутое руководство к действию?
Дрочи arduinu
> не влезло в контроллер
Как бы у ST есть контроллеры с 2Мб на борту. Может тебе призадуматься об использовании малины/апельсины для таких йоба-проектов?
Больше вопросов вызывают библиотеки HAL, подключение которых по моему мнению раздувает объем прошивки. Плюс надо уместиться в минимальное пространство и минимальное потребление. Вдобавок я не понимаю как HAL работает, а читать код и комментарии к нему дело неблагодарное. User manual на самом деле догадался искать нашел только сейчас, но там, вроде только описание структур и функций, а не то, как оно работает.
>библиотеки HAL, подключение которых по моему мнению раздувает объем прошивки
Думаю при включении оптимизации компилятора всё будет неплохо.
>>292884
>Вопрос в том, есть ли какое-нибудь развернутое руководство к действию?
Я не видел.
Скажи, хоть, какой контроллер. У тебя каша в голове. SPL и HAL -- это ПО одного уровня. Мне HAL нравится меньше, ибо частенько работает с указателями и достаточно громоздкий, однако при ужимании прошивки и SPL тоже требует частичного переписывания, по моему мнению, но значительно меньшего.
CMSIS -- это приблуда от ядра Cortex (Cortex Microcontroller Software Interface Standard), она сама по себе SPL и HAL не заменяет. CMSIS присутствует в проектах как с SPL, так и с HAL (после куба).
Задавай вопросы, постараюсь помочь, мимо инженер-программист-электронщик 4 года в эмбэде.
>читать код и комментарии к нему дело неблагодарное
Алсо, ты не поверишь, но в эмбэде тебе не только читать код и комментарии приходится, но ещё и понимать как железо работает. Иногда индусы херню пишут в HAL-е, например... Да и разрабы камня тоже часто упускают важные моменты в документации по периферии, так что приходится пробовать опытным путём с использованием осциллографа (хотя сегодня то я понимаю, что можно было и без него, на голом камне).
Так что если ты хочешь положится на софт, тебе не в эмбэд надо...
>>292924-кун
>У тебя каша в голове.
Ты не представляешь насколько ты прав. Подскажи литературу, может блоги лол, сколько ни смотрел - дилетанты одни их пишут чтобы степ-бай-степ раскурить что к чему.
Вообще для чего нужен и нужен ли CMSIS и можно ли обойтись без него?
>Вообще для чего нужен и нужен ли CMSIS и можно ли обойтись без него?
Это база, применимо к CMSIS для STM32 и любых ARM контроллеров. Заморачиваться не стоит, ибо один хуй придётся, но лучше применительно на практике. Может и не придётся. Ребята, которые приходят в эмбэд, либо приживаются, либо нахуй идут...
Литературы не подскажу, ибо сам начал работать с IAR Embedded Workbench for ARM. Пробовал всякие Atollic True Studio, не впечатлило. В любом случае, тебе надо понимать, как работает железо, иначе никак. Я думал, что за меня всё сделали, пользуйся и не бухти, но хер там плавал... Если ангельский не разумеешь -- вон их профессии, проверено. Напарник меня устраивал на нынешнюю работу, сам по пизде пошёл, ибо не разумел ангельского. А я читаю маны как сказки детям на ночь, и всё разумею. Увы, нужна квалификация. Но, чем смогу -- помогу. Задавай вопросы, если чё...
>Вообще для чего нужен и нужен ли CMSIS и можно ли обойтись без него?
Извини, я тебе не ответил. Не обязательно нужен, но рано или поздно ты на это выйдешь.
>был.
быстрофикс
Значит либо там ничего не рассказывали, либо ты все прослушал, либо ты не знаешь Си. Иначе это:
>CMSIS - вообще не догнал как с ним работать
никак не объяснить, т.к. CMSIS это всего лишь прописанные адреса регистров периферии (в первом приближении).
Поэтому можно подумать что ты не понимаешь как ядро взаимодействует с периферией или не знаешь Си.
>>293001
Если программировать на Си, то все различия в программировании любых микроконтроллеров сводятся практически только к разной периферии. А периферия у STM8 и STM32 похожая.
Например есть MAX11202 SPI, 24 разряда, 120 Гц, в розницу будет стоить около 300 рублей.
>раздувает объем прошивки.
нет. в выходной бинарь включается только то что используется в твоем коде.
Я так понимаю, диды тут использовали Forth.
Сам сейчас сажусь за изучение Lua/eLua.
Другие слова мне в голову не приходят, так что параллельно вот на харкачик заглянул ответы спросить.
>православного stm32f103c8t6
Это не православный микроконтроллер. Православный микроконтроллер это К1986ВЕ92QI.
>ммммакисмально легко и быстро подправлять "по месту".
Все равно для изменения программы требуется компьютер, чем тогда поможет луа?
>диды тут использовали Forth.
Нет. Forth в общем случае является скорее компилируемым чем интерпретируемым. И писать на нем не быстрее чем на Си.
Не, о том чтобы интерпретатор встроить речи не идёт. Т.е. в случае луа - одна виртуальная машина, без лексера/парсера/конпелятора. Как в общих чертах я это вижу: быдлокодится простой загрузчик байт-кода в известную область флеш-памяти, из которой тот и исполняется виртуальной машиной; загрузчик можно сделать например через UART или SPI (Wiznet/Enc28j60 или даже карточка SD); конечно, это по сути будет тот же swd самопальный, но предполагается, что профит будет именно в том, что самая переменчивая нагруженная логикой часть прошивки будет на гибком скриптовом языке, а не на топорной няшносишечке, причём корректность логики будет элементарно тестируемой на компе разработчика.
Разве так нигде не делают?
делают конечно? всякая хуета типа nodemcu, в ПЛК вместо программ используют всякие МЭК 61131-3, но это тред про ARM а значит только хардкор и байтоёбство, так что уёбывай
>загрузчик можно сделать например через UART или SPI (Wiznet/Enc28j60 или даже карточка SD)
Там и так есть SWD/JTAG и встроенный загрузчик через UART, зачем делать еще один с той же функциональностью? Только для того чтобы каждый раз не перепрошивать неизменяемую часть и сэкономить на этом секунду?
>на гибком скриптовом языке
Чего гибкого в луа? Какой-нибудь питон на компе еще можно назвать гибким благодаря множеству модулей. При этом из Си несложно макросами сделать простенький forth.
>причём корректность логики будет элементарно тестируемой на компе разработчика.
Будто на Си это нельзя.
SublimeText 3
Недавно начал изучать STM по этому МК. Использую IAR + STM32Cube, библиотеки HAL. Мне нравится, даже очень.
STM32Cube + Keil
Не слушай поехавших, которые поносят HAL, просто они не осилили понятие абстракции и зачем она нужна, ведь этому не учат в их быдло техникумах. Им проще хуесосить то чего они не понимают, чем принять тот факт, что это всего лишь удобный инструмент.
>Не слушай поехавших, которые поносят HAL, просто они не осилили понятие абстракции и зачем она нужна, ведь этому не учат в их быдло техникумах.
Двачую.
Сам начинал ещё с AVR и PIC на ASM, потом начал работать с C. Параллельно программировал под Linux (там было чистое ООП).
Потом, когда начал работать c STM32 понял, что наелся битоёбства.
Когда сейчас всякие интересные личности рассказывают охуительные истории про то, как охуенно быть байтослесарем, мне становится смешно. Ещё лет 15-20 назад я бы мог это понять, но не сейчас. Сейчас программировать в стиле "внук допишет" при таких вычислительных мощностях означает исключительно одно - ты тупо не впишешься в рынок. Кому нахуй нужно, чтобы ты писал на CMSIS месяц то, что я могу написать на HAL за неделю и при этом получить много плюшек в плане переносимости и прочего, при этом потери в памяти и производительности у меня никак не будут фатальными.
Напомню, что у серии F4 частота от 80МГц у самых начальных моделей до 180 МГц у топовых при 64КБ-2МБ флеша и 32КБ-384КБ оперативной памяти. Я просто физически не вижу смысла тратить много времени на слишком низкоуровневую ерунду. Времени жалко.
Короче, разобраться с азами конечно нужно, чтобы не стать макакой, не понимающей что такое бит. Но всю жизнь вариться в этом дерьме я смысла не вижу.
>Но всю жизнь вариться в этом дерьме
ты просто непонимаешь кайфа от продвинутого хардкорного байтоёбства
если тебе нужно быстренько заебенить хуету уровня китай+ конечно нужно зашквариться в IDE + анальные библиотеки, но в ни нет души они неправаславны и ибически анальны
>ты просто непонимаешь кайфа от продвинутого хардкорного байтоёбства
Я бы так не сказал. Когда я был юн и мне казалось, что жизнь продолжается бесконечно, я кайфовал от байтоебства, всячески изъебывался, чтобы выжать дополнительный процент и так далее. Потом меня заебало. Сейчас же я не вижу в этом смысла. Хочется больше попробовать, больше сделать. Вычислительные средства позволяют.
Олимпийские дисциплины, аля игра в 58 байт меня не интересуют. Кому-то интересно изъебываться и колупать свою девятку в гараже, а кто-то загоняет свою бнв в автосервис, чтобы ему колеса накачали. А цель одна - ездить. Каждому своё, короче.
Насчет души в библиотеках - ну как тебе сказать. Когда-то я думал абсолютно так же, когда программировал под десктопные системы на C++. Когда пересел на Python, у меня возникло странное ощущение. Что вроде да, он медленнее. Но я могу сосредоточиться на решении самой задачи, а не на приспособлении своих инструментов к задаче. И решить задачу гораздо компактнее, и разработать её в гораздо меньшие сроки. А время - деньги.
Хотя в целом, одно другого не отменяет. Узкие моменты в Python можно реализовать вставками С++, с STM то же самое.
>Сам начинал ещё с AVR и PIC на ASM, потом начал работать с C. Параллельно программировал под Linux (там было чистое ООП).
Завидую тебе
короче ты стал старый и желание зарабатывать превысило быть правым, но новичков всеравно нужно гнобить байтоёбством а не спойлерить годными штуками
Тут не столько желание зарабатывать, сколько желание работать с новыми штуками.
Понимаешь, какое дело. Кто-то покупает у дедов бесконечные КТ315 и делает светодиодные мигалки на мультивибраторе годами, или какие-нибудь некро-К155-микросхемы и из них чего-нибудь городит, вроде реле времени. Но блядь, время то идёт! Можно всё сделать проще, миниатюрнее, купив у китайцев за бесценок всё, что угодно! И пока ебёшься со старьём, со старыми технологиями, со старыми деталями, время-то тикает.
15 лет назад я мог предполагать, что один чип, который влезет мне на ноготь большого пальца, за 3 доллара, сможет скопировать с маленькой флешки данные и запулить TCP пакетом в Ethernet без обвязки?
Нет. Это были какие-то абстракции. Которые уже несколько лет назад как осуществились.
Технологии бегут так быстро, что охуеть можно, и надо успевать. А то навыпускают чипов на 5 гигагерц и 1гб ром/рам за доллар, а ты до сих пор будешь как "правый" (радикальный консерватор, скорее) делать всё на ASM\без пиздатых библиотек, не используя и 10% возможностей.
Короче, байтоёбство - это нужно и здорово на начальном этапе, но самое главное - вовремя соскочить и пойти дальше, иначе застрянешь там надолго.
приходится порог входа держать выше, иначе поналезут ардуинщеги и засерут все интернеты мигалками
> какой IDE лучше для нюфага
«линух популярнее»(ц) В том смысле, что скорее всего очередное пособие «моргаем светодиодом за пять минут» будет написано про связку Eclipse+gcc.
>какие-нибудь некро-К155-микросхемы
Попробуй заменить своим STM32 хотя бы К155ИЕ7.
>Кому нахуй нужно, чтобы ты писал на CMSIS месяц то, что я могу написать на HAL за неделю
Твои программы на 90% состоят из инициализации периферии? Это наверное довольно простые программы, без каких-либо сложных алгоритмов.
Есть предположение что во время работы в ОЗУ хранятся нужные данные.
>Может ли мне ардуина дать больше чем стм32ф4 или ф7?
Так сильно орнул с этого, что наверное даже сосед услышал, который в этот момент стену сверлил.
Начинаю понимать...
Ну для каких-то элементарных задач ардуино подойдет, но серьезных проектов ты на ней не склепаешь.
>Просто стартер кит ардуины стоит 32 доллара
Нафиг ты стартер киты покупаешь-то? Отдельно все дешевле стоит же.
Я пока просто вкатиться хочу, поэтому мне нужно говна кучу и разом. Но я так понимаю по тредам, что вместо ардуины лучше ф103 брать. Я и ардуину хотел-то только потому, что много о ней читал когда не знал про стмки, а с avrdude многого не достиг. Сейчас же пришел к мысли, что хочу ардуину не для проектов, а просто чтоб была, и решил узнать у опытных арм-господ, есть ли смысл в это влезать.
Олсо есть вопрос, с самого st.com можно что-нибудь заказать? Или только через дистрибьютора? Просто цены на 10-20 долларов разнятся.
>32F746GDISCOVERY
Это, как и F4, для всяких задач с обработкой аудио/видео с использованием DSP, охуенного многослойного графического интерфейса и прочих штук для которых требуются производительные вычисления.
Аналог пердуины - STM32F030 (20/32/48/64 ноги)
F103 если тебе нужен нормальный USB и часы реального времени с питанием от батарейки
F2/F3 для всяких специфических штук с параллельными АЦП для обрабоки сигналов, подключением памяти по FSMC и т.д.
На али отладочных плат как говна (даже всякие 144-ногие F4 по 16$). Купи себе F030 и F103 - их тебе хватит с головой.
Есть еще STM8, но это для поехавших долбоебов и STM32L где требуется реально низкое энергопотребление (наноамперы в режиме сна и микроампера в работе)
Закажи еще с первого пика (stm32f030f4p6) - стоит реально копейки и на нем можно много чего сделать.
>для поехавших долбоебов
Stm8 ясный понятный язык ассемблера на подобие 6502 в отличие от запутанного си stm32
Если без библиотек то си тот же асм. Разбираться с говном насранным индусами нормальному человеку то же не к чему.
Мне, как человеку, который 10 лет писал на C++, ПХП, Руби и Питоне, С и любые либы к нему кажутся простыми как палка. К тому же STM либы написаны разрабами с учетом тонкостей архитектуры их камней в отличии от говноподелий пердуино комьюнити, где их пишут реально индусы, не делающие даже элементарных код ревью на банальные ошибки переполнения стека или бесконечных циклов. Асм же удел прошлого (когда нужно было экономить память, оптимизировать чего-то там чтоб вписаться в параметры МК) и является бесполезным в наше время, когда МК 50-70 МГц с кучей памяти стоят 1-2$, имеют кучу плюшек, которые раньше даже представить не могли (DMA, FSMC, DCMI, DSP, аппаратные графические модули и прочее) и всем этим желательно рулить через RTOS. Он годится только в исторически-образовательных целях помигать светодиодом или передать чего-нибудь по I2C.
Не надо ко мне на Вы, мне 27 лол. Просто заебало работать на всяких хуесосов и тратить свое время, поэтому разарботал пару стабилизаторов (1/2 канала) и пид регулятор с управлением симисторами. Всякие челики с заводов по производству ПЭТ бутылок покупают в основном (потому что работает лучше чем то, что они покупали у местных производителей) ну и просто рандомы. На очереди 8-и канальный стабилизатор, чтоб выйти на производителя термопласт автоматов (они тоже закупают говно у местных, собранное на пиках). Трачу времени 1-2 дня в неделю чтоб спаять все, фрезернуть отверстия в корпусе на чпу, напечатать вставки и кнопки на 3д принтере и отправить в магазин или сразу заказчику, такие дела.
+ еще вкатываюсь в IoT, уже пару месяцев работает дома монитор качества воздуха на ссаном ESP8266 (меряет температуру, влажность, CO2, VOC, пыль PM1.0/2.5/10.0, записывает логи на флешку каждую минут и выдает все через веб интерфейс в виде красивых графиков), сейчас переношу все это на нормальный контроллер ESP32 с RTOS на двух ядрах, автономным питанием и прочими плюшками.
>когда нужно было экономить память
Написал часть некоторой цифровой обработки сигнала на cortex-M1 с тактовой 140 МГц, т.к. было лень все делать на FPGA. Но микроконтроллер все-таки немного не успевает. По твоему я должен переделывать плату под более производительный микроконтроллер? Или переносить в FPGA? Так по моему быстрее этот кусок на ассемблере переписать, чем на верилоге.
Соглашусь, ассемблерные вставки никто не отменял, но пердолить на нем весь проект - бред, тем более для всяких тривиальных задач с автоматизацией.
Как вариант A4988, который ставят в дешевые 3д принтеры, но я б советовал DRV8825 - у него микрошаг выставляется до 1/32, он может выдать больше тока + имеет некоторые фишки, о которых можно прочесть в даташите.
Спасибо. А ему нужен RAMPS или какая-то подложка? Или можно сигнальные пины мк сразу на вход драйвера подключать?
На таких платах можно сразу к МК, только аккуратно клей радиатор, чтоб не замкнуть контакты и разберись с потенциометром, который выставляет ток (в какую сторону крутить и до какого предела, про это все в инете есть) как вариант можно купить цифровой потенциометр, типа MCP444X, которому задаешь значение тока по I2C
И ещё раз спасибо, анон.
Нужно разродится протоколом. И тут, я, откладывая это "на последок" как самое легкое, впал в ступор.
Сделать на отъебись не получится, вроде и CRC8 надо бы и инициализацию обмена слейвом хочется.
Сел писать велосипед, понял что получится хуйня и пол года ошибки отлавливать потом.
Что изучить\запихнуть туда для этой цели? Не в ModBus же закатыватся на самом деле?
>ARM архитектуру
Их много разных, тебе под какой конкретно процессор?
>elf32-little
Что тебя смущает?
Если мне нужно решать тривиальные задачи, вроде управления движком через I2C\UART, зачем мне брать STM32 если должно хватить STM8?
С STM32 я поверхностно знаком, изучаю его. Решить эту задачу на F4-борде я могу. Но это нерационально в плане цены. А STM8 у меня только 103 плата валяется где-то, на AX купил когда-то за полбакса, но пока не колупал (программатор едет). Про разрядность и маленький объём понятно, но чем они настолько сильно отличаются, чтобы их применение было нецелесообразным?
Вроде стм8куб даже завезли, на C можно программировать. В чем проблема?
Если gcc не поддерживает какую либо архитектуру то логично условно считать что данной архитектуры не существует? поэтому непонятно о чем идёт речь, stm8? но извените что это за неведомая ёбаная хуета?
Видеокарты тоже будешь игнорировать?
>>294836
>Но это нерационально в плане цены.
https://www.chipdip.ru/product/stm32f030k6t6-2
https://www.chipdip.ru/product/stm8l051f3p6
Аналогичный Cortex-M0 дороже всего лишь в полтора раза, при этом имеет некоторые преимущества: быстрее считает, есть JTAG/SWD, есть gcc. Кроме чуть меньшей цены, у STM8 нет преимуществ, а недостатки есть. По сравнению с ценой остальных деталей (хотя бы корпусом), разница в 26 рублей будет вообще незаметна.
>на C можно программировать
На C11 нельзя вроде как. К тому же в SDCC не все работает и он багнутый, а остальные компиляторы воровать надо.
Мне под процессор AT91SAM9260-QU. Смущает то, что бинарник не запускается, вместо этого пикрил.
Можно найти 25 против 55 рублей, но абсолютная разница такая же.
Ну во первых, 25р, для какого нибудь маня-мелкосерийного устройства вполне себе деньги. Особенно, если компоненты остальные выходят в 25р то же.
Во вторых корпус, STM32 резко увеличит размеры платы и может обязать делать 2х стороннюю, если не получится разгуляться по площади. (За исключением того, что ты скинул в том же TSSOP, но тут есть пункт 3)
В третьих STM8 умеет питаться от 5В. Что иногда сильно облегчает жизнь и стоимость.
Так, что для некоторых случаев STM8 не лучше, но проще и имеет право жить. Что трудно сказать про всякие PIC\AVR
Во-первых ты сравниваешь STM8L с STM32F (аналог F - STM8S), что в корне не верно. Во-вторых, нашел где цены смотреть блядь, вот держи:
https://ru.aliexpress.com/item/Free-shipping-10pcs-STM8S003F3P6-Value-line-16-MHz-STM8S-8-bit-MCU-STM8S003F3P6TR/32399834476.html
https://ru.aliexpress.com/item/STM32F030F4P6-STM32F030F4-STM32F030-IC-MCU-ARM-16K-FLASH-TSSOP20-10pcs-lot-Free-shipping/32748098689.html
А так действительно STM8 не стоит того, чтоб сними возиться - в них все хуже (частота, разрядность ацп, памяти и периферии кот наплакал). Их есть смысл применять в серийном производстве, если тебе надо сэкономить пару рублей на елочных гирляндах, которые будут тебе собирать китайцы.
Тогда буду колупать мелкие 32-разрядные.
>>294836 - анон
>если компоненты остальные выходят в 25р то же.
Только если этих компонентов за 25 рублей не больше десятка. И найди мне нормальный корпус за 25 рублей.
>Во вторых корпус, STM32 резко увеличит размеры платы
Они есть в одинаковом корпусе, например TSSOP-20.
Как я заметил, тут многие что-то делают мелкими сериями, при этом стараясь сэкономить даже на микроконтроллере. Что делаете, если не секрет?
>>294883
>аналог F - STM8S
То есть аналог STM32F1, STM32F2, STM32F3 и т.д. это STM8S? С чего бы это? В тех что я привел, хотя бы периферия аналогична.
>разрядность ацп
Где? У них одинаково максимум 12 разрядов.
>Во-вторых, нашел где цены смотреть блядь
Там хоть месяц ждать не надо.
L (STM8 и STM32) - низкое энергопотребление
у STM8S. STM8A - для машин, STM8S - общего назначения.
У STM8S АЦП 10 бит.
Как буд-то ты их будешь по 1шт в месяц заказывать.
>Они есть в одинаковом корпусе, например TSSOP-20.
Нет 5В. А все вместе дает кумулятивный эффект, при не благоприятных обстоятельствах.
Дороже сам контроллер, нужен DC\DC, нужна более детальная разводка и пошло поехало, в итоге уже не 25р а 125р.
>тут многие что-то делают мелкими сериями
>Что делаете, если не секрет?
Ничего, но я делаю всякую залупу, которую не купишь или купишь за слишком дохуя и делаю всегда с расчетом, что ее можно будет продемонстрировать и продавать.
Людей делающих всякие часы, искренне не понимаю. Думаю не я один такой.
А чем все компактнее и технологичнее выглядит, тем более презентабельно.
Маняфантазии? Наверно. Но заниматься разработкой залупы, кладя хуй на ее стоимость и технологичность по мне так хуита, сразу -50% челенджа.
В общем, если компилить бинарник на убунте с этими флагами, то на плате при запуске пишет "not found". Если компилить с флагом -static, то пишет "illegal instruction".
Вообще, утилита file показывает по скомпилированному бинарнику следующее: "test_arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=034430c17b1ac94f8d8c3cf45c913691ba66b730, not stripped
".
Также, у меня есть бинарник, который работает на этой плате, информация по нему следующая: "ctrl: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
".
Как мне скомпилировать свой бинарник, чтобы вывод file по нему был такой же? Я так понимаю нужно использовать тулчейн uClibs? А то я использую arm-linux-gnueabi-gcc.
>"ctrl: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked, interpreter /lib/ld-uClibc.so.0, not stripped
>interpreter /lib/ld-uClibc.so.0
Тебе сюда https://www.uclibc.org/toolchains.html
Попробуй собрать собрать тулчейн под uclibc, target указывай unknown-linux.
Тулчейн собрать не получилось, но я скачал готовый для ARM. Теперь у меня есть файл root_fs_arm.ext2, на котором я снова застрял. В мануале написано следующее:
Download root_fs_i386.bz2 from uclibc.org
bunzip2 root_fs_i386.bz2
mkdir root_fs
su root
mount -o loop root_fs_i386 root_fs
chroot root_fs /bin/su -
Проблема возникла на последнем шаге, на команду "chroot root_fs /bin/su" - терминал говорит "
chroot: failed to run command ‘/bin/su’: Exec format error
". Гугл говорит что это из-за разницы в архитектурах систем и т.д. У меня на виртуалке убунту x64, что мне сделать чтобы оно заработало?
Так, решил проблему с помощью qemu. Скомпилировал бинарник, теперь вывод file у него такой:
"test_arm: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked, interpreter /lib/ld-uClibc.so.0, for GNU/Linux 2.0.0, not stripped
".
Однако запускаться на целевой системе он все равно не хочет:
"./test_arm: can't resolve symbol '__uClibc_start_main'".
Я сейчас головой поеду.
С флагом -static все скомпилировалось и работает. Спасибо за помощь.
Я тут STM постигаю, и столкнулся с проблемой.
Сгенерировал проект под HAL из-под куба под STM32F407. Проблема вот в чем - мне нужно вызвать небольшую задержку, в 5-10мс перед выходом из прерывания по кнопке. В дальнейшем сделаю либо на таймере, либо с железом немного пошаманю, но сейчас нужно сделать именно так. (Т.к. хочу разобраться, почему не работает).
Вызываю HAL_Delay внутри прерывания и всё виснет намертво в цикле.
Поставил приоритет SysTickTimer = 15 - ничего не изменилось, хотя в интернетах пишут, что должно.
Ничего не понимаю. Объясните, пожалуйста, как заставить это заработать.
Я понимаю, что задержка в обработчике прерывания - это плохо и так далее. Но пока вся моя программа состоит из обработки одного прерывания и пустого цикла и я могу себе это позволить. И я хочу узнать, какого черта это не работает.
Ведь здесь дело не в том, что задержка в прерывании это плохой тон, а в том, как правильно настроить приоритеты прерываний.
Пробовал вызывать HAL_Delay вне прерывания? Может оно вообще у тебя не работает.
Пробовал. Работает, как и должно работать.
Я хочу прикрутить энкодер к дев.борде и обрабатывать его топорно, прерыванием по спаду одного из выводов. Этот HAL_Delay нужен исключительно для того, чтобы убрать явление неопределенности при переключении. За один щелчок энкодера переменная, считающая щелчки, вместо 1 изменяется на 10-30.
> обрабатывать его топорно
Обрабатывай его в конечных автоматах, а не прерываниями с дэлеями.
>задержка в обработчике прерывания - это плохо и так далее
это плохо если ты продвинутый байтоёб и пишеш без всяких HAL, cmsis, cube и прочего дерьма, тогда можешь поругать себя и продолжать, всё будет работать как надо, но если ты сраный ардуинщег-библиотекарь то задежки в прерываниях не просто плохо а недопустимы
а вообще просто нужно прерывание от SysTick сделать выше твоего прерывания, https://electronics.stackexchange.com/questions/212194/stm32f7-gets-stuck-in-external-interrupt-callback-function
>>295602
Разобрался. Тупо ошибся и в упор её не замечал в дальнейшем, даже стыдно признаться.
Перепутал Preemption priority с Sub priority, когда выставлял биты приоритета. Сейчас всё работает как и хотел. Косячно, но работает. Больше мне и не требовалось от этой задачи.
>>295597
Я так и реализовал в итоге. Подумал, что так логичнее. Но хотел всё-таки узнать, как вызывать прерывание внутри прерывания. Не мог пропустить факт того, что я вроде как задаю приоритет прерывания, а он ни на что не влияет.
>>295608
Это понятно, Анон. Тут дело немного не в этом.
Спасибо за ответы, господа! Добра!
Дело в том, что диоды получают и напряжение и данные(пик 4), но не применяют их, только первый применяет цвет и дальше не двигается и не меняет его. Если выдергивать минусовой провод, то все 10 штук горят рандомным светом, каждый раз разным. До пайки компонентов, но после лужения я прозванивал все дорожки, после пайки компонентов я все мерил, дороги от кондёров, шины +5 и землю, между ними, сигнальные дорожки. Отдельно проверил конденсаторы, купленные в соседнем радиомаге - 104, как и нужно. Попробовал запитать плату не от 5В, а от 3,3В чтобы Vупр > 0,7*Vпит, та же хуйня. IAR'овский проект правда под старую версию, и при открытии требует обновить проект до новой. Аноны, что может быть за хуйня? Дорожки слиплись? Поставить IAR младших версий? Какие-то настройки IAR которые я проебал? Косяк в плате?
Анон, я три раза проверил.
http://labor-union.wikia.com/wiki/Lifehacks
В-третьих, не помогать российским бизнесменам убивать рынок труда. Не стоит выкладывать в интернет готовые решения и подробную документацию и разжевывать все до состояния каши. Если вас заставляют писать документацию к вашему проекту или к части проекта, то не стоит разжевывать все такого состояния, чтобы понял первый встречный. Еще нужно создавать неформальные профсоюзы во всех городах, объединяться в Facebook Messenger, Google Hangouts, Google Plus, Signal, Tox, Jabber, группироваться по профессиям и проводить разъяснительные работы с идиотами, которые готовы бесплатно создавать продукты или оказывать бесплатные консультации ради стажа, лайков в карму, репутации и так далее. Нужно объяснять молодежи, что абсолютно любая работа на дядю должна оплачиваться. Также нужно коллективно осуждать тех, кто выкладывает на YouTube самоучители по диагностике и ремонту любых неисправностей материнских плат ноутбуков или диагностике жестких дисков, или профессиональному восстановлению данных, например. Нужно препятствовать опусканию любых инженерно-технических специальностей на дно и уничтожению рынка труда экономически безграмотными инженерами, которые хорошо разбираются в своих областях (электротехника, электроника, VHDL, сетевые протоколы, восстановление данных), но являются профанами в экономике и не понимают, что своими деяниями они уничтожают свою же профессию. Выкладывание максимально разжеванных материалов плодит дилетантов и мошенников на рынке труда, которые одновременно и позорят профессию, формируя общественное мнение о том, что типичный городской специалист в данной конкретной области - это мошенник, и сбивают цены на услуги, поскольку все клиенты начинают утверждать, что данная сложная работа должна стоить намного дешевле, "...потому что бизнесмен Васян вон за 270 рублей то же самое предлагает". Иначе вам придется тратить уйму времени на объяснение каждому клиенту того, почему после неудачного восстановления данных у Васяна вы не сможете ничем помочь.
В-четвертых, не раздавать направо и налево свои знания и опыт. Российские бизнесмены навязывают всем мысль о том, что профессионал должен активно делиться знаниями и обучать других, а иначе это не профессионал. Они заставляют профессионалов преподавать на организованных бизнесменами курсах для студентов или доучивать выпускников. Если инженер не особо усердно обучает других людей, то бизнесмен, умело дергая за ниточки самолюбия инженера, будет подкалывать его, что тот якобы испугался каких-то жалких студентов, конкуренции с их стороны. Вам нужно понять одну простую вещь: раздача ваших знаний и опыта - это инвестиция в ваше будущее со знаком "минус", даже если это обучение вам прямо сейчас бизнесмен очень хорошо оплачивает. Даже если 40% студентов последнего курса на конкретной кафедре - глупцы, то из оставшихся 60% студентов еще через 3 года 30% смогут успешно справляться с абсолютно любой работой младшего инженера, 20% - с инженерными задачами, требующими средней квалификации, а остальные 10% смогут успешно справляться с задачами старшего инженера на проекте, продавливая вниз цены на труд и наступая вам на пятки. А еще через 3 года некоторые из бывших студентов оставят вас позади. Поэтому преодолейте в себе гордыню и самолюбие, отбросьте мысли о вашей якобы незаменимости и прекратите дарить всем ваши знания и опыт, плодя молодых конкурентов и создавая для владельцев предприятий промышленную резервную армию труда (как ее называл Карл Маркс).
http://labor-union.wikia.com/wiki/Lifehacks
В-третьих, не помогать российским бизнесменам убивать рынок труда. Не стоит выкладывать в интернет готовые решения и подробную документацию и разжевывать все до состояния каши. Если вас заставляют писать документацию к вашему проекту или к части проекта, то не стоит разжевывать все такого состояния, чтобы понял первый встречный. Еще нужно создавать неформальные профсоюзы во всех городах, объединяться в Facebook Messenger, Google Hangouts, Google Plus, Signal, Tox, Jabber, группироваться по профессиям и проводить разъяснительные работы с идиотами, которые готовы бесплатно создавать продукты или оказывать бесплатные консультации ради стажа, лайков в карму, репутации и так далее. Нужно объяснять молодежи, что абсолютно любая работа на дядю должна оплачиваться. Также нужно коллективно осуждать тех, кто выкладывает на YouTube самоучители по диагностике и ремонту любых неисправностей материнских плат ноутбуков или диагностике жестких дисков, или профессиональному восстановлению данных, например. Нужно препятствовать опусканию любых инженерно-технических специальностей на дно и уничтожению рынка труда экономически безграмотными инженерами, которые хорошо разбираются в своих областях (электротехника, электроника, VHDL, сетевые протоколы, восстановление данных), но являются профанами в экономике и не понимают, что своими деяниями они уничтожают свою же профессию. Выкладывание максимально разжеванных материалов плодит дилетантов и мошенников на рынке труда, которые одновременно и позорят профессию, формируя общественное мнение о том, что типичный городской специалист в данной конкретной области - это мошенник, и сбивают цены на услуги, поскольку все клиенты начинают утверждать, что данная сложная работа должна стоить намного дешевле, "...потому что бизнесмен Васян вон за 270 рублей то же самое предлагает". Иначе вам придется тратить уйму времени на объяснение каждому клиенту того, почему после неудачного восстановления данных у Васяна вы не сможете ничем помочь.
В-четвертых, не раздавать направо и налево свои знания и опыт. Российские бизнесмены навязывают всем мысль о том, что профессионал должен активно делиться знаниями и обучать других, а иначе это не профессионал. Они заставляют профессионалов преподавать на организованных бизнесменами курсах для студентов или доучивать выпускников. Если инженер не особо усердно обучает других людей, то бизнесмен, умело дергая за ниточки самолюбия инженера, будет подкалывать его, что тот якобы испугался каких-то жалких студентов, конкуренции с их стороны. Вам нужно понять одну простую вещь: раздача ваших знаний и опыта - это инвестиция в ваше будущее со знаком "минус", даже если это обучение вам прямо сейчас бизнесмен очень хорошо оплачивает. Даже если 40% студентов последнего курса на конкретной кафедре - глупцы, то из оставшихся 60% студентов еще через 3 года 30% смогут успешно справляться с абсолютно любой работой младшего инженера, 20% - с инженерными задачами, требующими средней квалификации, а остальные 10% смогут успешно справляться с задачами старшего инженера на проекте, продавливая вниз цены на труд и наступая вам на пятки. А еще через 3 года некоторые из бывших студентов оставят вас позади. Поэтому преодолейте в себе гордыню и самолюбие, отбросьте мысли о вашей якобы незаменимости и прекратите дарить всем ваши знания и опыт, плодя молодых конкурентов и создавая для владельцев предприятий промышленную резервную армию труда (как ее называл Карл Маркс).
Сразу чувствуется какой то манагер.
Без опен сорс сообщества был бы такой пиздецовый застой, что страшно представить. Ну да, из 100 - 99 ардуинщеги.
Кому нужен ардуинщег, его найдет и заплатит 270р.
ВОТ ЕСЛИ БЫ КОК ПОК ЗАКРЫТОСТЬ, ТО ЗА РАБОТУ УРОВНЯ АРДУИНА Я БЫ ИМЕЛ 1000000 БАКСОВ В ЧАС.
Но увы, не имеешь и не будешь. А профессиональные люди свое место найдут.
У них там вся агитация упрощена до предела, в такие моменты они не вникают, обсасывают заговор который тред безрезультатно.
Походу нету. Однотипное перепечатывание "уроков". На хаброгиктаймсе попадается пара статей, остальное пытался своим пропитым мозгом догонять, надоело, забросил свою стм32ф429i, скоро плесенью порастет. ПС. чота импортозамещение не работает, покупал ее за 1.2к, сечас 3+к
> что там догонять?
Вот если бы ты кодил только на Бейсике сидя за Robotron1715, потом 25 лет ебашил на стройке в паре парсеков от программирования, а потом тебе приспичило обтряхнуть старину и попробовать поиграться с современными железками, а тут йоба-битовые операции, инициализация тактирования на порядок больше чем ты за всю жизнь строк кода написал и прочие ништяки. На русском ресурсов чуть меньше чем нихуя. На тех которые есть все описывается по принципу: 2 + 2=4, а теперь вы поняли математику и давайте по быстрому разберем пару уравнений описывающих теорию струн.
>>295926
>>295904
Единственный нормальный источник - это документация. Все эти статейки в во всяких блогах одинаково бесполезны вне зависимости от языка на котором они написаны.
И как я понял, тот анон >>295854 предлагает не выкладывать документацию именно производителям микросхем.
>Не стоит выкладывать в интернет готовые решения и подробную документацию
Ну вот не скажи. Статейки помогают найти точку опоры, от которой можно уже двигаться. Да, ее можно найти и офф доках. Вот только что все эти офф доки, РМ и тысяча аппнотов.
такая хуета есть в любой профессии в любой стране, теже сервис центры, не в восторге от сраных ютуб блогеров, которые показывают как прожарить проц чтобы он еще пару недель/лет проработал, но обсирать ардуинщеков это не цель а процесс который просто доставляет, ктомуже правило гнобить новичков никто не отменял и это полезно иногда
Анон правильно сказал всё есть в доках. Смешно, Шариков дает советы вселенской глупости.
Ткните меня в STM8-тред. Помню, что видел, а найти не могу. Утонул штоле? Там чювак знакосинтезирующий индикатор к стм-ке подключил и у него работал. Я бьюсь уже 15 секунд и никак.
>Сразу чувствуется какой то манагер.
Скорее неосилятор, который хочет, чтобы тот мизер знаний - который он имеет, приносил ему хоть какой-то доход. А для этого он предлагает сделать его мизер знаний конкурентноспособным, ограничив остальным доступ к информации.
Зачем, если не тонет.
Есть смысл качать Keil 5.24 если пользуюсь 4.73?
Ты инвалид что ли?
https://rutracker.cr/forum/viewtopic.php?pg=1&t=2305709
Я бы скачивал с официального сайта, а то мало ли чего понапихают в торрентах. Кейгены вроде как подходят и от старых версий.
Но лучше использовать gcc с eclipse.
Спасибо. Я в основном на ноунейме тусуюсь.
>Под диктовку подключил 1602 через I2C.
Надеюсь ты понимаешь, что в этих дисплеях I2C приделан через дополнительную плату с микросхемой I2C-GPIO? Нужно было читать документацию на сам дисплей и на эту микросхему.
>Что почитать-посмотреть про DMA, SPI, CCR, FreeRTOS чтоб хотя бы представлять о чем идет речь?
Для начала нужно узнать какие интерфейсы у твоих светодиодов и акселерометров. Единственный нормальный способ это узнать - читать документацию.
>WS2812B
https://www.parallax.com/sites/default/files/downloads/28085-WS2812B-RGB-LED-Datasheet.pdf
На четвертой странице нарисованы временные диаграммы. Какому интерфейсу из STM32 они соответствуют? Да никакому. Соответственно есть два варианта:
1) Светодиодом мигать умеешь? Вот и намигай в соответствии с этими временными диаграммами. Для задания задержек использовать таймеры.
2) То же самое, но с использованием ПДП.
>и акселерометры
Разные акселерометры имеют разные интерфейсы. Неожиданно?
>>296613
В eclipse хотя бы рефракторинг имеется. Как IDE, eclipse по возможностям превосходит Keil. Кейловский компилятор вроде как лучше gcc, но какой смысл использовать его с эклипсом?
>I2C приделан через дополнительную плату
Знаю.
>Нужно было читать документацию
Еужно. Потому, что я смог его запустить только от 16Мгц тактирования, на 72МГц дисплей не инициализируется. И хуй знает почему, хотя коэффициенты в функциях я менял.
>какие интерфейсы
У акселерометра I2C - он MPU-6050. И когда я глянул проекты с ним, и как на комп снимать данные, я мягко говоря, охуел.
Вот и интересно, что дальше читать? Почему в примере с дисплеем биты двигают например? Как, какие и куда?
>хотя коэффициенты в функциях я менял.
Там два типа коэффициентов:
1) Для задания частоты I2C.
2) Для задержек самого дисплея.
Если правильно выставляются заданные значения на выходе микросхемы I2C-GPIO, то первый тип коэффициентов установлен правильно. Для этой проверки хватит мультиметра или даже простого светодиода.
Для проверки задержек второго типа потребуется осциллограф или логический анализатор, но можно просто внимательнее писать код.
>Вот и интересно, что дальше читать?
Только документацию.
>Почему в примере с дисплеем биты двигают например? Как, какие и куда?
Например, когда дисплей подключен по четырехбитному интерфейсу. Без схемы и кода можно только догадываться.
Если тебе непонятен какой-то код, то можешь дать на него ссылку, желательно со схемой.
Что надо, чтобы прошить ARM проц от Atmel? Желательно любой.
Понадобился мне двух-ядерный проц - надо записывать видео и звук одновременно.
Но одноядерное говно не вывозит эту хрень.
зная фирму Atmel предполагаю, что решение будет стоит охулиард рублей
>Atmel
Теперь это Microchip.
>двух-ядерный проц
Не проц, а микроконтроллер.
Прошивать через J-Link, который можно сделать из ST-Link.
А добавить нельзя?
LPC43xx например, но они немного про другое
ESP32 - 2 ядра, 240Мгц суммарная частота, есть даже I2S для работы с аудио.
>240Мгц суммарная частота
а у меня комп 16 ГГЦ в сумме лал
НУ ты лашара лооооол
крузис то пайдет?
нуб ебаный азазаз
Заманчиво.
Одно НО - пишут, что сдк пиздец сырой.
И можно ли повесить на каждое ядро по задаче? Не нашёл.
>ESP32
w2k на такой бы поставить кок раз двух ядерные системы поддерживает. А линух отстой это вчерашний день.
Сказать то чего хотел, уебище, ммм?
SDK сейчас 2.1 стабильная версия и пилят 3.0
Можно через RTOS вешать задачи на любое ядро.
Первое ядро всегда включено (на частоте 80/160), второе можно включать/выключать когда надо (частота 80).
http://esp-idf.readthedocs.io/en/v2.1/api-reference/index.html - API реф 2.1
http://esp-idf.readthedocs.io/en/v2.1/api-guides/index.html - API гайды 2.1
Насчет DMA, вот кусок из описания SPI Master драйвера:
The spi_master driver allows easy communicating with SPI slave devices, even in a multithreaded environment. It fully transparently handles DMA transfers to read and write data and automatically takes care of multiplexing between different SPI slaves on the same master.
Ну и палю годноту: https://leanpub.com/kolban-ESP32
Нет, просто не будут же тебе делать раздел о DMA, где будет описание отдельно для каждой периферии, логично, что его описание будет в разделе самой периферии.
Это документация на API, а не микроконтроллер. Если брать тот же SPI, то можешь ли сказать на каких частотах входного сигнала гарантируется прием в режиме ведомого?
>>297152
Вот этого удваиваю.
>>297153
Это может быть логично только в документации на API.
А если я захочу разгрузить DMA для чего-нибудь более критичного? Но документации то нет (возможно), соответственно никак не выйдет.
Какого хуя я должен все искать за тебя, бери качай док и читай уебище:
http://espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
Разделы 6 - DMA и 7.4 - SPI clock.
Ладно, ладно. Уговорил. Купил пару ESP32-PICO-D4. Попробую на нём вкорячить задуманное.
пока вы тут скачиваете кейл с торентов и объясняете всяким дегенератам-ардунщикам как настроить прерывания, биглибоард выпустил йобу
https://beagleboard.org/pocket
основанную на октавосистемс
http://octavosystems.com/octavo_products/osd335x-sm/
которая в свою очередь основана на инструментах из техаса (Texas Instruments Sitara)
Из годноты стоить отметить PRU-ICSS, два 32 битных 200Mhz встроенных risc ядра для кастомной переферии, только огорачает что 200Mhz хули так мало то блять
кто уже юзал? сколько светодиодов можно одновременно замигать?
Нахер оно нужно?
Все эти микро пк - тупиковая хуйня. Все эти малинки, апельсинки.
Народ ставит туда дистры линуха, непонятно кем собранные, дабы с помощью GPIO мигать светодиодами и смывать бачок унитаза удаленно.
Работать там нереально, если нужно что-то сложнее текстового редактора.
Медиаплеер из этих девайсов тоже практически никакой.
>непонятно кем собранные
ардуинщеги так и поступаю конечно, медиа плейир типа захуячить ашдимиай с андроидом или пидорой с дебианом, это нормально и охуительно, быдло спрос сбивает ценник на йобаштуки, китайцы с радостью штампуют всё что покупается, жаль что медленные атмеги всё ищо популярны, поэтому нужно гнобить ардуинщигов чтобы покупали йобоштуки и делать им всякие медиагавно проигриватели
я сам ядро сибираю для йобоштук, с реалтаймовыми расширениями и прочими ништяками, модули ядра у меня пока хуёво получаются, а вообще такие штуки норм когда нужно быстро блять, штука со спичечный коробок может одновременно держать тысячи соединений по https это охуенно же
Двачую, бро. На волне хайпа прикупил Апельсину-2Г-ИоТ. Закинул к хуям в дальний ящик через пару дней.
Ну так никто не запрещает самому собрать ядро и накатить слаку или арч, если впадлу от васяна сборку ставить
мимо_обожаю_малинку
бро, купи ещё одну, похуй что хуйня, можешь выкинуть нахуй или засунуть куда, просто купи они охуенны же, скочай пидору, там есть охуенные обои и медиаплейер
Еще есть гцц сразу арм и вим, опноцд и ддд, отдадка через гпио Не напрягаясь все есть для кортехов
Оверпрайс, как по мне. Понравился только тем, что у него есть немало HW интерфейсов.
>>297626
Ты использовал, или "не читал, но осуждаю"?
Я вот использовал RPI1 и RPI3. Первый вкорячил в одну smart-home приблудину, которая написана на Python, кстати. Работает и нормально, хотя программа вышла тяжеловесной. GUI подтормаживал, конечно. А вот видео воспроизводит нормально через VLC. Медиаплееры пилили ещё на 1B и не жаловались. Аппаратное декодирование видео реализовано.
RPI3B уже работает очень здорово. Часто использую как UART терминал, или как I2C слэйв/мастер при работе с ARM-ами. Через Python в GUI, либо через терминальные программы.
Понятное дело, что GPIO у RPI гораздо слабее, нежели у ARM. Это логично. Но у RPI есть SPI/(2)xI2C/(2)xUART, и есть GPIO, достаточный для управления с некритической точностью.
GUI работает очень бодро. В третью кваку играл на максималках с FPS около 50. Ютубчик через браузер конечно в FullHD не покажет, но что можно хотеть за 35$?
А дистров дохуя. Есть минимальные образы, где все пакеты сам сверху накидываешь, если так пичот от популярных дистров. Я же довольствуюсь Raspbian Lite.
да прайс пока не радует, всё из за ардуинщегов ебаных покупают устаревшее железо за оверпрайс, а норм железо без спроса лежит
Для меня ардуино это вообще нонсенс. Единственная польза - огромное количество всевозможных датчиков и прочих приблуд, которые идут к ардуине.
Потому что просто начать в Ардуино
Просто ты профи технарь, а для гуманитариев лучше ардуины ничего не придумаешь.
Ну смотри, если тебе надо заебашить разовому клиенту автоматизацию толчка.
Есть вариант, сделать на твоем любимом МКнейм, потратив время на схему, изготовление и монтаж или взять, купить ардуину, купить расширения, написать код за денек (на си, не скетч) и получить деньги?
Не любил ардуину, пока не начал заваливаться из любительства в мелкосерийку. И заказчик рад, т.к. нет каких то уникальных частей, которые хуй найдешь если ты помрешь.
>Из годноты стоить отметить PRU-ICSS, два 32 битных 200Mhz встроенных risc ядра для кастомной переферии
Чем это лучше CPLD или пересылок DMA-GPIO? По моему всем хуже, бесполезная штука.
кукаркать вздумал ардуинщег ебаные?
ну вообще в данном случае зависит от аргаизации шыны ну в данном случае реализация гавно конечо, но люди стремились сделость как можно лучше, щенок ибаный
Еще раз спрашиваю, для чего нужно:
>Из годноты стоить отметить PRU-ICSS, два 32 битных 200Mhz встроенных risc ядра для кастомной переферии
Как пишет сам производитель, это сделано для мигания светодиодами. То есть для программной реализации разных интерфейсов.
Но зачем? В простых случаях можно использовать DMA для пересылок между памятью и GPIO. Что-то более сложное целесообразнее делать на ПЛИС. С помощью мелкой CPLD можно мигать куда большим количеством светодиодов, причем еще и с большей частотой.
И этот ваш PRU-ICSS - шаг назад по сравнению с древними AT94K.
ну хорошо, нужно гигагерцовый cortex-A8, 512MB DDR3, CPLD интегрированый должен сидеть на шине кортекса, размер 5x5 см, 30$ где купить?
>размер 5x5 см, 30$ где купить?
Ты про https://beagleboard.org/pocket ? Но это же плата совсем без ничего, все равно придется к ней что-то припаивать.
Причем плата OSD3358-SM-RED, на которой есть хоть какая-то периферия, стоит как аналогичная плата с Zynq.
>должен сидеть на шине кортекса
У большинства подобных процессоров есть шина для подключения параллельных флешек и SRAM. Можно устройства хоть на серии К155 вешать.
Кстати заметил что на digikey.com эту плату продают дешевле чем стоящий на ней OSD3358-512M-BSM.
Нет, это максимум часть функций CPLD.
С Zynq эти PRU сравнивать нет смысла, т.к. в самом простеньком Zynq есть 66 умножителей 25х18 разрядов, которые могут работать параллельно на частоте несколько сотен мегагерц.
>Zynq насколько я знаю девборды в 100$ непомещаются
Да, но это из-за того что для Zynq нет плат без ничего вообще, как >>297599
Но плата OSD3358-SM-RED на которой есть хоть какая-то периферия, стоит уже $200, так же как самые дешевые платы с Zynq, например http://store.digilentinc.com/zybo-zynq-7000-arm-fpga-soc-trainer-board/
ладно уговорил, zynq рулит
у xilinx на сайте есть какието простые девборды для мигания светодиодами
https://www.xilinx.com/products/boards-and-kits/1-9od2h3.html
https://www.xilinx.com/products/boards-and-kits/1-odbhjd.html
только непонятно как там покупать
tst R1, R2
Где R2 = 0x1010
a для R1 три случaя
1. 0x1010
2. 0x1110
3. 0x1000
Кaкие флaги будут выстaвляться в результaте выполнения кaждого из случaев?
Если есть кaкой-то онлaйн-эмулятор бaйтоёбствa, в котором можно нaблюдaть зa регистрaми было б ещё лучше.
STM32F103C8T6
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/BABIHJGA.html
Эта инструкция выполняет поразрядное И, результат никуда не записывается. Флаг N устанавливается при отрицательном результате (старший бит - 1). Флаг Z устанавливается при нулевом результате. Флаг C может установиться только при использовании "Flexible second operand", которое у тебя не используется.
Получается во всех случаях все флаги будут сброшены. Хотя может и ошибаюсь, давно не трогал ассемблер.
Онлайн эмуляторов не знаю, но все это неплохо симулируется в keil или IAR.
Рассчитали в оном ещё 3 года назад.
>>298313
Спасибо, я, в принципе сам разобрался. Меня беспокоил тот момент, что флаги, возможно, выставляются и при совпадении одного из битов. По факту же, успешными будут первые два случая, но при этом флаг Z будет сброшен, в третьем он будет выставлен. А я ставил переходы наоборот.
Нашел это в книжке по ассемблеру х86, лол.
конкретно в моём случае это stm32f103 - там можно.
Алсо, Ваше, анонимусы, мнение о российских процах, особенно интересует Элкус и НИИЭТ.
>о российских процах, особенно интересует Элкус
Давно Элкус стал процессоры производить? С Элвисом не спутал случайно?
В АрМовские документы, я именно в виду, в даташите нет
>С Элвисом случайно и спутал, бувае.
Про Элвисы могу пояснить немного, благо на работе как раз используем один их старый процессор.
Документация говно, несколько примеры на ассемблере, имеют "собственную" IDE с gccшными компиляторами. Вроде как сейчас отказались от собственной IDE и просто используют Eclipse с нескучными обоями.
Ещё есть JTAG-дебагер, аж в двух исполнениях: LPT EPP и USB. USBшный с родной IDE так и не завёлся, LPTшный периодически вылетал, теряя связь с процом. Поэтому отладка более-менее возможна только с помощью их же консольной утилитки mdb.
Хотя IDE все равно не нужны, настоящие кулхацкеры программируют в nano.
В старых процессорах типа того, что мы используем ещё и не было третьего состояния для addr и data шин. Мне то похуй, а вот схемотехники ругались.
Короче после того, как мы перешли с TigerSHARCов и Blackfinов на элвисовские поделия, жить стало грустнее.
Надо в ней разобраться извлечь некотороые данные. В IDA кое как разобрался. Проблема в отыскании данных внутри прошивки. Например есть комманда
LDR R1,=2000300
То есть когда проц запускатся в этой точке памяти хранится интересующая меня переменная. Однако вопрос -как отыскать ее в статической прошивке в iDA? Я так понимаю компилятор как-то размещает данные в прошивке в каком-то сегменте. Но как в этом сегменте отыскать?
Какой-то странный адрес. У Cortex M3 по этому адресу ничего не должно быть.
>Я так понимаю компилятор как-то размещает данные в прошивке в каком-то сегменте. Но как в этом сегменте отыскать?
В самом начале это копируется в цикле, смотри в качестве примера https://github.com/pichenettes/stmlib/blob/master/third_party/STM/CMSIS/CM3_f10x/startup/gcc/startup_stm32f10x_md.s
По аналогии наверное несложно выявить этот цикл в других случаях.
Либо можно считать ОЗУ с работающего устройства и добавить в секцию.
Старый Элвис на ваших кортексах? Там же житаг тоже купленный и, наверное, работающий.
У нас использовали Миландровский ве1т, очень долго ебались ребята с и2с или spi, чем-то таким, оказалось, что проблема в ревизии была. Сырые они, слишком молодое производство, хотя у атмелов точно так же бывает. Сейчас прикрутили гсс с эклипсом к ве1т.
С количеством ноликов ошибся, адрес вот такой
LDR R2, =0x20000B9B
>В самом начале это копируется в цикле
Что то я такое предполагал. Но я думал,что все эти данные копируются одним блоком из одной точки памяти в другую. То есть из области flash в область RAM. А видимо для каждой объявляемой и инициализируемой переменной происходит отдельная операция записи. То есть видимо расположение данных в сегменте флеша не соответствет тому в каком порядке они будут в RAM.
>Либо можно считать ОЗУ с работающего устройства и добавить в секцию.
Мне такая иде я приходила в голову. Я только не знаю точно как это сделать. Я предполагаю что например с Jlink'ом можно запустить какойто отладчик, но не знаю будет ли он работать не с соурсом,а с hex или bin
Настрой один из таймеров на нужную частоту и считай свои нано секунды. STM32F334 позволяет считать таймером по 217 пикосекунд.
Сам себе отвечу:
HRTIM1 timer is made of a di
gital kernel clocked at 144
MHz followed by delay lines. Delay
lines with closed loop control guarantee a 217
ps resolution whatever the voltage,
temperature or chip-to-chip manufacturing
process deviation
>Старый Элвис на ваших кортексах? Там же житаг тоже купленный и, наверное, работающий.
Это у них последний проц с арм-ядром. До этого был MIPS пердолинг чем я по сей день и занимаюсь
Вот буквально прямо сейчас, LPTшный jtag перестал определять процессор, просто вот С НИХУЯ. Ещё вчера вечером работал как надо. А мне нужно баг в программке найти, и вот хуй. Придётся сидеть и ждать, когда jtag внезапно начнёт снова работать ведь так уже было, лол.
>LPTшный jtag перестал определять процессор, просто вот С НИХУЯ.
Попробуй соединить корпус компьютера с землей платы. Мне это помогало для клона USB-Blaster.
>на кастомной плате оперативка
Какая оперативка? Отечественной SDRAM нормальных объемов вроде как нет, выходит статическая память?
>MIPS
DSP в них не трогал? Мне интересны возможности DSP ядер в этих процессорах. Например декодер Витерби они с какой скоростью потянут?
>ddr
Тот проект на Атмеле и американщине. На самом деле я разобрался и локализовал проблему, неверно определен некий tlb был.
>Мне интересны возможности DSP ядер в этих процессорах.
http://multicore.ru/mc/data_sheets/Manual_DELcore-30M_App1_031210.pdf
http://multicore.ru/mc/data_sheets/Manual_DELcore-30M_App2_031210.pdf
Ну качай с сайта софтпаки, девкиты без них не делают. А вообще, обычно на а9 накатывают линуксы
Зачем мне система команд? Ну изучу я это, угробив много времени, а потом окажется что оно и близко это не тянет. Мне нужно понять, стоит ли браться за изучение или целесообразнее продолжать все делать на воронежских ПЛИС.
> Cortex A9
> продвинутое байтоёбство
>Расчеты
>Расчеты
>Расчеты
>Расчеты
Ты из какого НИИ им. тов. Подзалупкина вылез? Кому впёрлись твои расчёты когда у нас аппликашка календарика на мобиле загружает под 100% 4 ядра по 1.4Ггц просто красивенькими анимациями и полупрозрачными 3д переходами? Здесь другие ребята, анон, не стоит шутить про расчёты, это тебе не шиндоус 3.1, здесь абстрагируются по-крупному. Здесь пишут на языке богов, где любая сущность объект, где всё наследуется от всего, где просто хэллоуворлд может занимать тысячи строк кода и при внесении пары изменений в коде управлять заодно ядерным распадом в коллайдере, здесь шаблон погоняет кодогенерацией, здесь просто приложение с показом времени отжирает 2 гига оперативы на старте и занимает 500 мегабайт на диске. Тут используют Анриал Енджин только чтобы перемножать пару матриц в его математической библиотеке, здесь гарбадж коллектор трахают прямо в анус, создавая тысячи объектов в каждом кадре и не освобождая ручками ни один.
Забудь ты про свой найтивный код. Здесь совсем другая тема. Тут программируют совсем на другом уровне.
Ты как мой начальник, такой же ограниченный еблан, который с института знаний не получал больше
для прошивки пользуюсь ST-LINK V2 stm8 & stm 32
https://arduino-kit.ru/catalog/id/st-link-v2-programmator-stm8-stm32.-rc050
пробовал прошивать в cocoox, iar, keil. и вроде все чудесно работало (ну в смысле подключение st-link -а видит)при прошивке ошибок никаких не выходило, а в конечном итоге ничего не происходит, скажу сразу, брал экзамплы, и если верить статьям экзамплы рабочие (залей и радуйся), я каким только светодиодом я мигать не пытался(ну всмысле и внешний подключал, и тот что на самой плате присутствует). короче диод на плате просто загарается при подключении питания, но не как не мигает.
У тебя блядь ST-Link, возьми и пошаговую отладку проведи.
Поищи на ютубах каналы narod stream и sappise. Первый использует HAL, второй CMSIS.
МК - STM32F407, использую HAL.
Как это сделать?
Я инициализировал таймер, настроил на 100 мс/прерывание.
Дальше придумал вот что:
Нажимаю кнопку -> идет прерывание по кнопке -> выполняю всё что нужно в обработчике прерываний и в конце включаю таймер и прерывания по нему и запрещаю прерывание по кнопке -> срабатывает прерывание по таймеру, разрешается прерывание по кнопке, выключается таймер и прерывание по этому же таймеру (спорный момент, так и не понял, как это реализовать, чтобы работало), потом происходит выход из функции обработчика прерывания -> ожидание нажатия кнопки.
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0)
{
extern uint32_t temp; temp++;
HAL_TIM_Base_Start_IT(&htim9);
HAL_NVIC_DisableIRQ(EXTI0_IRQn);
}
}
void TIM1_BRK_TIM9_IRQHandler(void)
{
HAL_TIM_IRQHandler(&htim9);
extern uint32_t timer_temp; timer_temp++;
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
//HAL_TIM_Base_Stop_IT(&htim9);
}
Таймер хочу отключать после каждой обработки, чтобы он не смущал МК своими частыми ненужными прерываниями.
Но так ничего не работает. Вот кажется, что ошибка тупая, но в упор не вижу, но ничего не приходит в голову. Через
HAL_NVIC_Dis(En)ableIRQ(TIM1_BRK_TIM9_IRQn); пробовал, тоже не получается.
МК - STM32F407, использую HAL.
Как это сделать?
Я инициализировал таймер, настроил на 100 мс/прерывание.
Дальше придумал вот что:
Нажимаю кнопку -> идет прерывание по кнопке -> выполняю всё что нужно в обработчике прерываний и в конце включаю таймер и прерывания по нему и запрещаю прерывание по кнопке -> срабатывает прерывание по таймеру, разрешается прерывание по кнопке, выключается таймер и прерывание по этому же таймеру (спорный момент, так и не понял, как это реализовать, чтобы работало), потом происходит выход из функции обработчика прерывания -> ожидание нажатия кнопки.
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0)
{
extern uint32_t temp; temp++;
HAL_TIM_Base_Start_IT(&htim9);
HAL_NVIC_DisableIRQ(EXTI0_IRQn);
}
}
void TIM1_BRK_TIM9_IRQHandler(void)
{
HAL_TIM_IRQHandler(&htim9);
extern uint32_t timer_temp; timer_temp++;
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
//HAL_TIM_Base_Stop_IT(&htim9);
}
Таймер хочу отключать после каждой обработки, чтобы он не смущал МК своими частыми ненужными прерываниями.
Но так ничего не работает. Вот кажется, что ошибка тупая, но в упор не вижу, но ничего не приходит в голову. Через
HAL_NVIC_Dis(En)ableIRQ(TIM1_BRK_TIM9_IRQn); пробовал, тоже не получается.
пздц просто нет слоа
А что если реализовать по-другому? Если нажата кнопка, то запустить таймер и считать до 0.2 секунды например, если досчитал то сработало прерывание.
Реализуется так же, как и для любых других МК: после срабатывания прерывания в переменной ставится флаг, что кнопка нажата, но не проверена и запускается таймер на 50-100мс, после которых проверяется, если кнопка все еще нажата - ставится флаг, что кнопка действительно нажата и выполняется действие.
флаг = 0
прерывание:
флаг = 1
таймер = 0
таймер:
если флаг == 1 и кнопка нажата и таймер >= 50
флаг = 2
таймер = 0
если флаг == 3 и кнопка НЕ нажата и таймер >= 50
флаг = 0
таймер = 0
флаг:
если флаг == 2
выполнить действие
флаг = 3
Плата STM32F429I-DISC1
Когда подключаю к пека через порт USB-ST Link, всё работает замечательно. Но когда подключаю в розеку, программа не выполняется.
Пробовал и свой код, и пример из Кейла, результат одинаков. Может надо переключить какую-то перемычку?
Алсо, как правильно запитывать плату? То что я подключаю её в дебаггер для питания, это вообще правильно?
Офигел, кстати, от жирноты кода, генерируемого кубом, пустышка 30кило, когда в тех же условиях готовый семпл USB-HID от Raja весит около 24х.
Пытаюсь хбох джой сделать, но местных правок дескрипторов в семпле Раджи недостаточно, а от попыток понять как сие инициализируется в базирующихся на MX 1,5 проектах мозги в трубочку сворачиваются.
>EmBlocks
Ни разу не трогал это. Но могу посоветовать попробовать тебе использовать мейкфайлы, генерируемые кубом. Или использовать https://github.com/ObKo/stm32-cmake
Нет, это чистый код кубика, сгенерированный под SW4STM32.
char - Contains at least the [0, 255] range
uint8 - 8bit
at least - знаешь как переводится или ардуиншек?
платформы меняются, стандарты меняются, компиляторы меняются, одно остаётся неизменным программы нужно стараться писать правильно а не как ардуинщек
В интернете. Как утка.
Тащемта на бытовых МК никакой разницы маня, потому что uint8_t это переопределение типа unsigned char. Разница может быть только в системах, где char не является 8битным. А компилятор ругается, потому что ему положено, ведь язык Си со слабой типизацией и компилятору надо выплюнуть хотя бы ворнинг о том, что ты хуйню написал.
наверно нет ничего плохого в передачи char в uint8_t плохо задавать тупой вопрос когда компилятор явно кидает варнинг и умывает руки
Тут двачую, да.
передача char в uint8_t является как раз ошыбкой, потому что надо передавать unsigned char
>шизик теоретик
ну это слишком громкое определения для моей скромной персоны, хотя ладно продолжай
Я всего-лишь присрал выхлоб куба к блоксу, а вы тут бучу подняли...
Так-то итак понятно было, что типы разные, но вдруг это нормально. Раз уж в кубе такая хрень.
иди отсюда нахер ,не до тебя сейчас
>char - Contains at least the [0, 255] range
c вики пытался скопировать и промахнулся?
Это unsigned char. Он же uint8_t
А char это -128 +127
на "at least" вообще насрать.
>>300789
Вот открыл я стандарт C99 и ничего подобного не вижу:
>An object declared as type char is large enough to store any member of the basic execution character set. If a member of the basic execution character set is stored in a char object, its value is guaranteed to be nonnegative. If any o ther character is stored in a char object, the resulting value is implementation-defined but shall be within the range of values that can be represented in that type.
То есть возможная знаковость char-а определяется используемой кодировкой (исходников). А разрядность вообще нигде не прописана.
Но мне кажется что у того анона просто инклюдится что-то не то, тем более что это вылезает только при пересборке.
Там насколько мне известно, проблема не в том, что char может быть знаковым, а в том, что он может быть 16 и более бит.
Это надуманная проблема и если ты пишешь под 1 архитектуру это все хуйня.
Добавлю, что насколько мне известно uchar\char пользовались в старом стандарте, когда еще не было uintX всяких.
>Добавлю, что насколько мне известно uchar\char пользовались в старом стандарте, когда еще не было uintX всяких.
В таких случаях ручками писали макролапшу вроде
#if sizeof(int) == 4
typedef int int32
и.т.д.
Нет, надо обратиться к услугам юриста, чтобы он растолковал что там за "аt least" и "large enough" в стандарте. Без этого даже не начинать код писать.
>char - Contains at least the [0, 255] range
Только это не из стандарта, а копипаста с лживой википедии. В стандарте ничего даже отдаленно похожего не написано.
Нужен WiFi мост (пушо WiFi уже есть по хате): что-то типа USB-UART переходника, чтобы команды и данные передавать с ПК на устройство и с устройства на ПК.
В навороченных 3D принтерах такая хуйня есть.
На чём можно запилить? Может какой WiFi модуль, вроде ESP8266 или похожий.
Как тяжело будет написать виндо-софт под это дело (аналог Putty для WiFi, например)?
>аналог Putty для WiFi
Ты придумываешь что-то странное. Putty и так умеет в telnet, ssh, rs-232. Может сделать ssh будет сложновато, но telnet сделать точно несложно. Ну и хватает готовых мостов uart-wifi и uart-ethernet.
>Ты придумываешь что-то странное.
Я просто не знаю, как реализовать то, что я хочу: а именно хотелось бы избавиться от проводов для своей приблуды. А то опять придётся лепить 232-ую микру.
Кажется, нашёл то, что мне нужно:
https://esp8266.ru/forum/threads/proshivka-tcp2uart-perexodnika-s-nastrojkoj-po-web.146/
Но там много вскукареков, что esp8266 устарел и пока подробно не разбирался, бо нету есп.
В таком случае может тебе будет проще взять https://ru.aliexpress.com/item/HLK-RM04/32770432200.html ?
ESP8266 должен работать как мост. Ты ему данные и IP конца моста, а он МК данные.
Хм, а вот это интерсная хуйня, первый раз слышу про нее. У меня есть парочка esp8266, у которых внутри какой-то экзотический core и писать под него ну его нах. Поэтому я планировал его использовать в AT mode, просто как UART. И подключать к STM32 так как пишу под него. А эта новая хуйня и есть STM32F4. Это же охуенно. Спасибо за линк. Весь вопрос - есть ли у них свой внутренний TCP стек как у ESP8266. Но должен быть.
а зачем собирать ядро?простотак
Ну я свои насущные проблемы +\- решил.
Но есть несколько долгосрончых вопросов.
Запуск linux в приближенном к RTOS режиме или достойные RTOS на малину, с которыми не надо пердолится что бы запустить на всяких клонах малины.
Смогу ли я найти инфу в +\- разобранном виде по всяким серьезным интерфейсам (LVDS\NAND) линуксо библиотеки к ним?
А то голые даташиты читать не охота, на это уйдет вечность.
Я начал ебать малину не ради смыва туалета с ПК, но планируется более серьезная задача, с которой самой по себе будет много ебли, добавлять уберпердоливание линукса, который я знаю почти не как - не очень охота.(тут имеется ввиду какие нибудь его глубокие ковыряния\пересборка\написание драйверов).
>RTOS
linux может в RT немного
https://rt.wiki.kernel.org/index.php/Main_Page
>Смогу ли я
нет
>серьезная задача
>не очень охота
ну купи лучше ардуину
>ну купи лучше ардуину
Зачем, у меня 3 отладки с ARM есть.
А если серьезно, я не хочу растягивать на годы, а с ебля с своими драйверами на GPIO или еше что, я боюсь только этим и обернется.
> линукса, который я знаю почти не как
>но планируется более серьезная задача
Синхронный смыв двух туалетов с пк?
а что за задачи?
дешовые CPLD стоят дешевле ардуины
а предиктобал у них лучше любой RTOS
решают любые малинопроблемы
очередной раковый безумный дом с вещевым интернетом
бесполезная никому ненужная хуета без задач
>Запуск linux в приближенном к RTOS режиме или достойные RTOS на малину
Зачем?
>С выборкой и выводом информации на GUI.
Пиши на питоне.
>Пиши на питоне.
GUI и дисплей отдельная отдаленная задача. Если вообще понадобится.
И я слишком люблю фигурные скобки.
>Зачем?
А зачем вообще нужны RTOS? Для того, что бы у меня было гарантированное время реакции на событие.
И какое же это гарантированное время? Как ты его посчитаешь? Как ты вообще сможешь гарантировать, что твой код выполнится за определенное время?
Анонам в ЧПУ и 3Д тредах хватает времени реакции обычного виндовса. Ну будет у тебя под обычным линуксом время реакции не более 0,1 с с вероятностью 99,995%, тебе этого мало?
STM32F429 (Discovery).
Не могу понять, как рисовать на экране? Создаю массив с цветами для пикселей, оно один раз рисуется и всё. Когда изменяю массив, вызываю HAL_LTDC_Redraw - ничего не происходит.
>Я двачер, я знаю, что тебе нужно больше тебя.
Ну серьезно?
>И какое же это гарантированное время?
Необходимо получить, обработать и переправить сигнал с интерфейса на интерфейс, за время не влияющее на время человеческой реакции. Т.е. наверно 10мс, м.б. меньше. Причем получать и обрабатывать надо в тысячу раз чаще, чем пересылать.
>99,995%
Для этого Синхросмыва нужны 100%.
>Для этого Синхросмыва нужны 100%.
100% не будет никогда. Причем даже ардуина будет надежнее, хотя бы из-за меньшего количества деталей.
>на время человеческой реакции. Т.е. наверно 10мс, м.б. меньше.
25 кадров в секунду, не слышал?
> STM32F429 (Discovery)
Мажор ебучий. Я только начал почитывать книги "Си на селе", "Программирование на Си в СССР", а он тут рисувать хочет. Да и вообще, этой йобы хватит ядерным реактором управлять.
400мс время простейшей реакции.
100мс - замедление на 25%.
Какой нахуй 25 кадр? О чем ты вообще? Что твой мозг сам доводит их до беспрерывного движения ты не слыхал? А вставка картинок даже с 60 и больше герцами будет вполне себе заметна.
>100% не будет никогда.
Ну давай еще в философию ударимся.
>Причем даже ардуина будет надежнее, хотя бы из-за меньшего количества деталей.
При этом тормознутее и реализация мульитзадачности отдельная ебля. А писать на CИ все что я хочу это вообще охуеешь.
>начал почитывать
Их уже я прочитывал.
А на пистон пересесть нельзя?
Может знает кто, есть пистон для АРМов.
Ну мне на "работе" её дали. А хули, она же вроде на авито 1.5к стоит, не?
>>301500
Там нет такого понятия как видеопамять, она общая.
Но вообще да, как оказалось надо просто перерисовывать прямо тот массив по-пиксельно (но видимо ещё мемкопи работает хуйпойми как на этой железке).
А вообще как мне подсказали, там у DMA есть функция сдвига массива.
> просто перерисовывать прямо тот массив по-пиксельно
Да ты ебанись. Там целая либа есть с рисовалками линий, кругов, квадратов, заливкой, прозрачностью, слоями, окнами, кнопками, графиками.
> буду рисовать массив попиксельно
Больной ублюдок
Мануалы как-то тяжковато идут. Хотелось бы сначала чего-нибудь попроще, а потом и за мануалы взяться.
Язык английский/русский, без разницы.
narod stream иногда ересь полную гонит - я ему пару замечаний уже писал по поводу или явных ошибоки, или бессмыслицы. Но там дядька адекватный, в залупу не лезет
Ну пока что это самый полный канал про HAL, из тех что я знаю. Буржуи им больше пользуются, но особо делиться не хотят.
Проект прилепил, три минимальных правки на дескрипторы и посылку данных сделал - контроллер инициализируется, но выпадает в hardfaul при отправке нужной строки. Пересоздал на всякий случай - один хер падает. Плюнул, перенёс https://github.com/alextrof94/STM32_CUBE_HAL_TRUESTUDIO_HID_XInput со всеми потрохами, собираю, запихиваю - да ёб её в рот, и тут зависон! Что я делаю не так?
Перенос проще некуда - ручное указывание папок с инклудами, девайн контроллёра и использование сгенерированого кубиком .ld файла.
1. BOOT0 на VDD
2. Reset
3. Льем прошивку посредством Demonstrator через USB-TTL.
Да вот не тут то было... Demonstrator на отрез отказывается видеть МК. Пробовал различные скорости, менял таймауты, пропаивал контакты, пробовал другой адаптер USB-TTL. НИХУЯ.
При этом, данный мк ДО заливки и отладки основной программы, на этой же самой макетке определялся без труда. На аналогичном камне, та же ситуация. До прошивки основной программы(через SWD, среда KEIL5, CUBEMX, ULINK2) он определялся, после работает только через отладчик, через бутлодырь не видится. В даташитах читал, что для работы DFU, прошивка через USB, CAN на Connectivity line МК тактируется от внешенго кварца, и он должен быть на 8 либо 25 Мгц, при загрузке по уарт тактируется от внутреннего на 8, я уже от безвыходки и тот и другой попробовал, результат: ничего. Каким хуем это происходит?! Возможно ли, что при работе через SWD бутлодер затерся? Или же проблема в том что в основной программе тактируюсь я от HSE 12МГц, и UART от PLL?
кто тебе виноват что ты пишеш быдло код?
и твое понятие к битам контроллера сводица к вкл/вкл.
Питание и кварц разрисовывать лень, все стандартно, на каждой ноге VDD по кондеру 100n, на кварце висят 2 кондера по 27pF.
А по делу слабо, Мань?
Понизь частоту и проверь осцилом, что у тебя генерится. Делов-то.
Зашил, мигалку. В отладке все ок. Загрузчик не работает.
>внешенго кварца, и он должен быть на 8 либо 25 Мгц, при загрузке по уарт тактируется от внутреннего на 8
Я понял не так. Делается попытка включить HSE, если включается то определяется относительно HSI к какой из стандартных частот ближе частота кварца. Если кварца нет, то загрузчик сначала подстраивает скорость UART по минимуму ошибок и только потом выдает готовность.
BOOT1 не забыл подключить?
Сейчас отпаял кварц, залил проект из CUBEMX с мигалкой, где тактирование от HSI. BOOT1 нога PB2 припаяна к земле. Мигалка работает, делаю ресет зажимаю BOOT0, мигать прекращает. Парралельно смотрю в ком порт адаптера usb-ttl туда ничего не приходит.
>Парралельно смотрю в ком порт адаптера usb-ttl туда ничего не приходит.
А разве бут-лоадер сам будет что-то слать?
>туда ничего не приходит.
С чего бы должно что-то приходить пока оно не подстроит скорость? А скорость оно не подстроит пока не отправишь какую-то комбинацию достаточное количество раз.
Как вариант можно не ресет жать, а питание передергивать. Я только так и делал (но не с STM32), потому что кнопки на ресете не было.
на 115200 подключился через putty, просто по клаве постучал, в ответ приходит всякий мусор. Попробовал на разных скоростях подключиться через Demonstrator ничего не вышло..
Значит бутлоадер что-то отвечает, ищи проблему или в разводке или в подключении или в юсб-2-сериал
Уже блять реально всё перепробовал. Если uart1 проинициализировать сообщения отправляются и принимеются. Уже реально всё варианты перепробовал.
Была как-то проблема с бутлоадером через usb.
Он при перезагрузке перебирает интерфейсы по-очереди, поэтому проверь входные линии остальных возможных интерфейсов, они должны быть подтянуты.
Проблема решались. Макетку я питал от того же самого usb-ttl. Попробовал запитать отдельно с БП, от переходника только RX TX подключил, все определилось и заработало.
лох
48МГц настройка дефолтная CMSIS, предделители 1/1/2, f103c8
int main(void)
{
//Set_System();
// USB_Interrupts_Config();
// Set_USBClock();
// USB_Init();
RCC_APB1PeriphClockCmd((RCC_APB1Periph_PWR|RCC_APB1Periph_TIM4), ENABLE);
RCC_APB2PeriphClockCmd((RCC_GPIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO), ENABLE);
GPIOA->CRL |= GPIO_CRL_MODE3;
TIM4->DIER |= TIM_DIER_UIE;
TIM4->PSC = 767;
TIM4->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(TIM4_IRQn);
while (1)
{
}
}
void TIM4_IRQHandler(void)
{
TIM4->SR &= ~TIM_SR_UIF;
GPIOA->ODR=GPIO_ODR_ODR3 & ~(GPIOA->IDR & GPIO_IDR_IDR3);
return;
Проблема в том, что ожидаю интервал между прерываниями в 768 тактов (16мксек, 48МГц/62500Гц), а получаю невменяемую хуйню. Где я проебался? Второй пик прямо на 0сек.
48МГц настройка дефолтная CMSIS, предделители 1/1/2, f103c8
int main(void)
{
//Set_System();
// USB_Interrupts_Config();
// Set_USBClock();
// USB_Init();
RCC_APB1PeriphClockCmd((RCC_APB1Periph_PWR|RCC_APB1Periph_TIM4), ENABLE);
RCC_APB2PeriphClockCmd((RCC_GPIO|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO), ENABLE);
GPIOA->CRL |= GPIO_CRL_MODE3;
TIM4->DIER |= TIM_DIER_UIE;
TIM4->PSC = 767;
TIM4->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(TIM4_IRQn);
while (1)
{
}
}
void TIM4_IRQHandler(void)
{
TIM4->SR &= ~TIM_SR_UIF;
GPIOA->ODR=GPIO_ODR_ODR3 & ~(GPIOA->IDR & GPIO_IDR_IDR3);
return;
Проблема в том, что ожидаю интервал между прерываниями в 768 тактов (16мксек, 48МГц/62500Гц), а получаю невменяемую хуйню. Где я проебался? Второй пик прямо на 0сек.
...в общем, стмка попросту не вывозила подтягивать пин с подвешенным к нему контроллёром.
Пагни, насобирал наконец денег на STM32L152, купил, возрадовался, а на сайте ST пишут NRND (нирикамендуют в общем). Как жыть дальше?
Учи и работай то, что есть. Следующие поколения похожи на предыдущие, так что всё путём.
Это предупреждение в основном для тех, кто разрабатывает устройства для производства.
Чтобы не получилось так что для свежеразработанной хуитки не найти деталей.
Простейшая хуйня без HAL - работает, всё кристально понятно.
Беру рантайм либы для 32F429 discovery, хочу ПРОСТО ПОДКЛЮЧИТЬ дисплей по SPI.
Оно вместе с дисплеем тянет кучу всякого говна, включая SPI (логично), DMA, DMA2D, RTOS и кучу прочей хуйни.
После добавления всего-всего попытка собрать проект, и сразу - хуй.
Получаю три десятка ошибок
RTE\Graphics_Display\STM32F429ZITx\LCDConf.c(556): error: #20: identifier "LTDC_PIXEL_FORMAT_ARGB4444" is undefined
Причина - дисплей опирается на либу LTDC (пикрил), которая подключена, в проекте файл есть (пикрил 2), определения констант там есть, толку - нет.
Что за хуйня. препятствующая вкатыванию? Это кривой HAL или мои кривые руки?
Йохохо.
Отлично, нашел файл .h конфигурации HAL, там закомменчены модули DMA2D, LTDC и еще пару, несмотря на то, что в енвайронменте они есть.
Ок, раскомментил. Новая ошибка двойного определения обработчика прерывания систик, охуенно!
Одна - в сгенерированной CubeMX рыбе, а вторая - в недрах библиотек.
Закомментил, закомментил, скомпилировался пустой проект. Залил - не работает нихуя, даже помигать светодиодом, лол.
Порты, помеченные как output в CubeMX таковыми не являются, например.
Потер тестовый проект, ушел спать. Нахуй такое говнокодие?
> Нахуй такое говнокодие?
В стм32 своя атмосфера, ты просто еще не проникся. Я не стал проникаться и закинул девборду нахуй.
>Это кривой HAL или мои кривые руки?
На счет HAL не знаю, т.к. не пробовал. Но сейчас проблемы явно не в нем, а с руками.
>в проекте файл есть (пикрил 2)
Что-то я никакого файла не вижу. Это на кейловский device pack похоже. Проблема может быть из-за того что в этом девайс паке старая версия библиотеки, либо этот девайс пак неправильно работает или он просто не рассчитан на использование с кубом. По моему кейловский девайс пак нельзя использовать вместе с кубом, хотя бы потому что могут не совпадать версии.
Если бы ты пользовался CMake или просто make, то таких проблем точно не было бы.
С компиляцией разобрался, только толку мало (см. >>305585).
Есть еще вопрос - потянул рабочий пример работы дисплея, там довольно компактно всё и работает.
Пикрил:
Я уже выкупил, что пример они собирают с использованием Cube classic, где всё ручками.
Но повторить тот же набор модулей у меня не получается, тянет за дисплеем гору говна.
Как это превозмочь?
Про CMake слышал, но как-то ж блядь работают с кейлом?
Это конфигурация процессора через RTE_Device.h, где руками правишь конфигурацию периферии.
Настраивать GPIO и таймеры там нельзя, но остальное - можно.
Дисплей запустил на чистом проекте, ура, бля.
Как запустил - выяснил, что приложение падает в переполнение стека (дебаггер это хорошо), и скопировал RTE_Device.h с примера.
Разницы между ними я не очень то нашел, но блядь заработало.
Поддерживаю этого анона.
>>305626
>Про CMake слышал, но как-то ж блядь работают с кейлом?
На всякий случай скажу, что кейл использует компилятор http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0472k/index.html Ничто не мешает использовать этот компилятор отдельно.
Будь в шоке и дальше, но на сюда я пришел из божественно простого avrasm и avrc, из леса понятных даташитов, без пердуинских библиотек.
А в среде стм32 мне немного неприятно.
Но это не по теме. Инициализация дисплея проходит, он чернеет, и дальше - нихуя.
Установка цвета, вывод текста - не происходит ничего.
Ладно, перекидываю все исходники из примера в свой проект, включая мейн.с
И... Нет отображения на дисплее.
Как так то?
В ходе экспериментов выяснил, что мой проект компилируется и линкуется любым компилятором, в т.ч. и GCC11, а пример, который работает, НЕ линкуется в gcc11 с таким матюком:
.\Output\Example.axf: Error: L6242E: Cannot link object __gui_sprite.o__ as its attributes are incompatible with the image attributes.
Тихонько подозреваю что у меня все функции гуишной библиотеки заглушены.
>>305607
Вот это что означает? Да, сначала скачал, потом крякал.
>>305675
Ояебу, у самого где-то пылится 429я в блистере, никогда не возникало с ней проблем при использовании куба+кейла. Дисплей как по FSMC так и по SPI работал без проблем с HAL либами, подключал к ней разные камеры по DCMI - тоже никаких проблем, а DMA так это вообще дар божий после 8-битных AVR. Но я в итоге заказал у китайцев кучу разных F0 и F1 20/48/64 и пару 100-ногих , потому что оригинальные платы обвешаны дисплеями и датчиками, которые в большинстве ситуаций нахуй не нужны и проще их на проводках цеплять.
>А в среде стм32 мне немного неприятно.
Видно, как ты разбираешься в документации, таская файлы мышкой туда сюда. Ардуинщик это навсегда.
https://en.wikipedia.org/wiki/Keil_(company)
Keil provides a broad range of development tools like ANSI C compiler, macro assemblers...
In October 2005, Keil (Keil Elektronik GmbH in Munich, Germany, and Keil Software, Inc. in Plano, Texas) were acquired by ARM
Тащемто armcc теперь их собственный компилятор, а вернее сказать keil это ide армовского компилятора.
Это хорошо, но все равно непонятно кто именно теперь разрабатывает этот компилятор. Так то armcc можно скачать с arm.com отдельно от кейла.
>>305719
Это потому что >>305678 Так-то у них на сайте и в справке все это расписано.
>Software Packs may be added any time to MDK-Core or DS-MDK making new device support and middleware updates independent from the toolchain. They contain device support, CMSIS libraries, middleware, board support, code templates, and example projects.
И когда ты выбираешь в кейле свой микроконтроллер, автоматически подключается этот пак, как видно на твоих скриншотах.
Наверное единственный способ не использовать этот пак, это http://www2.keil.com/mdk5/legacy либо использовать armcc отдельно от кейла.
Тебе в:
>либу LTDC (пикрил), которая подключена, в проекте файл есть (пикрил 2)
ничего странным не показалось? Почему это библиотека вдруг подключается одной галочкой?
Теперь arm == keil, у них даже в логотипах на сайте "arm" одинаковым шрифтом написано, ведь arm поглотил keil и сделал свой компилятор официальным для него со всей вытекающей поддержкой.
Спасибо, анончик, с паками и либами на меня более-менее снизошло просветление, разобрался.
Основная проблема вкатывания (а я только вкатываюсь) в STM32 это, сука, три разных подхода к написанию всего. Первые пишут в Standart Perefireal Library, и не пишут, что подход устарел, и даже повторить за ними какой-то пердолинг сегодня невозможно, ибо SPL уже не входит в стандартный пак.
Другие говорят HAL - говно, не предлагая ничего взамен, дрыгают регистрами.
Третьи запускают CubeMX, тыкают мышкой, не публику при этом даже исходников.
Остальное от лукавого.
> Первые пишут в Standart Perefireal Library, и не пишут, что подход устарел
Моё мнение, надо выбрать один подход. Но если ты работаешь с Кубом, будь готов дёргать регистрами, ибо прерывания надо писать короткими, а не как в HAL-е. Если же быстродействие тебе не нужно, и всё, что ты делаешь -- термостатируешь чайники, тогда бога ради, HAL -- это твоё всё. Быстро и удобно.
Моя практика показывает, что в более-менее серьёзных проектах приходится бороться за время выполнения, а значит придётся оптимизировать, т.е. отказываться от лишних абстракций в виде HALа, и даже SPLя, как ни странно.
>отказываться от лишних абстракций в виде HALа, и даже SPLя, как ни странно
Я тебе больше скажу, чтобы понизить частоту с 24 до 16 МГц, при этом уверенно ловить событие, мне пришлось банальный опрос внешнего порта переписать на ассемблере. Такой пердолинг нужен не каждому. Мне был нужен, дабы снизить потребление контроллера. Был вариант использовать NVIC и EXTI, чтобы ловить событие, но тогда, во первых, снизить частоту с 48 (максимума) удалось только до 24... Во вторых, при одной и той же частоте, программный опрос без использования NVIC и EXTI оказался энергетически эффективнее, потребление контроллера что-то в районе 3мА на фоне 5мА (при включенных NVIC EXTI).
>openstm32.org
сам факт того что можно писать код лучше чем индусо-обезьяны, может стригерить арм-консорциум против них, а пока вроде норм всё
Кейл 5, стм32, компилятор тоже пятой версии.
BuffArray->Pointer = malloc (5 + i + 1);
int l = 0;
for (int n = 5 + i; n != 0; n--)
{
BuffArray->Pointer[l] = l + 0x30;
l++;
if (n == 1)
{
char *k = BuffArray->Pointer;
k = realloc(k, (n + 5 + 1));
l--;
if (k)
{
BuffArray->Pointer = k;
n += 5;
l++;
}
}
}
Кейл 5, стм32, компилятор тоже пятой версии.
BuffArray->Pointer = malloc (5 + i + 1);
int l = 0;
for (int n = 5 + i; n != 0; n--)
{
BuffArray->Pointer[l] = l + 0x30;
l++;
if (n == 1)
{
char *k = BuffArray->Pointer;
k = realloc(k, (n + 5 + 1));
l--;
if (k)
{
BuffArray->Pointer = k;
n += 5;
l++;
}
}
}
>Народ, есть ли у использования realloc какие-либо нюансы? Маллок отрабатывает нормально до конца кучи, реаллок же выделяет пока мк в хардфолт не свалится.
>
>Кейл 5, стм32,
Расскажи ка мне, нахуя тебе там понадобилась динамическая память?
>Обработка ответов по юарту. Есть идеи получше?
Вообще, динамическая память, это плохой тон, ибо ресурсов отжирает кучу. Если у тебя не стоит более-менее нормальной ОСи, то в этом нет никакого смысла. Вангую, что у тебя не выше STM32F4xx, а значит и нормальной оси у тебя нет.
Размещай буфер статически такого размера, чтобы тебе хватало. Всё равно у тебя длина ответа не произвольная.
Фрагментации кучи не боишься? Вроде как любой аллокатор не может гарантировать что память со временем не фрагментируется полностью.
>Есть идеи получше?
Без понятия что за ответы тебе нужно обрабатывать, но наверняка можно обойтись каким-нибудь FIFO или стеком.
>>307086
>не выше STM32F4xx, а значит и нормальной оси у тебя нет.
А на F7 значит есть? Там MMU есть что ли?
>Всё равно у тебя длина ответа не произвольная
На некоторые команды я имею примерное представление о длине ответа. Некоторые команды выдают списки зависимого от внешних условий количества строк. И ещё ответ, у которого в начале прописана длина входящих данных, может выпасть в любое время после инициализации.
>>307089
>Фрагментации кучи не боишься?
Подолгу там залёживаться не будет ничего, запросил, получил кучку строк, вывел на экран, юзер выбрал одну, сформировал из неё запрос и очистил всё сразу.
>А на F7 значит есть? Там MMU есть что ли?
На самом деле, вроде даже на 373 можно линух накатить (могу ошибаться), но на 4xx -- точно, у них уже имеется контроллер внешней памяти (а-ля твой MMU), встраивающий её адресно "внутрь" системы, что позволяет процессору не думать, что он работает с внешней памятью. Отсюда появляется возможность понавесить там туеву хучу оперативки и не заморачиваться с её выделением. Соответственно и какой-никакой бизибокс поставить, с менеджером памяти, планировщиком и куртизанками.
>>307112
>ответ, у которого в начале прописана длина входящих данных, может выпасть в любое время после инициализации.
Я вот что тебе скажу про передачу данных. TCP/IP придуман давно и не зря, так же как и RS-232. Я это к чему веду: длина пакета ограничена и не может превышать некоторого значения (это из TCP/IP), а так же существуют методы уведомления вашего собеседника о готовности к принятию новых данных (это от RS-232). Таким образом, всё же известна некоторая максимальная длина пакета. Вот её и надо статически выделить и использовать.
Тебе товарищ выше про фрагментацию кучи всё правильно сказал... Даже если ты программируешь в реальной "ПИсюковой" системе, за такими делами лучше следить.
Касательно "над UART" системой обмена сообщениями: ты сам определяешь протокол, или кто-то его за тебя определил. Невозможно не ограничивать размер сообщения практически, только теоретически. Поэтому проблема высосана из пальца.
Задавай вопросы, аргументируй, спорь, если не всё понятно, я буду рад тебе помочь, Бро! Люблю людей ДУМАЮЩИХ!
>у них уже имеется контроллер внешней памяти (а-ля твой MMU)
Ты все перепутал.
1) У STM32 (и других) контроллер внешней памяти есть почти во всех сериях, но только для многоногих (от 100 выводов) корпусов. Только со SDRAM они работают начиная с F4, но ничего не мешает приделать PSRAM хоть к стоногому STM32F103 и запускать там uclinux.
2) MMU не имеет никакого отношения к контроллеру внешней памяти. Это для организации виртуальной памяти, без которой нормальный линукс не работает. Почитай хотя бы википедию.
3) Хотя через контроллер внешней статической памяти можно цеплять память, чаще его используют для взаимодействия с периферией, например с дисплеем или ПЛИС.
Отвечающее устройство - стороннего производства. RTS/CTS у него при должном подходе заводится, так что подумаю, как это можно использовать если вышестоящие согласятся использовать в проектах более чем 3 ноги, конечно, это разом решит чуть ли не половину проблем.
Тут даже не в длине дело. При большом желании девайс может засрать всю память мк и не пукнуть. Я бы с радостью не использовал аллокейт, но в моих знаниях дыра, а аллокейт предоставляет довольно простой метод выдачи массивов под строки без возни с десятком указателей за присест. Если выделить статику под 5 строк максимальной длины - выйдет 10кб памяти, которая будет пустовать большую часть времени, при этом под случай с выдачей 20 относительно коротких строк он на подходит. Если же готовиться к 20 строкам - это, простите, уже 40 килобайт просранного места, к тому же, столько не будет в мк.
Можно, конечно, парсить прямо в FIFO-буфере, отдавая указатели сторонним функциям, но тогда придется следить, чтоб сверху чего не прилетело.
Так что я дунно, подвязываешь в одном месте - коптишь в другом. Пара советов были бы хороши, конечно.
>Если выделить статику под 5 строк максимальной длины - выйдет 10кб памяти
Ничоси! Это до 2048 символов в каждой строке??? С трудом представляю нахера такое кому-то надо (и, самое главное, нахера так убого сделано).
>я все больше склоняюсь к применению управления потоком
Но вот что я тебе скажу. Скорость по UART вероятно небольшая, и тебе, вероятно, надо не всю строку? Если так -- можно DMA и кольцевой буфер с обработкой по мере заполнения, либо вообще налету обрабатывать прерываниями, но это не так красиво.
Если в Raspberry есть два UART, то почему бы не соединить их входы вместе? Если UART один, то наверное можно через socat, но это вопрос наверное для /s/.
Там просто от приемника идет только один USB провод. Слушай, что-то я совсем туплю сегодня. Можно же обычный разветвитель поставить. Приказать ntpd использовать данные с USB1, а через разветвитель подавать сигналы приемника на USB2 и с него записывать на флеш-накопитель.
Пф.. Что-то совсем от постоянного переедания мозги не работают. Спасибо анон.
Чуть разобрался с таймерами STM32F030F4, pwm работает, но хочется большего. Можно без участия ядра застабилизировать частоту вращения допустим кулера получая от него период вращения с тахометра (1 или 2 имп на оборот) ?
И если да, то усложнить - когда на переключении тахометра по фронтам и спадам висит борода?
>без участия ядра застабилизировать частоту вращения допустим кулера
Нет. Допустим один таймер в режиме ШИМ-выход формирует заполнение для питания, а другой в режиме PWM-input или CC-input, замеряет период вращения. То процессор, всё равно должен читать со входного таймера и корректировать выходной. Можно оптимизировать, обрабатывая это дело в прерывании по Update, а RepetitionCounter сделать таким, как вздумается, чтобы Update происходил не каждый Reset...
Парни, через сколько лет изучения ARM можно начинать подключать дисплей к stm32f429?
Подключил дисплей спустя три дня ебли на ассемблере. Забил хуй и пошел учить Си.
понял... не критично пока, но думалдля саморазвития покопать
Из ассемблерного садика сбежал в ассемблерный монастырь, постигать суть величия ассемблера.
заказать у китайцев
МК F4 (180 МГц): 10-15$
отладочные платы с МК F4 (180 МГц): 27-37$
МК F7 (216 МГц): 14$ и больше, если получится найти поштучные лоты
отладочные платы с МК F7 (216 МГц): 26 и 38$ это 2 самые дешевые (платы для мультикоптера с барометром и еще всякими приблудами на них)
а самая дешевая отладочная плата с приличным F7 без всяких дисплеев и прочего стоит 42$+
https://ru.aliexpress.com/item/Spot-NUCLEO-F767ZI-Nucleo-development-board-STM32F7-series-development-board-new-original-ST/32788206872.html
Совсем больной...
Со стороны контроллера тебе понадобится в зависимости от интерфейса дисплея GPIO с таймером / i2c / FSMC или как там его, LED модуль есть какой-то на старших чипах.
Главное - очень внимательно прочитать доку на дисплей, особенно пример конфигурации. По опыту, большая часть проблем - от криво прочитанного описания интерфейса. Перепутана модель, подтип 8080, неправильное питание - вот это все.
чет дорого, тут вон на алике https://ru.aliexpress.com/item/STM32-Core-Board-Core746I-for-STM32F746IGT6-JTAG-SWD-programming-debugging-interface/32610058702.html?spm=a2g0v.search0104.3.79.8IjgPh&ws_ab_test=searchweb0_0,searchweb201602_2_10152_10151_10065_10344_10068_10342_10343_10340_10341_10543_10084_10083_10307_10301_10059_10314_10534_100031_10604_10103_10607_10606_10142_10125,searchweb201603_25,ppcSwitch_5&algo_expid=e4b23eaf-773f-4ee6-89f6-906208961d4e-15&algo_pvid=e4b23eaf-773f-4ee6-89f6-906208961d4e&priceBeautifyAB=0 есть и за 1.5 или в чем-то подвох?
К такой плате надо отдельно отладчик покупать. А вообще правильно говорили про нуклео, за примерно 2,2к берешь почти топовый камень без лишней обвязки, только кварц, сетка и юсб.
Попробуй J-Link GDB server, у меня нормально работает, правда под виндой. Лет пять назад я пытался пользоваться openocd с эклипсом под виндой - тоже все тормозило.
Возможно неплохим вариантом будет https://www.segger.com/products/development-tools/ozone-j-link-debugger/
Какой самый простой способ организовать такой же обмен данными, но на базе ethernet, т.е. по витой паре? В дальнейшем допились обработчик и делать что-то при получении каких то команд.
Плата Nucleo-F767ZI, rj45 на борту.
Самый простой способ это слать фреймы с собственным произвольным форматом. На компе для приема/передачи таких пакетов можно использовать pcap.
Для начала тебе понадобиться сетевой стек.
Под контроллеры довольно популярные uip и lwip.
lwip мне нравится больше, под него есть годная документация и примеры, а также форум с баг-трекером и вопросами, очень выручал в свое время.
Также у ST есть апноты с использованием lwip в разных режимах, типа TCP-серврер, TFTP и т.д.
Если хочешь обмениваться простыми сообщениями с ПК, то на контроллере подними TCP-сервер, на ПК сделай клиент на удобном ЯПе, подключайся к контроллеру и шли на него свои пакеты.
Сразу хочу предупредить про алгоритм Нейгла. Это такая штука, которая повышает КПД работы сети. Для этого она ждет пока накопится некоторое количество данных на передачу и только потом передает. То есть если твои пакеты будут мелкого размера, то они:
а) не будут отправляться сразу;
б) когда отправятся, они будут склеены в один большой пакет.
Поэтому иногда его надо будет вырубать.
спасибо, пошукаю в эту сторону
Значит таки сервер поднять придется, хорошо, и да, я тоже смотрел в сторону LWIP.
Отдельное спасибо за напоминания алгоритма Нейгла, для моих задач как раз принципиальна моментальная реакция МК на получаемые с ПК команд. Команды как правило не более 20 символов.
Мог бы ты анончик, написать мне в телегу @krounis, дабы я не плодил треды и вопросы в дальнейшем?
Для таких требований, кстати, лучше подходит USB hid. У него в отличие от CDC гарантированное время отклика, т.к. он работает на interrupt фреймах, при размере пакета от 32 байт - на USB fs
так блять кто сказал алгоритм Нейгла? это ёбаная хуета кототорую нужно постоянно отключать опцией nodelay? Нахуй это нужно применительно к микроконтролерам?
согласен, но мне нужна передача именно по витой паре, т.к. пк и устройство на мк может находиться достаточно далеко друг от друга, USB такую длину не выдержит
UART-a хватит
ТЗ обязывает организовать связь именно по сети
> в чем-то подвох?
«2.0mm header pitch» Заебёшься искать подходящие ответные разъёмы. Плюс вставлять/вытаскивать их надо аккуратно — из-за трения оно получается очень тугое и можно легко ножки погнуть.
Мимовладелец похожих платок от WaveShare
Можно использовать утилиту fbi:
sudo fbi -d /dev/fb8 -T 1 -noverbose -a 1-img.jpg
А можно писать во фреймбуфер напрямую:
tail --bytes 153600 img.565 > /dev/fb8
только картинка должна быть 16-битной и в формате RGB565.
Но с цветами какая-то проблема, будто половина их съедается. Может проблема в битности, никто не знает?
Второй пик для сравнения с оригиналом.
А что насчёт libopencm3? Выглядит на первый взгляд неплохо -- нет монструозных обработчиков с опросами регистров, кучи обёрток и прочих прелестей hal'а, там вроде даже и обработчики прерываний самому писать придётся. Но при этом функций для работы с периферией достаточно. Чем-то на spl старый похоже, по-моему. Мне пока не доводилось использовать.
Может быть, нужно проверь другие варианты (например, 555)
Начал ваять ЙОБУ на стм32а429 и ожидаемо обосрался. Подрубил SDRAM, LCD RGB666, собрался подрубать Ethernet, а тут вылезли конфликты пинов. Даже в RMII-режиме TX_EN либо конфликтует с В3-дисплея, либо с шиной данных SDRAM. Шо делать-тоооо?
>Шо делать-тоооо?
Пробуй разрешить конфликты, используй STM32CubeMX. Если не удаётся разрешить в выбранном корпусе -- бери корпус с бОльшим количеством ног.
>с бОльшим количеством ног.
Уже допер. 429ZIT уже лежит в коробке, а с большими ногами покупать надо. Захуярю пробу без Ethernet, подрублю ESP для сети. Следующую полоумную избу буду делать на более многоногом.
Основная проблема плюсов на мк - менеджмент кучи. А для этого хочется иметь мму и операционную систему.
Да я просто сидел на пропёрженной кафедре и писал простое говно под совсем простые мк, а сейчас ушёл в другое место, а тут и железки другие, и задачи другие, а я блять как только что с пальмы слез.
Снова мудило с полоумной избой выходит на связь. Нашел два стула:
1. 180Махов, 176 пинов, 2Мб флеша
2. 216Махов, 208 пинов, но с 1Мб флеш
?
Не забудь про периферию, чтоб было нормальное колличество таймеров (хотя бы больше 8) и всего остального что тебе нужно.
>Нахуя? Вы чо тут, ебанулись?
Не всё можно делать софтверно в определённых условиях, мой юный друг!
Охуеть, а расскажи, зачем тебе такая частота для избы? Ты там распознавание образов делать собираешься что ли?
>тебе такая частота для избы?
RTOS шоб быстрый был. Есть еще материнка древнего промкомпа с РС/104, думаю может не ебать моск и на нем собрать. Спаять только дочерние платки, изучить х86 ASM + С++ и ну его нахуй эти контроллеры.
Тебе для умного дома вайфик или блутус не нужен будет? Наверняка нужен будет. Почему не выбрал esp какой-нибудь новый? Там вроде весьма мощный камень, памяти на борту достаточно и прямо в чипе wifi и Bluetooth трансиверы. В библиотеках стек протоколов реализован даже, только там закрыто всё, как я понял.
>Там вроде весьма мощный камень
Мне нужен LCD-контроллер для управления 7" дисплеем + тачскрином. Вайфик и блютус даром не надь. Мне его главное к свитчу домовой сети подрубить.
Нужно прицепить к нему 3 rgb светодиода, без внешнего блока питания. Напряжение максимум 5V (вообще 3,7 от аккумулятора, ну да пофиг, плата под всё это будет напечатана, но не сильно больше esp по размерам. Так что контроллерами напряжения можно обмазаться). Какие светодиоды брать и как подключать?
Нужно сделать себе на коленке примитивный девайс, который будет играть роль ответной части при общении по эзернету через udp. То есть, я этот девайс подключаю к пекарне и оно может коннектиться и читать/писать в udp сокеты.
Заскочил в магаз, взял NUCLEO-F746ZG.
Я мог бы это сделать на ПЛИС, ибо есть какой-то милипиздрический опыт работы с LwIP под микроблейзом. Но разница в цене в 10+ раз.
В общем, сейчас у меня есть F746ZG и ноут с xubuntu. Все это люто интересно, но сейчас просто нету времени на эксперементы. Какой путь наикратчайший?
>достаточно ли будет
NYET. Нужно будет задействовать цвета в режимах RGB 888 или 666 или 565, Vsync, Hsync, DOT_Clock, DE. Для попроще купи дисплей со встроенным контроллером.
Есть дисплей на ili9325, он работает хорошо потому что под него были драйвера fbtft, но он маленький. Купил этот, думал раз интерфейс DPI, то он проще должен быть чем SPI. Но тут я обосрался.
Я вообще думал что чтобы закрасить экран одним цветом, зеленым например, нужно на пины G отправить единицы, на R и B нули. Отправить кратковременную единицу на CLK и в этот момент данные с пинов цветов должны считаться и закрасить первый пиксель в зеленый цвет. А потом просто повторить эту операцию 480x272 раз.
Я совсем далек от истины, да?
> да?
Да. Там идет последовательность считывания данных с RGB. Типа для 565 R3 R4 R5 R6 R7 G2 G3 G4.... ну ты понел. Плюс еще сколько-то строк пропускается сверху и снизу, и сколько-то пикселей пропускается справа и слева от кадра. Короче нужно читать даташит на дисплей. Я кстати такой-же жду, буду подрубать к STM32F429IIT. Там проще.
Понятненько. Ну ладно, спасибо за разъяснения.
где взять документацию и примеры использования lwip? и вообще как его юзать
>где взять документацию
На официальном сайте вестимо.
https://savannah.nongnu.org/projects/lwip/
Изучи ардуино библиотеки, там встречается много ооп, на крестах. А вообще, ооп на мк - зло, код раздувается и жрет много флеша, хотя в случае с стм32 - похуй, там и так флеша десятки-сотни кб, а то и несколько мб.
Какие именно концепции ООП ты имеешь в виду?
И какие микроконтроллеры?
Маленькие или большие?
Если маленькие, то лучше C.
Алсо, полезно понимать, что "использование объектов и подходов ООП" != "ООП и кресты".
ООП можно делать на любом языке абсолютно.
Просто некоторые для этого больше подходят.
Алсо, поинтересуйся, почему ядро Linux это очень большая и сложная программа написано на C. И что сказал Линус Торвальдс, когда кто-то предложил ему делать это на крестах.
>Алсо, поинтересуйся, почему ядро Linux это очень большая и сложная программа написано на C.
Потому что кривое говно, с насранной поверх него плеядой катях поменьше. Когда 15 лет стабильно ноудрайверс нихуя не работает и нужно танцы с бубном - это диагноз.
> И что сказал Линус Торвальдс, когда кто-то предложил ему делать это на крестах.
Это когда ему про гит писали? Включил свой пердак в режим максимального форсажа, как обычно.
>ООП можно делать на любом языке абсолютно.
Можно, но зачем изобретать велосипед? Хочешь ООП - бери язык с готовыми конструкциями под это. Ведь у ООП вся суть - готовая высокоуровневость. И да, ООП имеет смысл, если разрабатываешь какую-нить RTOS под жирный мк с периферией, а под мелочевку (8 битные мк и иже с ними) это во многих случаях нерациональный подход.
Да, про Git, я перепутал, думал, что про ядро.
On Wed, 5 Sep 2007, Dmitry Kakurin wrote:
>
> When I first looked at Git source code two things struck me as odd:
> 1. Pure C as opposed to C++. No idea why. Please don't talk about portability,
> it's BS.
YOU are full of bullshit.
C++ is a horrible language. It's made more horrible by the fact that a lot
of substandard programmers use it, to the point where it's much much
easier to generate total and utter crap with it. Quite frankly, even if
the choice of C were to do nothing but keep the C++ programmers out,
that in itself would be a huge reason to use C.
Лолище, просто.
Ты, кстати, не Дмитрий Какурин?
>у ООП вся суть - готовая высокоуровневость
Спешите видеть. Битоёбы рассуждают о высокоуровневости.
>ООП имеет смысл, если разрабатываешь какую-нить RTOS под жирный мк с периферией
RTOS и ООП, пиздец ты бредишь. Скорее ты хотел сказать, что без ОС нет смысла в ООП, ибо память туда сюда шатать надо, а для этого нужен контроллер пожирнее.
>под мелочевку (8 битные мк и иже с ними) это во многих случаях нерациональный подход
Как правило архитектура (разрядность, ага), объём ОЗУ, тактовая частота определяют применимость нормальной ОС и С++.
> Какие именно концепции ООП ты имеешь в виду?
Ну в основном к микроконтроллерам наверно применимо просто грамотное структурирование данных и функций для работы с ними или типа того, всё остальное уже, я думаю, второстепенно.
>И какие микроконтроллеры?
STM32 everywhere от f2 и до весьма жирного f7.
>"использование объектов и подходов ООП" != "ООП и кресты"
Так я же специально написал про концепции ООП, а не про c++ на микроконтроллерах и использование всей парадигмы целиком.
>>310994
>Скорее ты хотел сказать, что без ОС нет смысла в ООП, ибо память туда сюда шатать надо
Аллокаторов отдельно от ртос не существует разве?
>архитектура (разрядность, ага), объём ОЗУ, тактовая частота определяют применимость нормальной ОС и С++
Насчет ос согласен, а плюсы можно использовать частично и обходить проблемы с динамическим выделением памяти. Во многом же реализация одного и того же на C и на плюсах после компиляции не сильно будет отличаться в объёме и в скорости выполнения. Но есть, конечно, и прямо противоположные вещи.
>>311000
Вот книжка про ООП в Си:
https://www.cs.rit.edu/~ats/books/ooc.pdf
Вот на быдлохабре пишут:
https://habrahabr.ru/post/263547/
Можно ещё погуглить "oop in c"
Неплохо, спасибо. Надо почитать. Но вот меня это интересует еще в контексте микроконтроллеров. Стоит ли, и, если стоит, то как правильно описывать работу с внешней периферией структурами, пытаясь максимально абстрагировать один слой от другого? Прихожу к выводу, что чем универсальнее код, тем он становится больше, сложнее и неповоротливее, зато куда проще в конечном использовании на уровне уже самого приложения, так сказать, но со своими минусами, разумеется. Где-то ведь должна быть золотая середина?
Я дроблю так:
- хедер с макросами для дрыгания логическими сигналами в контексте схемы электрической принципиальной, типа PWR5V_ON, PWR5V_OFF
- модуль с функциями конфигурации профилей IO, например настройка шин I2C, конфигурации аналогового тракта. Тут же обязательно функция начальной инициализации всех IO
- набор модулей - протоколов. Например, 1wire, i2c (ненавижу ST-шный модуль, юзаю ногодрыг)
- набор модулей для работы с перифеийными микросхемами. Типа контроллер батареи, флешка, акселерометр и т.д.
- функциональные модули, соответствующие режимам работы прибора
- архитектурные модули - тут уже в концепции ОС или твой циклы со свитчами
Вам в ардуино тред, молодой человек
Ну и я примерно также стараюсь разбивать код в проекте. Но вот если с интерфейсами типа uart или spi более-менее всё понятно, то как написать универсальную структуру/класс для использования таймера? Чтобы и шим, и всё остальное было. Или нет смысла писать универсально, и отдельно описывать структуру для, например, шим, отдельно для чего-то ещё?
Алсо, вот если я на C пишу структуру, то тут всё понятно - в ней вместо некоторых методов будут указатели на функции, которые я буду подставлять уже в зависимости от реализации. Ну, например, для spi я в отдельных модулях пишу функцию, которая дрыгает нужным пином для CS, а сам модуль, в котором описана инициализация и остальная работа с spi про эти пины ничего не знает. Как быть в C++? Запихивать конкретные пины в реализацию класса явно плохая идея, а оставлять вместо методов указатели вроде как нарушает принцип инкапсуляции, если я правильно понимаю.
>Запихивать конкретные пины в реализацию класса явно плохая идея, а оставлять вместо методов указатели вроде как нарушает принцип инкапсуляции, если я правильно понимаю.
Не надо указатели в данном случае.
Это вообще хуета будет, а не ООП.
Надо либо полиморфные методы, либо конфигурировать экземпляр класса перед использованием (в конструкторе или factory-методе или в builder'е).
Либо применить паттерн "Template Method" (метод, использующий абстрактные методы данного класса, которые будут реализованы в производных классах).
Либо ещё как-то.
Алсо, мне вот этот вот момент:
>Ну, например, для spi я в отдельных модулях пишу функцию, которая дрыгает нужным пином для CS, а сам модуль, в котором описана инициализация и остальная работа с spi про эти пины ничего не знает.
кажется каким-то подозрительным. Можно пример?
Не надо полный код, дай интерфейс, в общих чертах.
Я бы, например, предложил сделать два класса:
SpIDevice(piny, huiny) и SpiController(new SpiDevice(...)).
Т.е. ты абстрагируешь пины-хуины в SpIDevice и передаёшь его (уже сконфигурированным) для использования в контроллер, который его и юзает, ничего не зная о пинах, и дёргая его "среднеуровневые" методы.
Т.е. Application --uses--> SpiController --uses--> SpiDevice --uses--> [hardware]
Алсо - нормальное ООП это не какие-то охуенные универсальные объекты, а наоборот - система хорошо структурированных специализированных объектов, использующих друг друга. Всё собирается как из кубиков, в том виде, в каком тебе надо в данном приложении.
Это называется агрегация или композиция (это несколько разные вещи).
И интерфейсы отдельно, а реализации - отдельно. Дальше - ты делаешь, например, серию factory-методов в каком-то классе, которые тебе возвращают один и тот же интерфейс, но с разными реализациями. Напр. ITimer с методами start() и onTick(...) и реализации YobaTimer, SukaTimer etc. А твой основной код юзает ITimer, и ему похуй на реализацию.
Алсо - делегирование очень полезный приём. Я бы сказал, один из основных. Погугли.
Это если тебе надо обернуть чужой класс (закрытый, ты не можешь его переписать) или несколько классов в свой интерфейс.
Короче, сначала задрачивай ООП как таковое, базовые концепции, а не в применении к контроллерам. К контроллерам оно само потом применится.
В качестве языка для подходов ООП как такового лучше всего использовать Java и материалы по ООП на Java.
Алсо, попробуй найди книжку "Объектно-ориентированный анализ и проектирование" Грейди Буча (это патриарх ООП).
Это старая книжка, середины 90-х. Очень толковая книга и примеры там на C++. И в качестве предметной области, как раз, используется управление всякой фигнёй типа теплиц или лифтов. Не смотря на то, что книга старая, она весьма годная, т.к. рассказывает о подходах а не о кодировании.
Есть ещё новая книжка с таким названием, продаётся сейчас. Но, там другой автор и я её не читал.
>Запихивать конкретные пины в реализацию класса явно плохая идея, а оставлять вместо методов указатели вроде как нарушает принцип инкапсуляции, если я правильно понимаю.
Не надо указатели в данном случае.
Это вообще хуета будет, а не ООП.
Надо либо полиморфные методы, либо конфигурировать экземпляр класса перед использованием (в конструкторе или factory-методе или в builder'е).
Либо применить паттерн "Template Method" (метод, использующий абстрактные методы данного класса, которые будут реализованы в производных классах).
Либо ещё как-то.
Алсо, мне вот этот вот момент:
>Ну, например, для spi я в отдельных модулях пишу функцию, которая дрыгает нужным пином для CS, а сам модуль, в котором описана инициализация и остальная работа с spi про эти пины ничего не знает.
кажется каким-то подозрительным. Можно пример?
Не надо полный код, дай интерфейс, в общих чертах.
Я бы, например, предложил сделать два класса:
SpIDevice(piny, huiny) и SpiController(new SpiDevice(...)).
Т.е. ты абстрагируешь пины-хуины в SpIDevice и передаёшь его (уже сконфигурированным) для использования в контроллер, который его и юзает, ничего не зная о пинах, и дёргая его "среднеуровневые" методы.
Т.е. Application --uses--> SpiController --uses--> SpiDevice --uses--> [hardware]
Алсо - нормальное ООП это не какие-то охуенные универсальные объекты, а наоборот - система хорошо структурированных специализированных объектов, использующих друг друга. Всё собирается как из кубиков, в том виде, в каком тебе надо в данном приложении.
Это называется агрегация или композиция (это несколько разные вещи).
И интерфейсы отдельно, а реализации - отдельно. Дальше - ты делаешь, например, серию factory-методов в каком-то классе, которые тебе возвращают один и тот же интерфейс, но с разными реализациями. Напр. ITimer с методами start() и onTick(...) и реализации YobaTimer, SukaTimer etc. А твой основной код юзает ITimer, и ему похуй на реализацию.
Алсо - делегирование очень полезный приём. Я бы сказал, один из основных. Погугли.
Это если тебе надо обернуть чужой класс (закрытый, ты не можешь его переписать) или несколько классов в свой интерфейс.
Короче, сначала задрачивай ООП как таковое, базовые концепции, а не в применении к контроллерам. К контроллерам оно само потом применится.
В качестве языка для подходов ООП как такового лучше всего использовать Java и материалы по ООП на Java.
Алсо, попробуй найди книжку "Объектно-ориентированный анализ и проектирование" Грейди Буча (это патриарх ООП).
Это старая книжка, середины 90-х. Очень толковая книга и примеры там на C++. И в качестве предметной области, как раз, используется управление всякой фигнёй типа теплиц или лифтов. Не смотря на то, что книга старая, она весьма годная, т.к. рассказывает о подходах а не о кодировании.
Есть ещё новая книжка с таким названием, продаётся сейчас. Но, там другой автор и я её не читал.
Я посмотрю обязательно, но хотелось бы больше инфы собрать. Они действительно годно написаны по сравнению с hal от stm? У них вот тоже была попытка заключить всё в структуры, но вышло довольно хуёвенько как с точки зрения самих структур, так и с точки зрения реализации работы с периферией.
>>311412
> конфигурировать экземпляр класса перед использованием
Ты имеешь в виду непосредственно в реализации класса это задавать?
> метод, использующий абстрактные методы данного класса, которые будут реализованы в производных классах
Думал над этим, но тоже странно получается - ты описываешь работу с spi, но для spi1 у тебя один класс-наследник, для spi2 - другой, так?
> Можно пример?
Ну наверно как-то так: https://pastebin.com/S5cbr2bj
В таком случае получается нарушение инкапсуляции, но с другой стороны модуль не знает ничего про пины. С пинами пример не удачный, всё-таки, потому что пин можно передать в структуру. Ещё там нужен какой-то коллбек для сигнализации окончания передачи или ошибки, который уже может быть абсолютно разным в зависимости от наличия ОС и её реализации, вот как это организовать по-другому мне не понятно.
> абстрагируешь пины-хуины в SpIDevice и передаёшь его (уже сконфигурированным) для использования в контроллер
Ну, в принципе, можно их и объединить в один метод, один хуй spi связан неразрывно с CS, просто тогда эти пины будут храниться где-то в структуре самой, передаваться в виде аргументов в функцию инициализации, а знать про то, какие пины для этого используются, получается, будет уровень выше, который уже непосредственно с внешней периферией работает. Но это тоже странно выглядит, потому что чисто теоретически этому модулю вообще должно быть похрену по какому он интерфейсу подключен и вся эта кухня.
> Всё собирается как из кубиков, в том виде, в каком тебе надо в данном приложении.
Похоже, в этом и проблема, потому что у меня сложилось представление, что суть ООП в том, чтобы абстрагировать вещи друг от друга, но при этом написать их максимально гибкими и универсальными. То есть, на тот же таймер один класс как для измерения времени, так для периодических прерываний, так и для шим. Но когда я попытался продумать интерфейс, у меня закипела башка, потому что получается слишком сложно и дохуя всего. Выходит, лучше для каждого сценария использования лучше писать отдельную реализацию?
> Есть ещё новая книжка с таким названием, продаётся сейчас. Но, там другой автор и я её не читал.
Спасибо за совет, лучше возьмусь за неё, потому что плюсы и реализацию ооп в них я хотя бы немного знаю, а java видел одним глазом. На либгене нашёл аж три издания этой книги, и последнее 2008 года, но там помимо Буча есть другой автор. Второе лучше взять тогда?
Я посмотрю обязательно, но хотелось бы больше инфы собрать. Они действительно годно написаны по сравнению с hal от stm? У них вот тоже была попытка заключить всё в структуры, но вышло довольно хуёвенько как с точки зрения самих структур, так и с точки зрения реализации работы с периферией.
>>311412
> конфигурировать экземпляр класса перед использованием
Ты имеешь в виду непосредственно в реализации класса это задавать?
> метод, использующий абстрактные методы данного класса, которые будут реализованы в производных классах
Думал над этим, но тоже странно получается - ты описываешь работу с spi, но для spi1 у тебя один класс-наследник, для spi2 - другой, так?
> Можно пример?
Ну наверно как-то так: https://pastebin.com/S5cbr2bj
В таком случае получается нарушение инкапсуляции, но с другой стороны модуль не знает ничего про пины. С пинами пример не удачный, всё-таки, потому что пин можно передать в структуру. Ещё там нужен какой-то коллбек для сигнализации окончания передачи или ошибки, который уже может быть абсолютно разным в зависимости от наличия ОС и её реализации, вот как это организовать по-другому мне не понятно.
> абстрагируешь пины-хуины в SpIDevice и передаёшь его (уже сконфигурированным) для использования в контроллер
Ну, в принципе, можно их и объединить в один метод, один хуй spi связан неразрывно с CS, просто тогда эти пины будут храниться где-то в структуре самой, передаваться в виде аргументов в функцию инициализации, а знать про то, какие пины для этого используются, получается, будет уровень выше, который уже непосредственно с внешней периферией работает. Но это тоже странно выглядит, потому что чисто теоретически этому модулю вообще должно быть похрену по какому он интерфейсу подключен и вся эта кухня.
> Всё собирается как из кубиков, в том виде, в каком тебе надо в данном приложении.
Похоже, в этом и проблема, потому что у меня сложилось представление, что суть ООП в том, чтобы абстрагировать вещи друг от друга, но при этом написать их максимально гибкими и универсальными. То есть, на тот же таймер один класс как для измерения времени, так для периодических прерываний, так и для шим. Но когда я попытался продумать интерфейс, у меня закипела башка, потому что получается слишком сложно и дохуя всего. Выходит, лучше для каждого сценария использования лучше писать отдельную реализацию?
> Есть ещё новая книжка с таким названием, продаётся сейчас. Но, там другой автор и я её не читал.
Спасибо за совет, лучше возьмусь за неё, потому что плюсы и реализацию ооп в них я хотя бы немного знаю, а java видел одним глазом. На либгене нашёл аж три издания этой книги, и последнее 2008 года, но там помимо Буча есть другой автор. Второе лучше взять тогда?
>суть ООП в том, чтобы абстрагировать вещи друг от друга, но при этом написать их максимально гибкими и универсальными.
Нет.
То, о чём ты пишешь, это, скорее, принципиальный подход к программированию вообще. А ООП - это способ реализации - того или иного подхода.
Так вот, такой подход (писать один универсальный класс/функцию/метод/структуру) - хуёвый и затратный. Так лучше не делать. И начинающих специально учат не валить всё в одну кучу, а разбивать большие функции на более мелкие, например.
Более того - ООП, как раз, и включает в себя инструменты, облегчающие написания узко-специализированного кода, но, без присущего использованию такого кода геморроя. Это - интерфейсы, наследование и полиморфизм.
Т.е. ты пишешь _разные_ реализации, которые _ведут_себя_ одинаково. И это поведеие описано в интерфейсе или абстрактном классе. Более того, вся эта магия может быть спрятана в библиотеке, и снаружи это выглядит как некая универсальная вещь. Но, внутри будет куча специализированных объектов. Смотри исходники.
Если в двух словах - движок (рантайм) ООП незаметно жонглирует указателями на функции и структуры, создавая у тебя иллюзию, что всё работает само, что есть какие-то "объекты" и прочее, в этом смысл ООП.
Ещё надо сказать, что "ООП" тоже бывает очень разное.
Раньше, в 90-е, был популярен подход "наследования". Использовалось множественное наследование (один класс наследует нескольким). Но, множественное наследование - зло (погугли, diamond problem etc). И когда появилась Java, то там специально отказались от него. Т.е. Java-класс может наследовать только одному классу, но, при этом, реализовывать несколько интерфейсов. Интерфейс в Java - это чистая абстракция поведения, без реализации. Вся реализация - в производных классах. Это сложнее писать, но, нет проблем, присущих множественному наследованию. Для упрощения используют делегирование - подход, облегчающий написание поддержки одним классом нескольких интерфейсов. Общий функционал выносят в отдельные классы, затем из внешних методов (реализующих интерфейс) дёргают внутренние экземпляры этих классов (делегируют им выполнение работы).
Так вот, классы-монстры, множественное наследование и т.п. - это подход 90-х.
Сейчас мир стал гораздо более сложным и быстро меняющимся, и писать один класс на все случаи жизни - это больше не работает. Просто невозможно стало так писать.
Сейчас - стараются писать "на интерфейсах" - чтобы можно было менять конкретные реализации, не трогая остальной код. Используют кучу мелких классов, работающих как кубики лего. Стараются, по возможности, делать методы "чистыми функциями" - без побочных эффектов. И т.д. Ключевые слова - "маленький", "лёгкий", "быстрый", "подвижный", "гибкий" и т.п. И при этом - используют несколько слоёв (уровней) абстракций. Т.е. код растёт не в "ширину", а в "глубину", как-то так.
Это и даёт универсальность, но это немножко не та универсальность о которой говоришь ты.
Ты, насколько я понял, сишник? И плюсы не знаешь?
Я бы, всё же, посоветовал (именно для тренировки) взять не C++, а Python, например.
Не на голом контроллере, а на пк или на Raspberry Pi.
Питон, по сути, это такой Си, но с ООП и динамический.
И идеально интегрируется с сишными либами, специально для этого и задуман. Ты сможешь сам легко писать биндинги к нужным тебе либам, если их ещё нет.
На контроллерах есть MicroPython, но, в продакшн его не используют, ибо сыроват, хотя х.з., может и начали уже.
А в плюсах - высокий порог вхождения. И придётся бодаться с кучей вещей, не имеющих отношения к ООП.
>суть ООП в том, чтобы абстрагировать вещи друг от друга, но при этом написать их максимально гибкими и универсальными.
Нет.
То, о чём ты пишешь, это, скорее, принципиальный подход к программированию вообще. А ООП - это способ реализации - того или иного подхода.
Так вот, такой подход (писать один универсальный класс/функцию/метод/структуру) - хуёвый и затратный. Так лучше не делать. И начинающих специально учат не валить всё в одну кучу, а разбивать большие функции на более мелкие, например.
Более того - ООП, как раз, и включает в себя инструменты, облегчающие написания узко-специализированного кода, но, без присущего использованию такого кода геморроя. Это - интерфейсы, наследование и полиморфизм.
Т.е. ты пишешь _разные_ реализации, которые _ведут_себя_ одинаково. И это поведеие описано в интерфейсе или абстрактном классе. Более того, вся эта магия может быть спрятана в библиотеке, и снаружи это выглядит как некая универсальная вещь. Но, внутри будет куча специализированных объектов. Смотри исходники.
Если в двух словах - движок (рантайм) ООП незаметно жонглирует указателями на функции и структуры, создавая у тебя иллюзию, что всё работает само, что есть какие-то "объекты" и прочее, в этом смысл ООП.
Ещё надо сказать, что "ООП" тоже бывает очень разное.
Раньше, в 90-е, был популярен подход "наследования". Использовалось множественное наследование (один класс наследует нескольким). Но, множественное наследование - зло (погугли, diamond problem etc). И когда появилась Java, то там специально отказались от него. Т.е. Java-класс может наследовать только одному классу, но, при этом, реализовывать несколько интерфейсов. Интерфейс в Java - это чистая абстракция поведения, без реализации. Вся реализация - в производных классах. Это сложнее писать, но, нет проблем, присущих множественному наследованию. Для упрощения используют делегирование - подход, облегчающий написание поддержки одним классом нескольких интерфейсов. Общий функционал выносят в отдельные классы, затем из внешних методов (реализующих интерфейс) дёргают внутренние экземпляры этих классов (делегируют им выполнение работы).
Так вот, классы-монстры, множественное наследование и т.п. - это подход 90-х.
Сейчас мир стал гораздо более сложным и быстро меняющимся, и писать один класс на все случаи жизни - это больше не работает. Просто невозможно стало так писать.
Сейчас - стараются писать "на интерфейсах" - чтобы можно было менять конкретные реализации, не трогая остальной код. Используют кучу мелких классов, работающих как кубики лего. Стараются, по возможности, делать методы "чистыми функциями" - без побочных эффектов. И т.д. Ключевые слова - "маленький", "лёгкий", "быстрый", "подвижный", "гибкий" и т.п. И при этом - используют несколько слоёв (уровней) абстракций. Т.е. код растёт не в "ширину", а в "глубину", как-то так.
Это и даёт универсальность, но это немножко не та универсальность о которой говоришь ты.
Ты, насколько я понял, сишник? И плюсы не знаешь?
Я бы, всё же, посоветовал (именно для тренировки) взять не C++, а Python, например.
Не на голом контроллере, а на пк или на Raspberry Pi.
Питон, по сути, это такой Си, но с ООП и динамический.
И идеально интегрируется с сишными либами, специально для этого и задуман. Ты сможешь сам легко писать биндинги к нужным тебе либам, если их ещё нет.
На контроллерах есть MicroPython, но, в продакшн его не используют, ибо сыроват, хотя х.з., может и начали уже.
А в плюсах - высокий порог вхождения. И придётся бодаться с кучей вещей, не имеющих отношения к ООП.
Пример использования ООП для ввода-вывода (Java):
Допустим, нам нужно читать текстовые (символьные) данные из разных источников.
Например, с целью подсчёта количества символов.
Источники - файл, строка в памяти, массив байтов, последовательный порт.
В Java используется такая абстракция как Reader (абстрактный класс - с частичной реализацией).
И есть её реализации - FileReader, StringReader, InputStreamReader и т.д.
В программе есть метод calcSymCount(Reader reader).
Как это работает (упрощённо):
//Из строки:
int cnt = calcSymCount(new StringReader(myString));
//Из файла:
int cnt = calcSymCount(new FileReader(new File(path)));
//Из массива байтов:
int cnt = calcSymCount(new InputStreamReader(new ByteArrayInputStream(bytes), "utf-8"));
//Из порта:
SerialPort com = portId.open(...);
int cnt = calcSymCount(new InputStreamReader(com.getInputStream()));
Теперь, допустим, нам понадобилась буферизация.
Мы просто оборачиваем объект reader в BufferedReader и всё:
int cnt = calcSymCount(new BufferedReader(new FileReader(new File(path))));
Для вывода данных - ровно то же самое, просто слово Reader заменяем на Writer, а Input на Output, и всё.
Попробуй представить, можно ли всё это сделать на каком-то одном универсальном классе?
>То есть, на тот же таймер один класс как для измерения времени, так для периодических прерываний, так и для шим.
Так не делают, это же совершенно разные вещи. Смысл именно в том, что ты абстрагируешься от железяки, и смотришь на неё или как на измеритель времени или как на шим-контроллер. И классы отражают эти точки зрения.
Но, надо понимать, что ООП на контроллерах будет немножко не таким красивым, как на больших системах.
Слишком много железной специфики, которая в больших системах абстрагирована в ос и драйверах.
Соответственно, будет несколько коряво. И разбиение на компоненты надо делать несколько иначе и т.д.
>для spi1 у тебя один класс-наследник, для spi2 другой
Я не работал с стм, но, если там разница не только в пинах и адресах, т.е. нельзя сконфигурировать, то да.
Т.е. компоненты могут быть очень низкоуровневыми, и жёстко привязанными к конкретному контроллеру или семейству.
И, стоит подумать, нужно ли классическое ООП на контроллерах вообще?
ООП не единственный способ грамотно структурировать код, и не бесплатный.
Если набить в гугол "embedded oop development", то по первым трём ссылкам советуют не делать этого, лол.
Есть, правда, другие результаты - погугли.
Это я к тому, что если реально надо высокоуровневость, то, может быть, просто использовать [микро]питон для скриптования сишных либ? Х.з., правда, как там с этим на STM.
И, в любом случае, не стоит начинать с написания собственных библиотек. Надо сначала писать код, использующий чужие, потом - читать исходники чужих, потом - пытаться писать свои.
Пример использования ООП для ввода-вывода (Java):
Допустим, нам нужно читать текстовые (символьные) данные из разных источников.
Например, с целью подсчёта количества символов.
Источники - файл, строка в памяти, массив байтов, последовательный порт.
В Java используется такая абстракция как Reader (абстрактный класс - с частичной реализацией).
И есть её реализации - FileReader, StringReader, InputStreamReader и т.д.
В программе есть метод calcSymCount(Reader reader).
Как это работает (упрощённо):
//Из строки:
int cnt = calcSymCount(new StringReader(myString));
//Из файла:
int cnt = calcSymCount(new FileReader(new File(path)));
//Из массива байтов:
int cnt = calcSymCount(new InputStreamReader(new ByteArrayInputStream(bytes), "utf-8"));
//Из порта:
SerialPort com = portId.open(...);
int cnt = calcSymCount(new InputStreamReader(com.getInputStream()));
Теперь, допустим, нам понадобилась буферизация.
Мы просто оборачиваем объект reader в BufferedReader и всё:
int cnt = calcSymCount(new BufferedReader(new FileReader(new File(path))));
Для вывода данных - ровно то же самое, просто слово Reader заменяем на Writer, а Input на Output, и всё.
Попробуй представить, можно ли всё это сделать на каком-то одном универсальном классе?
>То есть, на тот же таймер один класс как для измерения времени, так для периодических прерываний, так и для шим.
Так не делают, это же совершенно разные вещи. Смысл именно в том, что ты абстрагируешься от железяки, и смотришь на неё или как на измеритель времени или как на шим-контроллер. И классы отражают эти точки зрения.
Но, надо понимать, что ООП на контроллерах будет немножко не таким красивым, как на больших системах.
Слишком много железной специфики, которая в больших системах абстрагирована в ос и драйверах.
Соответственно, будет несколько коряво. И разбиение на компоненты надо делать несколько иначе и т.д.
>для spi1 у тебя один класс-наследник, для spi2 другой
Я не работал с стм, но, если там разница не только в пинах и адресах, т.е. нельзя сконфигурировать, то да.
Т.е. компоненты могут быть очень низкоуровневыми, и жёстко привязанными к конкретному контроллеру или семейству.
И, стоит подумать, нужно ли классическое ООП на контроллерах вообще?
ООП не единственный способ грамотно структурировать код, и не бесплатный.
Если набить в гугол "embedded oop development", то по первым трём ссылкам советуют не делать этого, лол.
Есть, правда, другие результаты - погугли.
Это я к тому, что если реально надо высокоуровневость, то, может быть, просто использовать [микро]питон для скриптования сишных либ? Х.з., правда, как там с этим на STM.
И, в любом случае, не стоит начинать с написания собственных библиотек. Надо сначала писать код, использующий чужие, потом - читать исходники чужих, потом - пытаться писать свои.
Вот, кстати, про MicroPython на STM32:
https://www.edn.com/electronics-blogs/embedded-basics/4440447/Using-MicroPython-for-real-time-software-development
Это, оказывается, вообще референсная платформа для него, лол - PyBoard сделан на STM32.
Если не устраивают готовые абстракции железа - пиши свои биндинги через C API.
>Ещё там нужен какой-то коллбек для сигнализации окончания передачи или ошибки, который уже может быть абсолютно разным в зависимости от наличия ОС и её реализации, вот как это организовать по-другому мне не понятно.
Это называется EventListener. По сути, это и есть callback, только в виде экземпляра класса. У тебя есть интерфейс или абстрактный класс SpiEventListener с абстрактным методом или методами, по числу нужных событий. Например onSpiTransmitEnd(), onSpiError() etc. Реализация этих методов будет разной в разных производных классах.
>Ты, насколько я понял, сишник? И плюсы не знаешь?
Под мк я только на C писал, на пк маленькие вспомогательные программки накидывал пару раз на плюсах, но в основном пользовался питоном. Но они были настолько маленькие и простые, что углубиться в ооп особо не удавалось - максимум я описывал один какой-нибудь класс для моего кастомного usb-устройства с методами для приёма-передачи данных по разным эндпоинтам и всё. Но по плюсам и питону я ещё пару книг вводных прочёл, так что кое-что знаю, но опыта почти нет, к сожалению.
Под пеку не знаю, что писать, а вот на мк у меня есть пара задумок простеньких, которые я бы хотел реализовать постараться грамотно и неторопясь, а не быстрее-быстрее как получится, как обычно это на работе бывало.
Хотя, bt, wifi и gps можно через uart подключить к пеке и также накидывать слой приложения так, чтобы низ от контроллера потом можно было прицепить.
>MicroPython
Слышал про него, но показалось, что там либы под одну лишь плату их собственную. Побоялся, что не осилю хал переписывать под свой проц и свою железку (хотя, с процом более-менее повезло, у меня тоже f4). И я вообще не въехал как это работает, тем более не догнал как это всё потом отлаживать кроме как выводом в uart/cdc. Без дебаггера можно тоже, но это геморно по-моему.
>>311554
> Попробуй представить, можно ли всё это сделать на каком-то одном универсальном классе?
Наверно, проблемно. Но вот calcSymCount получается как раз универсальным, потому что он может работать с разными объектами. Ладно, я, кажется, более-менее понял на организационном уровне.
> абстрагируешься от железяки, и смотришь на неё или как на измеритель времени или как на шим-контроллер
Выходит, класс в контексте периферии мк стоит рассматривать исключительно с точки зрения выполняемых им задач и при этом не обращать внимание на используемую аппаратную часть? То есть, если у меня есть универсальный какой-то йоба-блок, который может выполнять 10 разных функций, то лучше описать 10 разных классов (ну, возможно, с какими-то абстрактными, не важно) и не важно, что они один и тот же железный блок используют, но с разными параметрами инициализации?
> Я не работал с стм, но, если там разница не только в пинах и адресах, т.е. нельзя сконфигурировать, то да.
Не, там как раз суть в том, что разница только в адресах, пинах (cs так вообще софтварно можно дёргать, он тогда любым может быть) и прерывании в векторе.
> Надо сначала писать код, использующий чужие
Для stm32 кроме их весьма корявых либ я находил только libopencm3, но там по-моему структурированию и концепциям ооп особо время не уделяли. Попробую по совету анона посмотреть код в либах для ардуино, но я железо в глаза не видел, не уверен, что не потрачу слишком много времени на то, чтобы разобраться в коде. А вот микропитон можно попробовать поковырять.
>Ты, насколько я понял, сишник? И плюсы не знаешь?
Под мк я только на C писал, на пк маленькие вспомогательные программки накидывал пару раз на плюсах, но в основном пользовался питоном. Но они были настолько маленькие и простые, что углубиться в ооп особо не удавалось - максимум я описывал один какой-нибудь класс для моего кастомного usb-устройства с методами для приёма-передачи данных по разным эндпоинтам и всё. Но по плюсам и питону я ещё пару книг вводных прочёл, так что кое-что знаю, но опыта почти нет, к сожалению.
Под пеку не знаю, что писать, а вот на мк у меня есть пара задумок простеньких, которые я бы хотел реализовать постараться грамотно и неторопясь, а не быстрее-быстрее как получится, как обычно это на работе бывало.
Хотя, bt, wifi и gps можно через uart подключить к пеке и также накидывать слой приложения так, чтобы низ от контроллера потом можно было прицепить.
>MicroPython
Слышал про него, но показалось, что там либы под одну лишь плату их собственную. Побоялся, что не осилю хал переписывать под свой проц и свою железку (хотя, с процом более-менее повезло, у меня тоже f4). И я вообще не въехал как это работает, тем более не догнал как это всё потом отлаживать кроме как выводом в uart/cdc. Без дебаггера можно тоже, но это геморно по-моему.
>>311554
> Попробуй представить, можно ли всё это сделать на каком-то одном универсальном классе?
Наверно, проблемно. Но вот calcSymCount получается как раз универсальным, потому что он может работать с разными объектами. Ладно, я, кажется, более-менее понял на организационном уровне.
> абстрагируешься от железяки, и смотришь на неё или как на измеритель времени или как на шим-контроллер
Выходит, класс в контексте периферии мк стоит рассматривать исключительно с точки зрения выполняемых им задач и при этом не обращать внимание на используемую аппаратную часть? То есть, если у меня есть универсальный какой-то йоба-блок, который может выполнять 10 разных функций, то лучше описать 10 разных классов (ну, возможно, с какими-то абстрактными, не важно) и не важно, что они один и тот же железный блок используют, но с разными параметрами инициализации?
> Я не работал с стм, но, если там разница не только в пинах и адресах, т.е. нельзя сконфигурировать, то да.
Не, там как раз суть в том, что разница только в адресах, пинах (cs так вообще софтварно можно дёргать, он тогда любым может быть) и прерывании в векторе.
> Надо сначала писать код, использующий чужие
Для stm32 кроме их весьма корявых либ я находил только libopencm3, но там по-моему структурированию и концепциям ооп особо время не уделяли. Попробую по совету анона посмотреть код в либах для ардуино, но я железо в глаза не видел, не уверен, что не потрачу слишком много времени на то, чтобы разобраться в коде. А вот микропитон можно попробовать поковырять.
>лучше описать 10 разных классов
Да, в этом и смысл.
Насколько это затратно и т.д. - зависит от ситуации.
>но там по-моему структурированию и концепциям ооп особо время не уделяли
Возможно, это потому, что чем больше ООП, тем оно дороже выходит в смысле ресурсов и производительности.
Ну, и написать элегантную либу - это дорого и долго. А эмбед слишком быстро меняется, и люди там работают немножко не те, которые ценят элегантное ооп.
Алсо, в своё время видел сравнение быстродействия под виндой микрософтовских плюсовых либ и джавы (причём, той ещё джавы, начала нулевых). Оно было одинаковым. И нахуй эти плюсы?
>Под пеку не знаю, что писать
Есть Raspberry PI и подобное - там вполне себе нормальный питон под линуксом.
Инфы куча.
Про микропитон я почитал - он сырой ещё. И нормальную отладку ещё только пытаются запилить.
Я ещё думал про это, и пришёл к выводу, что нормально под контроллеры писать можно только на си или на некотором подмножестве плюсов - как в Ардуино.
Так что тот, кто советовал читать исходники ардуино либ, был прав.
Ну, или уже под толстые контроллеры с линуксом - на чём хочешь.
Анон, начались пары по работе микропроцессоров в перемешку с программирование микроконтроллеров на С. Препод сказал, что разбираться будем с AVRовским. Подскажите минимальный набор деталей, чтобы вручную что-нибудь собрать.
Пока в списке диоды, провода, программатор, atmega8a, датчики света, температуры и тд, макетная плата.
Joseph Yiu - Definitive guide to the to the ARM cortex M0 рекомендовали где-то.
Еще есть Bertolotti, Ivan Cibrario Hu, Tingting - Embedded software development.
Можно ещё выборочно почитать digital design and computer architecture.
Но я первые две только листал, а последняя не совсем про мк, но выборочно почитать стоит точно, чтобы понять, как устроено и как работает простейшее ядро проца.
>>312163
Если не хочешь мудиться с usb-cdc, то советую ещё прикупить usb-uart на ft232. На али 250 рублей стоит, но при отладке бывает очень полезен в случаях, когда просто взять и поставить брейкпоинт нельзя. Есть bt/wifi/nfc модули, работающие на at-командах по уарту, если хочешь запилить беспроводную йобу.
Вообще, смотря что ты хочешь собрать. Можно и набор адресуемых светодиодов закупить и остановиться на этом. А дальше пилить какую-нибудь подсветку для задней стенки монитора/светомузыку.
> И нахуй эти плюсы?
На ПК? Уже полно альтернатив на любой вкус и цвет, да, но тем не менее язык один из самых популярных до сих пор. А вот под мк кроме сырого micropython, javascript, закрытой java embedded, которую, как я понял, хуй получишь, кроме C и C++ ничего не остаётся больше. Может, именно в плюсах и смысла нет, потому что в контексте мк C++ - это C с классами, но я вроде изначально просто про концепции спрашивал, которые можно реализовывать на обоих языках.
> Есть Raspberry PI и подобное - там вполне себе нормальный питон под линуксом.
Из пушки по воробьям. Собрать макет - годится, но дальше уже нет (а тем более смысл собирать макет на питоне, если потом пилить то же самое на C/C++), тем более для устройства, работающего от батареи, а не от сети, точно не пойдёт. Ну и у пирога есть одна большая проблема - он быстро убьёт карточку, поэтому для начала придётся его пердолить, чтобы на карту записи почти не производилось во время работы. Да, статьи есть на эту тему, но желания обмазываться пока нет.
> толстые контроллеры с линуксом
В перспективе хотел бы, но пока что нет, к тому же цена у такой платы будет куда выше, да еще и придётся вкуривать линукс.
Ладно, спасибо большое за ответы, анон.
Понятно, спасибо.
Поясните за Mbed - это зашквар или нет?
Хочу вкатиться в ARM на уровне хобби (профессия уже есть, лол).
Заодно, насоветуйте плату для знакомства.
Выше пишут, что вообще лучше начинать с STM32 F3. Это так?
Nucleo NUCLEO-F303K8 нормально?
Что насчёт Cortex M0?
Алсо, реально ли использовать Mbed с голым nRF51822, например (после некоторого знакомства с предметом вообще)?
есть микроконтроллер stm32f767zi на плате NUCLEO-F767ZI и OLED дисплей winstar'овский WEH001602AGPP5N00001 с контроллером WS0010 аналог HD44780 вроде. Никогда дисплейчик не подрубал, как быть? с чего начать? Может есть какая то система команд для управления им и вывода на него информации? мне нужен только текстовый режим, рисовать рандом пикчи нет необходимости
на прикл сабж
Юзай Mbed, тем более, что у тебя Nucleo.
https://os.mbed.com/platforms/
https://os.mbed.com/components/cat/display/
> зашквар или нет
Почему зашквар-то? Ну, если ты петушила-ардуинщик, который вообще не имеет представления о том, что делает, и только лепит готовые либы и решения, то наверно зашквар. А если нормально делать, то норм. Но не в качестве профессии, потому что на хуй никому не нужен будешь.
> лучше начинать с STM32 F3
Я принципиальной разницы между f0/f1/f2/f3/f4/f7 не увидел, поэтому думаю, что начать можно с любого, это тебе не какой-нибудь многоядерный a15 с reference manual на 8к страниц.
> насоветуйте плату для знакомства
Чтобы меньше ебли было бери фирменную. Можешь взять с али китайщину, но ни схем не будет, нихуя вообще, но она дешевле (я на f4 с usb-разъемом, двумя кварцами, разъемом под microsd, и маленькой eeprom на борту взял за 700 с чем-то). Удобно еще когда на плате к самому мк заведён и распаян usb, на мой взгляд.
Можешь поискать подешевле что-нибудь с самым простым камнем и минимумом обвязки, а то вдруг не понравится.
Купи модуль I2C интерфейса для таких дисплеев, чтоб не ебаться с ножками и вешать его на одну шину с другими I2C девайсами.
https://ru.aliexpress.com/item/1pcs-Serial-Board-Module-Port-IIC-I2C-TWI-SPI-Interface-Module-for-Arduino-1602-LCD-Display/32404454240.html
спасибо, но мбед для меня еще более непонятен чем работа в том же кубе) плюс мбедед приложения не знаю как дорабатывать, ведь по ТЗ у меня не только подцепить дисплей задача
Проще и удобнее - полно готовых либ для этого модуля на любые контроллеры и всего 2 ножки МК используется.
Использую realolc, да. Только на атмеге. Кагбэ у меня там просто класс запилен. Есть функция, которой я сообщаю сколько байтиков нужно выделить. А внутри неё уже этот реаллок. Если количество байт в аргумент я сообщаю положительное (ну там парочка байт), то эта функция к тому же возвращает мне указатель как раз на то место где начало этих новых выделенных байт. Что оче удобно. Ещё у меня конструктор и функция free, вызывающая, собственно free() и ещё обнуляющая указатель на начало массива. Проблема фрагментации у меня пока не стоит, так как объекты (локальные) удаляются в порядке, обратном их созданию, но, впринципе если потребуется, то я в массиве просто прописываю ссылочку на дополнительно созданные байтики в его конце.
>>307264
Нахуй это нужно? Кольцевой буфер запилил, та и всё. Плюс сигналы XOFF/XON можно отправить если он заполнится, до появления свободного места.
https://ru.aliexpress.com/item/1PC-JLI-V9-J-LINK-ARM-emulator-support-A9A8-V9-3-high-speed-download/32801920737.html
Что там с версиями - 8, 9.3, 9.4? Какая лучше?
Инфа в интернетах есть, но противоречивая.
Может быть, кто лично пользовался?
Цель - прошивка дешёвых китайских платок с nRF51822 и прочее.
На плате nRF51 DK стоит здоровенный чип Segger, я так понимаю, что это JLink и есть.
Видел инфу, что для прошивки достаточно JLink'а за 13 долларов, а то, что выше по ссылке - это нужно для отладки.
Короче - просветите что это вообще за хуйня, в чём разница, какие подводные камни.
Если честно - я не знаю, ибо в этой теме я ньюфаг.
В тех примерах, которые я видел, nRF51 прошивали j-link'ом. Если его можно прошить st-link'ом с али, тогда j-link не нужен.
В ньюфажном треде затруднились ответить на мой вопрос. Есть ли в природе русскоязычная документация на STemWin, BSP-драйверы и т.п. для STM32F4? В поиске вылазят малопонятные, обрывочные примеры. Может быть есть, что-нибудь подобное "STemWin на селе", "Справочник молодого BSP-шника"?
Чота тред не бампируется. Тяжелый слишком
В общем, продолжаю неспешно клепать махарайки на армах (лол, когда дойдёт до чего-нибудь серьёзного, то в ходу уже будут квантовые компы).
Поясните, для чего нужны RTOS?
Юзал кто?
Предстоит ебля с ногодрыгом, вай-фаем, нанд памятью, шим и жк с тачскрином.
Эта хуйня (RTOS) мне будет полезна, чтобы ебли было как можно меньше?
RTOS нужны для обеспечения многозадачности в основном.
В самом просто случае без RTOS, например, если ты захочешь поморгать светодиодом раз в секунду, без прерываний по таймеру, твой МК будет сидеть и курить бамбук, смотря как тикает время и нихуя не делая. Это не круто, так как за эту секунду он мог бы сделать тонну полезной работы.
С RTOS вместо одного суперлупа у тебя будет набор тасков, каждый из которых выполняет одну определенную функцию независимо от других, то есть его можно гасить, будить, грамотно управлять ресурсами с помощью примитивов синхронизации типа семафоров и вообще делать вещи красиво.
Каждому из тасков выделяется свое время активности, и когда, например, один из тасков решил, что он завершил свой текущий цикл и будет ждать следующего, контекст переключится на таск, который готов к выполнению, вместо просиживания штанов.
>Эта хуйня (RTOS) мне будет полезна, чтобы ебли было как можно меньше?
Как ты наверное уже понял, да.
Аноны, а есть кто зарабатывает этим ремеслом?
Ищу работу эмбедером, предложений очень мало, а те которые есть, это 20к в НИИ Исследования Пердежа после 3 месяцев испытательного.
Не то что бы я этим брезговал. Как раз таки я уже в таких местах пару лет и проработал, хочу двигаться дальше и заниматься более интересными проектами, но пока даже не понимаю куда.
27к это неплохие деньги в принципе.
Для меня дело то и не в деньгах скорее, а в интересной работе и нормальном отношении к сотрудникам.
ну тут как повезет, думаю в этом плане пытаться залезть в компанию покруче. У меня начальство лояльное, а вот с разнообразием туговато. Только один чувак пытается добавлять новые фишки в проекте. И славу богу я работаю с ним
Резисторы, конденсаторы, переменные резисторы, пачка каких-нибудь дешёвых транзисторов (PNP, NPN и MOSFETы), трангзисторы для моторчиков, всякие там сдвиговые регистры.
Да, знаю что слоу.
Работаю не эмбедером, но связан с этим делом.
Пишу программные модули для взаимодействия с охранными устройствами. Не пишу для самих MK, но таки работаю с их интерфейсом. Ну а так же в принципе планирую переход на полный embedded. Планируем писать кастомные прошивки для ip-камер и тд.
Получаю 16к, ибо работаю на полставки.
Студент, мухосрань.
JerryScript кто-нибудь упарывался?
В догонку: как на инглише назыются пины и колодки?
Не напрямую, а через резисторы.
Смотри на свои светодиоды forward voltage в даташите или у продавца если на али/ибее берёшь, потом подставляй в формулу.
R = (V1 – V2) / I
V1 = напряжение на пинах STM32 (смотри в даташит, но там вроде 3 вольта, у других микросхем может быть 5) V2 - forward voltage на диоде. Напряжение V1 будет зависеть от того, что ты на вход подашь, так что лучше заимей источник на 3 вольта.
И I это сила тока, смотри в даташите на микросхему какое ограничение на максимальный ток на пин, подставляй значение, получай, например 85 ом и бери ближайший резистор, который выше по сопротивлению, например 100 ом.
Вот, например даташит на STM32F103C8
http://www.st.com/en/microcontrollers/stm32f103c8.html
Короч, вот у меня LED с напряжением 2 вольта.
R = (3 - 2) / 0.025 = 40 Ом. У меня есть пак резисторов, там самое мелкое - 100 Ом, вот его и ебашим.
Правда я мог где-то объебаться, сам нуб
Ах да, кнопки тоже ебашат через резисторы, причём джва. Пока кнопка выключена твой пин должен быть через резюк подключен к земле или напряжению (3/5 вольта). Иначе на твои ноги микроконтроллера прилетит любая наводка и поставит там сигнал какой придётся. Пока кнопка не нажата, то твой пин микроконтроллера подключён к земле и там 0 или к питанию и там 3 вольта, т.е. есть 1.
Когда ты её жмёшь, то замыкаешь пин на землю или 3 вольта через ещё один резистор, иначе короткое замыкание, гроб, кладбище, пидор.
А светодиоды возьми у китайцев набор 100 штук разноцветных, там всё равно напряжение будет 2-3 вольта.
>Cortex M0
Если у тебя уже есть задача, которую надо решить, то бери, может доставить оптимизация и прочтение даташитов. Хотя и просто так сойдет, они по 3 бакса стоят. Я пилю игровой контроллер, там 8 модулей одинаковых будет, 12 кнопок со светодиодами, линейный потенциометр и мотор. В итоге уместился в STM32F030F4P6, вся периферия на сдвиговых регистрах, которые управляются записью в BSRR через DMA, связь с ардуиной-конвертером для ПК через I2C, на который тоже DMA повесил, даже потенциометр им считывается, МК половину времени хуи пинает. Хотел еще быстрый синус сделать, чтобы изменять яркость светодиодов волнами, сначала через приближение полиномом Тейлора привет, вузовский матан, нахуя было давать в экзмене их формирование и погрешность, если все гуглится в два счета, но скорость не устраивала, в итоге пришел к поисковой таблице и числам с фиксированной запятой.
Вы видите копию треда, сохраненную 6 июля 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.