Jump to content

    

andrewlekar

Участник
  • Content Count

    836
  • Joined

  • Last visited

Everything posted by andrewlekar


  1. Цитатаможно ли объявлять объект - не создавать его динамически. Можно. Только в вашем примере data будет недоступен.
  2. В scmRTOS посмотрите как обработчики сделаны. У меня опыта нет упихивания С++ в контроллер. ЦитатаИ что значит "Поля в классах нужно инициализировать руками" В Си вы пишете в module.c: Кодstatic int data; И эта переменная у вас будет инициализирована нулём. В С++ вы пишете в module.h: Кодclass Module { private: int data;}; И эта переменная у вас инициализирована не будет.
  3. Во-первых, ООП вы напрасно определяете через термины C++. Классическое определение: ООП - это объекты обменивающиеся сообщениями. Цитата из вики: Object-oriented programming (OOP) is a programming paradigm that represents the concept of "objects" that have data fields (attributes that describe the object) and associated procedures known as methods. Objects, which are usually instances of classes, are used to interact with one another to design applications and computer programs. То, что предлагает C++ изрядно запутывает программистов. Я бы посоветовал сначала хорошо изучить Си, а потом уже потихоньку залезать в С++, если так хочется. ТС рекомендую не углубляться в архитектуру наследования. Гораздо проще сделать так: 1. Выделить сущности в отдельные модули. Пускай датчик будет в отдельном модуле. 2. Если сущность бывает в единственном экземпляре, то можно оставить как есть - модуль с экспортируемыми функциями. Если вы большой любитель классов, то можно обернуть в синглтон. 3. Если сущность может существовать в нескольких экземплярах, то оборачивайте в класс. Например, датчиков может быть много - делаем класс датчиков. 4. Не заморачивайтесь с наследованием. Сделайте разные датчики копипастой. Когда всё заработает, одинаковый код можно вынести в базовый класс. 5. Чтобы единообразно обрабатывать разные датчики, можно сделать для них общий интерфейс. Когда у вас все датчики будут написаны, общий интерфейс написать будет тривиально. 6. Без динамической памяти писать будет больно. Поля в классах нужно инициализировать руками. Инкапсуляция работает хреново потому как приватные поля светятся в заголовках модулей. Подумайте ещё раз, надо ли вам это, потому что Си гораздо гуманее, чем С++.
  4. UART bootloader для LPC1768

    Можно, но только через UART0 через встроенный загрузчик. Если свой загрузчик напишете, то хоть через что прошивайте. Про использование встроенного загрузчика читайте мануал на LPC17XX, глава Flash memory interface and programming, конкретно про ISP.
  5. Забавная идея. Жалко, что 1 апреля уже прошло. 1. Попросите у человека исходники и соберите их сами. Так закладок наверняка не будет. 2. Запустите программу на изолированной машине с включенным Wireshark, Process Explorer, File Monitor. Убедитесь, что программа не вызывает подозрительной активности. 3. Натравите на программу брэндмауэр. Запретите ей всё.
  6. Версию прошивки модуля напиши. И на других модулях проверялись симки? SIM900R, SIM800H?
  7. STM32F100 и проблемы с FPU

    В FreeRTOS если не ошибаюсь, стеки для задач выделялись через malloc, то есть в куче. Проверьте, используется ли у вас куча и выделена ли для неё память.
  8. инкапсуляция в С

    Приложение может строиться разными способами. Ваша задача подобрать такой способ, который будет удобен для вас и расширяем для потенциального роста приложения. 1. Либо это суперлуп (главный цикл) с флагами. Для небольших приложений. 2. Либо это взаимодействие конечных автоматов. Для приложений чуть побольше. 3. Традиционный многопоточный подход с обменом сообщениями между потоками. Почти любого масштаба приложений, но требует высокой квалификации программиста. 4. Всякие вариации в сторону декларативного и функционального программирования. Требует поддержки от компилятора. Это я навскидку составил список. Если упростить, то нужно делать по максимуму модульную программу. Там где это возможно, глобальные флаги заменять на вызов функции соответствующего модуля (например uart_is_data_ready()). Для передачи массива данных делать копию для обработки в подходящем модуле. Граф зависимостей модулей не должен (не желательно) иметь циклы. Если модуль A зависит от модуля Б, а модуль Б от модуля А, то цикл нужно разорвать.
  9. ЦитатаТам написано о том, что будут совместимые модули Нужно было их обрисовать хотя бы схематично. У меня при взгляде на ваш девайс первая ассоциация: советский конструктор с дырочками. Я бы хотел и модули увидеть простые и универсальные как тот конструктор.
  10. Если бы в описании проекта была представлена линейка совместимых модулей, собираемых как конструктор, то было бы любопытно. Сейчас там предлагают купить отладку без перспектив с кучей маркетингового буллшита в нагрузку.
  11. SAM4L

    Цитатау Вас рядом с этой переменной лежит массив, за границы которого Ваша программа вылезает Ого. А скажите тогда, почему у меня программа в hard fault падает.
  12. Честно не знал, что компиляторы си умеют TCO. Теперь не буду так рекурсии избегать, как обычно.
  13. инкапсуляция в С

    ЦитатаЗачем, ну объясните мне, зачем делать эту общую свалку global.h? Чтобы пихать туда вещи, которые не принадлежат ни к одному модулю. Глобальные переменные например. В глобально доступных переменных нет сильно большого криминала до тех пор, пока к ним доступ осуществляется атомарно в многопоточных программах. И пока не страдает логика приложения, например всё приложение начинает управляться глобальными флагами.
  14. ST32F417IG

    Для экономии некоторые заводят тактирование PHY от проца и надеются, что джиттер PLL останется в разумных пределах. 25 MHz кварц при этом не обязателен. Если делать более честно, то берут PHY с внутренним PLL, который из 25 MHz делает 50, цепляют к этому PHY свой собственный кварц и работают.
  15. Imx6 без линухи

    Я начинал с нуля. Тоже пробовал перетащить весь тулчейн под винду и всё сделать по-своему. Это не сработает. Поставьте виртуалку, сделайте строго по инструкции. Через полгодика станете закоренелым линуксоидом.
  16. Imx6 без линухи

    ЦитатаПравда мои термометры синхронно управляют многоосевыми системами и там крайне жесткий реалтайм Ваши вебтермометры не иначе как в литейном цехе стоят.
  17. Атомарность чтения

    Тут достаточно не критической секции, а запрета конкретного источника прерывания перед установкой семафора. При работе с ISR так или иначе запрещать прерывания придётся. Но но уровне операционки можно написать тонны софта ни разу не встретившись с прерыванием. В линуксе скажем они где-то глубоко запрятаны. В таком случае городить всякие lock-free и критические секции нет никакой нужды до тех пор, пока реально не понадобится улучшить производительность.
  18. ООП на Си

    Про create гон, не обращайте внимания. ООП на си бывает всякий разный, но как правило это куча лишнего кода с минимальной отдачей. Эта тема не стоит потраченного времени.
  19. Атомарность чтения

    ЦитатаИнтересно - как вы с помощью мьютексов и прочих блокирующих методов синхронизируете работу фоновой задачи с ISR-ами? Поллинг и фифо решают 90% задач связанных с прерываниями. Если надо из ISR сигнализировать приложению, то можно в задаче захватывать семафор, а в прерывании отпускать. Это позволит заблокировать задачу до прихода прерывания. Цитатареализация мьютексов в ОС имхо всегда основывается внутри на критических секциях и/или атомарном доступе. Кто же спорит. Но мы этого не видим и туда без необходимости не лезем.
  20. Атомарность чтения

    ЦитатаSVS - это че? Это видимо имелось в виду программное прерывание. Правильнее его называть SWI. Цитатаа чтобы стать лучше чем был вчера... Проще использовать мютексы и не городить сложных систем с критическими секциями и платформозависимой атомарностью. Не разделяю любви с неблокирующим алгоритмам - их очень трудно поддерживать и очень легко сломать.
  21. SIM800H в двухсимочном варианте ожидается?
  22. MarS Board - кто-нибудь юзал?

    BeagleBone Black
  23. MarS Board - кто-нибудь юзал?

    У imx6 насколько я помню есть косяк: его гигабит может работать только в половину пропускной способности. Ситара существует в виде недорогого BBB, но с камерой можно застрять надолго. На BBB можно сделать совсем тупо: по USB подключить WiFi модуль и веб-камеру. Будет дешево и сердито.
  24. Keil v5.

    Я не совсем понял в чём именно проблема. Вы в отладчике не можете увидеть правильное значение или где? Ещё если у вас у файлов стоит кодировка utf-8, то вы в char [] не сможете поместить русские символы. Нужно вместо char использовать wchar_t или uint16_t или аналог. Я из аналогичной ситуации вышел переведя принудительно все файлы в win-1251. Это некрасивое но простое решение для Си. Ещё utf-8 в ucs-2 переводить проще не табличным способом, а кодом. Отличие только одно: однобайтовые символы (инглиш) добавляются ведущим 0x00.
  25. Не, сенсорный дисплей нифига не дешевле чем клава и ЖК однострочный. Ёмкостной дисплей тоже не удешевляет конструкцию - его ставят исключительно из соображений удобства пользователя. У китайцев ставят резистивные чтобы снизить цену и использовать их очень неприятно. ЦитатаSIM900 внутри уже и память и операционка. В одном чипе. Не, у чипсетов память отдельно ставят. Иногда по технологии PoP, но всё же это не один чип. ЦитатаРазработкой корпуса должен заниматься инженер-конструктор, а не веб-дизайнер. У инженеров корпуса получаются функциональные, но некрасивые. Лучше всё-таки сначала дать поработать творческой мысли дизайнера, потом уже довести конструкторам. В остальном согласен.