Jump to content

    

Eddy_Em

Участник
  • Content Count

    839
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Eddy_Em

  • Rank
    Знающий
  • Birthday 11/25/1980

Контакты

  • Сайт
    https://github.com/eddyem
  • ICQ
    0

Информация

  • Город
    КЧР, Нижний Архыз

Recent Profile Visitors

5405 profile views
  1. А почему должен быть тормоз? Ставите прерывание на получение символа '\n' и формируете буфер средствами DMA (либо можете в прерывании по RXNE формировать буфер, без DMA, но анализировать на '\n' внутри прерывания). Как только получили '\n', выставили флаг, а в цикле внутри main тут же этот флаг увидели и делаете что надо с буфером. Сборщик же данных из уарта тем временем меняет буферы. Я никогда еще с проблемами "тормозов" в подобном случае не сталкивался... В основном цикле происходит обработка кнопок, обработка флагов и т.д., и т.п. - все медленные операции. Внутри прерываний выставляю флаги или делаю "быстрые" операции (и операции, которые невозможно сделать внутри основного цикла, т.к. требуется быстрая реакция - скажем, коррекция SysTick по прерыванию PPS от GPS). При работе с USB тоже много чего нужно делать именно внутри прерывания...
  2. А если не SMS'ить, а звонить и морзянкой что-нибудь наколачивать? Ну, а если звонок - на другой такой-же GSM-модуль, то можно что-то вроде старого доброго модема запилить. Будет классическое p2p соединение, которому всякие уроды из роскомпозора не страшны. Дополнительный плюс: не нужно тратить деньги на аренду сервера…
  3. STM32L100, ADC+DMA

    А зачем вы содержимое регистров не одной операцией изменяете, а несколькими? Они же объявлены как volatile, и gcc скорей всего не соберет все эти |= в одну кучу, а так и будет последовательно выполнять... И флеша больше тратится, и времени.
  4. Не замечал каких-то проблем. Уже давно в нем работаю - других-то вменяемых опенсорсных вариантов и нет! Проприетарщиной пользуюсь лишь в тех редких случаях, когда полноценных опенсорсных аналогов не существует (это только лишь две штуковины: zemax и компас-3D, и то, пользуюсь ими раз в 2-3 года..). Это же невозможно! Как вы оцените, сколько человек реально времени на работу потратил, если не стоите за его спиной от звонка до звонка? На мой взгляд, единственным вменяемым способом оплаты труда является сдельно-премиальный: ставим временные рамки, озвучиваем сумму оплаты. Уложился в срок - получи деньги; сделал гораздо быстрей - получи еще и премию. Сделал медленней - из оплаты вычитаем штраф.
  5. Как по мне, так самое говорящее портфолио — профиль на гитхабе! Там и количество проектов можно посмотреть, и с ними самими ознакомиться... А если человек работает только с закрытым железом, то придется будущему работодателю верить на слово работодателю предыдущему.
  6. Если проект опенсорсный, то почему не в kicad, а в проприетарщине?
  7. Зачем магические числа, если у МК есть регистры, где хранятся эти калибровочные величины?
  8. Что-то на алиэкспрессе таких нема... Или они стоят как машина?
  9. Скорей так и есть. Вообще, было бы интересно сравнить точность PPS у разных дешевых китайских модулей. Правда, где-то нужно еще и опорный сигнал брать…
  10. Я в хронометре синхронизирую таймер SysTick по GPS. Вполне недурно получается. Кроме того, выбранный модуль оказался вполне недорогим (я брал примерно за 2000 рублей 10 модулей) + очень хорошо держит сигнал PPS даже после пропадания спутников (другие модули обычно при потере спутников перестают генерировать PPS). Проверял на парочке: дождался синхронизации, чтобы у обоих часы шли одинаково (точность замерить не могу, т.к. мне мельче миллисекунды временные интервалы не нужно фиксировать). Потом один убрал внутрь помещения, чтобы пропал сигнал спутников. А через час проверил. Расхождение всего лишь в миллисекунду!
  11. Добавить в Makefile соответствующую цель, где будет вызываться scp...
  12. Вот здесь я сделал 2 "раздела" во флеш-памяти для хранения всякой всячины. Решается элементарным добавлением своих секций после .data: .myvars : { . = ALIGN(1024); __varsstart = ABSOLUTE(.); KEEP(*(.myvars)); . = . + 2000; . = ALIGN(1024); __varsend = ABSOLUTE(.); } > rom .logs : { . = ALIGN(1024); __logsstart = ABSOLUTE(.); KEEP(*(.logs)) } > rom _ldata = LOADADDR(.data); // кто-нибудь знает, как здесь по-человечески ответ можно писать, без идиотских "кнопочек" и интерактива?
  13. Вот вам пример работы с DS18 на STM8, а здесь - для STM32. На "железную" реализацию не смотрите - она у меня с косяками (надо было на полноценном КА делать, а у меня черт-те что). Ничего сложного там нет. Получили данные, преобразовали. Вот так проще всего: int32_t gettemp(uint8_t *scratchpad){ // detect DS18S20 int32_t t = 0; uint8_t l,m; int8_t v; if(scratchpad[7] == 0xff) // 0xff can be only if there's no such device or some other error return ERR_TEMP_VAL; m = scratchpad[1]; l = scratchpad[0]; if(scratchpad[4] == 0xff){ // DS18S20 v = l >> 1 | (m & 0x80); // take signum from MSB t = ((int32_t)v) * 10L; if(l&1) t += 5L; // decimal 0.5 }else{ // DS18B20 v = l>>4 | ((m & 7)<<4) | (m & 0x80); t = ((int32_t)v) * 10L; m = (l & 0x0f) >> 1; // add decimal // 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 -> // 0 1 1 2 3 3 4 4 5 6 6 7 8 8 9 9 t += (int32_t)m; // t = v*10 + l*0.625 -> convert if(m) ++t; // 1->1, 2->3, 3->4, 4->5, 5->6 if(m > 5) ++t; // 6->8, 7->9 } return t; }
  14. Можно сделать хитрый PCB-разъем (навроде камаковских разъемов или ISA): пока вставляете, закоротится сначала Boot0, потом Reset, потом отпустится Boot0 и отпустится Reset. В итоге от платы к компьютеру только 4 проводочка идти будет… Сам прошиваю STM32 только через бутлоадер (т.к. это очень удобно: после прошивки этот же преобразователь USB<->TTL используется для отладки), но Boot и Reset делаю в виде кнопочек и жму их вручную.
  15. Реверс делают лишь в случае анально огороженных протоколов. Мне так пришлось когда-то восстанавливать протокол управления объективами Canon и турелями Edmund Optics, в первом случае исходники на почти 2 месяца сократили бы мое время на разработку; во втором же случае т.к. управление тупо по HID идет, я бы только дольше провозился, копаясь в чужом коде…