Перейти к содержанию
    

adnega

Свой
  • Постов

    3 603
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные adnega


  1. Спасибо за ответы.

     

    И всё же, с чего бы посоветовали начинать, и по цене, и по сложности? (И по доступности софта).

    По цене: от 50руб./шт.

    По сложности: нарисовать схему из логических элементов в редакторе.

    Софт есть бесплатный, тот же Quartus II Web Pack. Весит, правда, гигабайты.

    Пример схемы можете привести?

  2. Естественно. Но задач столько впихнули в этот проект и попытались его седать не на intel i7, а на проце попроще. экономика должна быть экономной. аппаратные блоки и без этого нагружены по максимуму.

    А что за процессор Вы используете, если не секрет?

  3. Есть место в программе, например обработчик прерывания.... без оптимизации один си-оператор есть 6 асм команд. без оптимизации почти 90% времени уходит на обработчик. прога не работает. с макс ур оптимизации по скорости этого обработчика си-оператор есть 4, а то и 2 асм команды. в итоге в прерывании 40-50% времени. прога работает без сбоев.

    Еще в деле увеличения производительности очень помогает выравнивание данных. Все 8-ми и 16-ти битные данные нужно заменить на 32-битные.

    Массивы копировать или очищать сразу по 32 бита. Ну и главный козырь - попробовать перенести рутину на аппаратные блоки (DMA, таймеры, SPI и т.п.)

    Как правило, чем жирнее обработчик (а это на самом деле должно насторожить), тем больше возможностей для оптимизации. Крошечный обработчик можно

    и ручками (читай на asm) написать. Вообще архитектура проекта должна быть заточена под эти "критические" обработчики.

    Если не считать выключенную оптимизацию, то разница между результатом для разных уровней оптимизации (при оптимальном на C-уровне коде) не значительна. Точне не 2 раза.

    а то место, где optimize=none.... там используются дефайны регитров, библиотечные. можно канечно свои определить, обставить всё валатайлами.... в итоге асм получится 1в1 как с optimize=none. смысыл перелопачиать библиотечные дефайны и тратить время на "красивый код", если optimize=none решает проблему?

    Проблема в том, что оптимизатор оптимизирует этот код. Отключить оптимизацию можно волотайлами или optimize=none. кому что милее

    В данном случае отсутствие volatile у регистров преступление. Нужно править библиотеку. Насчет 1в1 не полностью верно, ведь кроме доступа к регистрам есть и другой код. Выключение оптимизации не решение, т.к. при обращении из разных кусков программы (в том числе и с включенной оптимизацией) поведение будет разным. Может, вместо "optimize=none"/"optimize=yes" при каждом обращении к переменной в критичном к скорости модуле легче в одном месте написать volatile и иметь рабочий код при любом уровне оптимизации?

  4. Чет в первый раз слышу чтобы отладчик прошелся по той функции которая не выполняется.

    Все верно. Только особенность блока IT в том, что некоторые команды (которые имеют ложное условие) при исполнении аппаратно заменяются на NOP.

    Это гораздо лучше для конвеера, нежели переходы, и для крошечных веток сравнения (как у Вас) очень эффективно.

  5. ну понятно что он тоже самое делает, что и в первом посте. только надо понимать что когда вы 32 битное слово реверсируете, ваши 8 бит улетают из начала в конец, то есть после такой реверсии еще надо посылать в другом формате little endian сменить на big endian

    rev меняет порядок байт в слове - типа rbit, но для байтов. Т.е. rbit8 как бы реверсит биты внутри байта.

  6. А что в нём не хорошего? Для таких случаев придумали #pragma optimize, а не предлагают помощь в избавлении от такого поведения :laughing:

    Эти опции придумали, не для того, чтобы проект работал или не работал, а для оптимизации по памяти.

    В некоторый задачах важна скорость, а памяти свободной много. В других задачах каждый байт на счету.

  7. BOTTOM - только для низкопрофильных smd, TOP - для smd и всех выводных (габаритных деталей).

    Если все детали умещаются на один слой, то на TOP, BOTTOM - пустой (не надо зеркалить в уме).

  8. У меня счетчик Меркурий цепляется по CAN.

    Как тут недавно выяснилось от CAN там только физика (читай, название).

    Реально там UART.

    Умный дом не моя специализация. Я не говорил, что делаю умный дом.

    Я думаю лучше управлять домом с телефона, планшета или с компьютера. Планшет может висеть на стене или стоять на полке. Огромный экран на стене как в фантастических фильмах с 3D графикой, Kinetic и речью.

    Лично знаю человека, у кторого в мечтах был "такой" дом. Но на стадии реализации много чего было отрезано, и остались банальные кнопки-выключатели как у всех)) Это только в фильмах все красиво работает, а на практике...

    ЖК на слабом контролере с тачскрином это кушает много ресурсов.

    Тот же stm32f429, по-моему не так слаб.

    Тачскрин (а он не всегда мультитач) вообще копейки в плане ресурсов.

    Если это маленький контролер с кнопками для умного дома например http://www.ekits.ru/index.php?productID=3071

    думаю, что такой можно сделать на маленьком МК и встроить в стенку. Обмен с другими контролерами/серверами WiFi или Ethernet. Цена копейки 2-3 рубля можно поставить в каждую комнату/помещение чтобы не таскать за собой мобильник.

    "Копейки 2-3 рубля" - это 2'000...3'000 рублей? За такие деньги принято требовать функционала поболее.

  9. Уже говорил что сейчас конечный заказчик Я. Программа нужна мне. По этому объяснять заказчику, что то что он хочет это ненужно никому в разделе предлагаю работу, вызывают у меня когнитивный диссонанс.

    Анализ существующих платформ проводил, почитай выше посты.

    Я ж Вам только добра желаю. Если Заказчик ошибается или не в полном объеме понимает задачу, не грех ему об этом корректно сообщить и обсудить.

    Иначе будет как в анекдоте:

    - Доктор, кастрируйте меня. - Да вы что, опомнитесь! - Доктор, пожалуйста, мне очень нужно. Доктор взял и кастрировал, а потом спрашивает, зачем пациенту это было нужно. - Понимаете, я собирался жениться, а невеста говорит, что выйдет только за настоящего татарина. - Так вам нужно было сделать обрезание. - А разве это не одно и то же?

     

    Анализом, тот список назвать сложно. Не ясно какую задачу Вы решаете, и почему решения из списка не подходят. Чем Ваш велосипед будет лучше?

    В итоге может получится, что за 200 тыр Вы разработаете нечто, что будет подмножеством одного из существующих решений.

     

    Кстати, в анализе в списке минусов Вы не уделили внимание цене изделия, а она для Вас (создается впечатление) является очень важной.

    Если Вам нужны контроллеры с возможностью настройки несложных алгоритмов (а ля умный дом), с децентрализованным управлением по CAN,

    с возможностью обновления пользовательских программ и прошивки по сети, с расширенной диагностикой и высокой надежностью как софта, так и

    аппаратной части (чтоб замуровать в стену), то обращайтесь, у меня они есть)) По цене договоримся.

  10. Я вот что имею ввиду.

    Когда я запускаю отладчик. То он загружает мой elf файл в память

    и стартует программу.

    Вот можно этот дамп памяти получить на компьютере в отдельном файле?

    И можно ли потом его разместить в памяти (правильно) запустить на исполнение?

    objcopy?

    objcopy -O binary ???.elf ???.bin
  11. Вот есть у меня задача, например поставить несколько железок. Беру готовую опенсорc прошивку для контролера STM32F, устанавливаю сервер. В прошивку записываю ноги МК которые участвуют в проекте. Рисую железку под проект, заказываю железки. Прошиваю железки.

    Т.е. при опенсорс проекте плачу только за производство железок при условии что сам могу разобраться с STM32CubeMX и нарисовать гербер для производства.

    Ага. А с Заказчика берете за железо, за свои "попытки" разобраться с софтом (STM32CubeMX, CAD для производства герберов), и некую сомнительную наценку.

    А не дешевле Заказчику купить сразу готовое (пусть и закрытое)? Риски-то для него гораздо ниже, чем связываться с Вами.

    Теперь про выбор железа под задачу. Смотри линейки STM32F1xx если задача простая, смотри STM32F4xx если нужна вычислительная мощь. Где смотреть так в том же кубе, ставишь сколько тебе нужно GPIO, CAN, Ethe и т.д. а он тебе модельку подбирает.

    Хорошо: модельку Вы выбрали. Что дальше? Куб сам для Вас код набросает?

    Выбор для себя сделал дешево и качественно. Сроки для меня никто не устанавливает и делаю для себя.

    Сроки для Вас установит первый же Заказчик. А Заказчик (как Вы понимаете) - это парень (или организация), которая заплатит за Ваш продукт деньги.

    И без четких сроков (даже за бесплатно) с Вами никто связываться не будет, т.к. у Заказчика в конечном счете тоже Договор с другими Заказчиками, а

    неотъемлемой частью Договора являются сроки... и санкции за их нарушение.

     

    Теперь лирика: в этом году будет уже 10 лет как я занимаюсь разработкой контроллеров на коммерческой основе. Опыт достаточный, чтобы

    выполнять задачи, которые позволяют содержать семью и кое-что больше. Дык, вот захотелось мне во всем разнообразии проектов (а они больше

    чем на половину не отличаются) применить некую технологию, которая позволяла бы мне на основе набора "галочек" генерить код (пусть даже под

    заранее выбранный МК), для тех же самых галочек генерить сборочные чертежи и спецификацию для производства для заранее разведенной в

    полном объеме платы и генерить пользовательское ПО для ПК. Начал с банальнейших часов: показывает дату/время/температуру и данные от

    других датчиков. Пользователь (на самом деле я) задает необходимые define в коде и на выходе получает прошивку, сборочник и спецификацию (кроме

    этого генерит Паспорт и Инструкцию). Наделал таким образом из одних исходников с десяток прошивок (читай, отдим кликом), внедрил в производство,

    но должного эффекта не получил: то не сконфигурируют, то не ту прошивку зальют. Короче вернулись к идее единной прошивки с максимальнейшим

    функционалом и с удобной преднастройкой (ввели базовую версию). В обмен на идеал, получили рост прибыли.

     

    Так вот, занимался я этой задачей года два непрерывно (постепенно разумеется). И цена такой работе не "сотня рублей". В конечном счете, цена

    устройства определяется не железом, а функционалом (прошивкой). Грубо говоря, на железе в 1'000 руб, можно решать задачу на 10'000 руб.

    Если прошивка будет открытая, то такие соотношения Вам не светят.

     

    Вам бы посоветовал (как и многое другие участники) начать с анализа и изучения уже существующих платформ, оставив за ненадобностью идею

    вписать свое имя золотыми буквами в историю электроники, open-source или чего там еще. Да, и "свой миллион" так просто вы не заработаете.

     

    Если есть задача "освоить средства", т.е. просто потратить деньги, то Вы можете с ней легко справиться, но потом не жалуйтесть, что разработчики

    такие плохие. Лучше на те же $150+ накупить отладочных плат у китайцев, стартеркита и/или ардуинщиков. Если денег много, заниматься изучением

    лень, но очень хочется деятельности, то поддержите какой-нить стартап (ибо их сейчас много и вроде модно). Например, open-source linux-компьютер

    размером с монетку за $20. Как думаете?

  12. Цена контролера - это хороший показатель. Готовую прошивку могу хоть сотни раз залить, для меня это не будет стоить ничего. А вот сотня железок это уже деньги.

    Портирование это работа для нового железа. Если старое не окупилось зачем новое? А если окупилось значит есть денежка на новое железо и на новый порт.

    По ценам на МК согласен. Такова реальность, цены одинаковые за равное количество кремния.

    RTOS это хорошо для большой задачи.

    Управление питанием это отдельная задача. Ни одна RTOS не мешает писать свои алгоритмы энергосбережения.

    Не понял: проект-то, вроде, будет открытым? О каких деньгах и сотнях железок идет речь?

    Для конечного пользователя сто рублей сверху рояля не играют, а в производительности и удобстве потерять можно много.

    В букварях учат выбирать железо под задачу, а не наоборот.

    И классика: выберите из трех (быстро, дешево, качественно) только два пункта.

  13. все системы прекрасные со своими минусами, где-то железо закрытое, у кого ПО, кто привязан строго к одному МК. Вот и с подвигло сделать свой велосипед.

    и

    Семейство МК выбрано STM32F другие варианты не рассматриваю.

    Делаете еще один велосипед "с минусом"? Зачем?

    У меня давным-давно работает УД на CAN, но я не делал привязку к аппаратной платформе, а разработал универсальную архитектуру приложения.

    Поэтому есть порты и под AVR, и под ARM7 (LPC23xx), и под Cortex-M (LPC17xx, STM32).

    Ни в коем случае не нужно думать в терминах "порты ввода-вывода" и "таймеры" - Вам же еще межконтроллерный обмен осмыслить придется.

  14. Я в своём загрузчике напоролся на проблемму с SysTick. Как я не старался, мне не удалось его "полностью блокировать". Запретил глобальное прерывание, остановил SysTick, сбросил все флаги в энвике, поставил маленькую задержку и тем не менее после глобального разрешения прерывания, изредко, возникало ещё одно прерывание от SysTick. Собственно проблемму решил добавив ещё один сброс энвика с задержкой.

    Я это к тому, что в каждом конкретном случае, подводные камни имеют место быть и "сбросить всё" без резета, не всегда так просто, как кажется на первый взгляд.

    В NVIC можно сбросить не только разрешение прерывания, но и флаг отложенного прерывания - периферия взвела,

    но в данный момент прерывание выполниться не может, т.к. запрещено. "Все не просто", но некоторые вещи вполне можно решить.

  15. Биты состояния прерывания (I и F) были заменены новым регистром PRIMASK (однобитный регистр, который будучи установлен в 1, разрешает генерацию только немаскируемого прерывания и исключения HardFault; все остальные прерывания и исключения маскируются).

    Читаем Джозефа Ю.

  16. Это же совсем просто: в самом начале загрузчика проверять специальный флаг и прыгать в основную прошивку или продолжать выполнять загрузчик.

    При этом не тронув никакой периферии.

  17. В кейле делал просто const uint8_t avr __attribute__((at(0x08010000))) = 1;

     

    Как это сделать в GCC?

    Может правильнее вырезать "дырку" во flash, разместить там секцию и привязать переменную к этой секции?

    Например, так

    sEEPROM_PACKET    eeprom[EEPROM_SIZE] __attribute__((section(".eeprom")));

×
×
  • Создать...