реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Разработать устройство, Ищу разработчика для создания устройств
jcxz
сообщение Sep 16 2018, 09:56
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Sep 16 2018, 12:23) *
И как потом, не тяжко поддерживать заросли веток?

Очень знакомая ситуация. На прошлой работе у нас был такой разработчик. biggrin.gif
Заложил МК с ресурсами по минимуму: "И так хватит, сейчас ведь влезает. Зато этот МК я хорошо знаю по прошлым проектам."
Но аппетит приходит во время еды: у заказчиков начали появляться хотелки, плюс - в ПО оказалось много багов, которые надо править. Ну и этому коллеге естественно ничего не оставалось делать как пойти по пути размножения веток версий прошивки для разных наборов программных хотелок и аппаратных исполнений устройства. В конце-концов дошло до того, что чтобы внести элементарную правку в код или поддержку новой простейшей фичи (которую мы добавляли в другие устройства за пару дней вместе с тестированием) он тратил на это по месяцу. Пока оптимизирует чтобы во флешь кое-как втиснуть, везде во все ветки прошивки внесёт, несколько раз переделает. Пока потом всё это оттестирует, найдёт все версии железа, которые надо протестить. Сидел ежедневно да самого вечера - перерабатывал каждый день: я приходил на работу - он уже там, уходил - он ещё там. biggrin.gif
И начальник его всё время шпынял - "как до сих пор не готово??!" biggrin.gif
Потом он уже признал свою ошибку, но сделать уже ничего было нельзя. Подшучивали над ним по этому поводу постоянно. В конце-концов он уволился. Хотя может конечно и не из-за этого...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 16 2018, 10:11
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(jcxz @ Sep 16 2018, 12:56) *
Очень знакомая ситуация. На прошлой работе у нас был такой разработчик. biggrin.gif
Заложил МК с ресурсами по минимуму: "И так хватит, сейчас ведь влезает. Зато этот МК я хорошо знаю по прошлым проектам."....
В конце-концов он уволился. Хотя может конечно и не из-за этого...

Я могу точно сказать, что по результатам опроса разработчиков, стоимость комплектации составляет от 10 до 25% от стоимости изделия. Причем 25% - это самое простое изделие, что нибудь типа аэрогриля.

Так вот, если посчитать, что вместо микроконтроллера за 10 долл, купили микроконтроллер за 5 долл. и при партии в 100 шт выиграли 500 долл. Но при этом, как тут сказано "он тратил на это по месяцу". Но ведь надо еще добавить, начальника, бухгалтера, снабженца и конструктора. Т.е. этот месяц еще 4-8 человек ждут результат. И в итоге фирма теряет 4-8 тыс долл. Т.е. гораздо, гораздо больше.
А по поводу "Зато этот МК я хорошо знаю по прошлым проектам" - да, это наше все. "Мы только Мегу знаем и любим, а больше и ничего нам не надо" - вот основной лозунг. А вот "ихние" начинают проект с выбора того, чего "нужно", а не того, чего было в "прошлый раз". И тут добавка. Покупать микроконтроллеры выгоднее не там, где дешевле, а там, где лучше техподдержка. Просто потому, что так быстрее осваивается все новое. И не подсунут контрафакт.

Да еще на все это накладываются затраты на сопровождение. Потому как если есть возможность апгрейдить, то тогда клиент не выкинет оборудование и не купит потом его у конкурентов.
Вывод: экономия на микросхемах - путь к банкротству.

По поводу "разработать с нуля"... Вот скажем в нищей германии, есть фирмы, которые покупают Мерсы, разбирают их, тюнингуют и потом продают уже под своей маркой. Потому как делать с нуля - дороже будет... А у нас есть фирмы, которые изготавливают стартовые наборы. Ну хотя бы http://www.starterkit.ru/html/index.php. Там и процессорные платы и модули расширения. Так зачем все разрабатывать с нуля? А уж если так хочется "все в одном", так наверняка проще договориться с ними же. Или же просто покупать пару фирменных стартовых наборов и жгутами соединять их между собой. Но это, конечно, только мое мнение...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 16 2018, 10:55
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Sep 16 2018, 12:56) *
Заложил МК с ресурсами по минимуму

ОЗУ 6К и ПЗУ 16К это минимум?
В эти объемы можно уложить нехилый функционал (пример я привел), а не то что 4 реле по CAN.
Я не знаю как ваши фирмы работают, но у нас есть пример: толстый контроллер на базе STM32F407VG.
На нем можем сделать все что угодно и нет никаких проблем с памятью, скорости разработки, отладки и т.п.
А есть задачки, для которых вполне хватает STM32F030K6 (причем основные расходы ПЗУ на шрифты).
Правда, затем заменили на STM32F051K8 именно из соображений, чтоб по памяти не упираться.
Зачем использовать дорогой, трудоемкий, габаритный контроллер, когда задачу прекрасно решает
мелкий во всех смыслах контроллер? Нужно понимать, что если мы не можем решить задачу на мелкоте, то
на фулфарше она решается гарантированно, поэтому развиваем оба. Кста, сейчас появился промежуточный
контроллер с плюсами обоих на STM32F030CC. По скорости разработки никогда описываемых вами ужасов не было,
типовая задачка занимает 2-4 часа вместе со сборкой стенда и документированием.

На той неделе был на совещании - предлагают мини-ПК в довесок к STM32 ставить, чтоб был WiFi, в устройстве типа,
получил-отправил пакет по CAN (авто-диагностика). Так что с оверхэдом у нас все в порядке wink.gif.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 16 2018, 11:24
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Sep 16 2018, 13:55) *
ОЗУ 6К и ПЗУ 16К это минимум?

Вы передёргиваете. Позволю себе напомнить:
Цитата(adnega @ Sep 16 2018, 10:03) *
Распределение памяти такое:
...
- 10К - приложение;
...
В приложении - чуть больше 900 свободных байт.

Итого: да - 16К - это слишком мало если из них свободных остаётся всего 900 байт (~5.5%).

Цитата(adnega @ Sep 16 2018, 13:55) *
В эти объемы можно уложить нехилый функционал (пример я привел), а не то что 4 реле по CAN.

Я не знаю какой функционал туда можно уложить и мне это неинтересно. Я говорил про ваш случай, когда оставлено всего 5.5% свободной флешь.

Цитата(adnega @ Sep 16 2018, 13:55) *
Нужно понимать, что если мы не можем решить задачу на мелкоте, то
на фулфарше она решается гарантированно, поэтому развиваем оба.

Из этих слов видно, что Вы ещё не имели дела с серийным производством и с множеством заказчиков. С тех.поддержкой и сопровождением этих заказчиков. Да если ещё проект не один, а их множество уже сделанных. Иначе бы уже наелись проблем с поддержкой этого зоопарка. Ну тогда жизнь - она со временем научит... шишками laughing.gif

Цитата(adnega @ Sep 16 2018, 13:55) *
типовая задачка занимает 2-4 часа вместе со сборкой стенда и документированием.

ну-ну... типовая мигалка лампочками biggrin.gif
А бывают задачки в МБ-ы исходного кода. Своего. И файлов - под сотню. Тогда, только чтобы понять в каком модуле глюк, бывает нужно несколько дней.
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 16 2018, 15:08
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Sep 16 2018, 14:24) *
Из этих слов видно, что Вы ещё не имели дела с серийным производством и с множеством заказчиков.

С чего вы взяли? С того, что без шишек умею работать?
Контроллеры выпускаются серийно с конца 2011 года.
Примерно 100 штук ежемесячно. Изделия очень разные, Заказчиков множество.
В техподдержке один человек, который часто привлекается к другим задачам.

Конкретно за STM32F042F4 скажу, что это делал себе для умного дома.
Использую одну прошивку с базовым функционалом. Один работает в подсветке кухни,
второй рулит санузлом. Логика элементарная: плавно включить-выключить свет,
по датчику дверцы или движению. При этом по CAN можно узнать и температуру МК,
и напряжение питания, максимальную глубину стека, uptime, хеши объектов и т.п.
Для решения основной задачи это все не нужно, и добавил только потому, что место оставалось.
За вечер превратил аналогичный контроллер в 9-канальный измеритель температуры.
По CAN рассылает сообщения с температурой датчиков, ID которых заданы в энергонезависимых
переменных. Еще делал какую-то прошивку для управления кондиционером, а другую со сбором
показаний весов с ИК-выходом, но подробностей уже не помню.
Есть STM32F042F6 с 32К ПЗУ, можно их поставить, но зачем, если и в 16К все влезает?
Сенсорные выключатели я делаю на STM32F042K6, дык, фулфарш-прошивка занимает около 11К,
при выделенных 20К. Там функционал тот же, только всего больше, плюс обработка емкостных сенсоров.
Самый крутой контроллер для умного дома на STM32F407 использует 42К из выделенных 128К.
По функционалу там и Ethernet, и uSD, дисплей, GPS для часов, датчики давления/влажности/температуры,
сервер времени и конфигураций в добавку ко всему ранее сказанному.
Я не могу придумать код на 64К - факт, подтвержденный временем.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 16 2018, 15:27
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Sep 16 2018, 18:08) *
Я не могу придумать код на 64К - факт, подтвержденный временем.

Ну добавьте в это фарш HTTP-сервер с парой картинок и... придумалось biggrin.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 16 2018, 16:48
Сообщение #22


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(adnega @ Sep 16 2018, 18:08) *
Я не могу придумать код на 64К - факт, подтвержденный временем.

Во даете.
У меня тут близится к релизу простой загрузчик по UART и по CAN, он уже занимает 70 КБ с максимальной оптимизацией по размеру.
Сделан на фреймворке Mbed, который занимает бОльшую часть кода.
В Mbed не ленятся и даже придумывают классы типа NonCopyable только лишь для того
чтобы юзер случайно не скопировал объекты RTOS в операциях присвоения (вспомнил, потому что тут как то была тема про опасное копирование структур).
Это теперь называется эргономика программирования.
Опора на Mbed позволяет пропустить огромный кусок документирования.
Ускоряет программирование кратно.
Сразу идет с багажом полезнейших стеков, для умного дома кстати.

А вы говорите 10 кбайт. Эт не понтово, нынче.



Go to the top of the page
 
+Quote Post
C2000
сообщение Sep 16 2018, 17:00
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 321
Регистрация: 20-01-11
Из: г. Мытищи
Пользователь №: 62 366



Цитата(smart_pic @ Sep 15 2018, 19:53) *
Реально не понятно зачем для управления 4реле по CAN такие требования к процессору? Студент?

Какие? STM32 можно купить менее чем за 1$

Цитата(MAVR @ Sep 16 2018, 03:00) *
..

Реле можно использовать твердотельные, уж точно не "залипнет"
...

01.gif

Цитата(AlexandrY @ Sep 16 2018, 09:32) *
И процессор здесь не нужен. Такое делается на экспандерах типа MCP25055


Если перейти по указанной ссылке можно увидеть что:
Status: Not Recommended for new designs




Какой бюджет?
Что хотите получить на выходе? Т.е. что будет считаться завершением работы?
ksrp@yandex.ru
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 16 2018, 18:08
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Sep 16 2018, 18:27) *
с парой картинок

Картинки, шрифты, звуковые файлы, обновления прошивок, пользовательские скрипты - это все лежит на uSD-карте.
Я говорил про сам код - 64К хватит каждому wink.gif

Цитата
У меня тут близится к релизу простой загрузчик по UART и по CAN, он уже занимает 70 КБ с максимальной оптимизацией по размеру.

Для простого что-то многовато. У меня загрузчик и образы расшифровывает, и CRC32 считает, и в приложение функции экспортирует.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 16 2018, 18:58
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(adnega @ Sep 16 2018, 21:08) *
Я говорил про сам код - 64К хватит каждому wink.gif

Ваши данные выглядят как-то фантастично. И Ethernet (чистый? Или всё-таки TCP? в чистом без TCP - мало смысла) и uSD (FatFS? она очень даже немаленькая) и ещё и LCD (с граф.-API поди?) и пр. И всего 42К??? wacko.gif Что-то как-то маловато... ну если только там всё очень примитивно сделано, уж извините. laughing.gif
Вот смотрю один свой проект: TCP нет, SD - тоже нет, и LCD нет.; есть uCOS, BT+GPS, управление PMSM-мотором, гироскоп, RF-приёмник, ну и всякая мелочь типа UART и конфигураторов/user-API. И получаю == 70264 байт флеша при полной оптимизации IAR (поставил даже оптимизацию по размеру специально).
И что-то как-то не верится в 42К....
Может покажете Ваш .map? rolleyes.gif
Вот мой от этого проекта:
CODE
Section Kind Address Size Object
------- ---- ------- ---- ------
"P1": 0x11278
IMAGE_HEAD 0x08000000 0x228 <Block>
.intvec const 0x08000000 0x20 misca.o [2]
.checksum const 0x08000020 0x4 Place holder __checksum
.codehead const 0x08000024 0x8 misca.o [2]
.intvecTail const 0x0800002c 0x1d0 misca.o [2]
.codeSignature const 0x080001fc 0x2c main.o [2]
.text ro code 0x08000228 0x1f0 xatan.o [4]
.text ro code 0x08000418 0x2e DblCmpGe.o [4]
.rodata const 0x08000446 0x2 os_dbg.o [2]
.text ro code 0x08000448 0x1a2 DblMul.o [4]
.rodata const 0x080005ea 0x2 os_dbg.o [2]
.text ro code 0x080005ec 0xe8 DblAdd.o [4]
.text ro code 0x080006d4 0x256 DblDiv.o [4]
.rodata const 0x0800092a 0x2 os_dbg.o [2]
.text ro code 0x0800092c 0x2e DblCmpLe.o [4]
.rodata const 0x0800095a 0x2 os_dbg.o [2]
.text ro code 0x0800095c 0x180 DblSub.o [4]
.const const 0x08000adc 0x804 foc.o [2]
.const const 0x080012e0 0x1004 foc.o [2]
.const const 0x080022e4 0x800 svm.o [2]
.dma_const const 0x08002ae4 0x24 gyro.o [2]
.rodata const 0x08002b08 0x10 datetime.o [2]
.rodata const 0x08002b18 0x10 main.o [2]
.rodata const 0x08002b28 0xc main.o [2]
.rodata const 0x08002b34 0x4 main.o [2]
.rodata const 0x08002b38 0x8 main.o [2]
.rodata const 0x08002b40 0x40 main.o [2]
.rodata const 0x08002b80 0x2a main.o [2]
.rodata const 0x08002baa 0x2 os_dbg.o [2]
.rodata const 0x08002bac 0x4 os_dbg.o [2]
.rodata const 0x08002bb0 0xc simcom.o [2]
.rodata const 0x08002bbc 0x74 ui.o [2]
.text ro code 0x08002c30 0x734 adc.o [2]
.text ro code 0x08003364 0x3a ABImemset48.o [5]
.rodata const 0x0800339e 0x2 os_dbg.o [2]
.text ro code 0x080033a0 0x6 ABImemclr4.o [5]
.rodata const 0x080033a6 0x2 os_dbg.o [2]
.text ro code 0x080033a8 0xad4 bsp.o [2]
.text ro code 0x08003e7c 0x114 misc.o [2]
.text ro code 0x08003f90 0x4c adc_a.o [2]
.text ro code 0x08003fdc 0x5c8 pwm.o [2]
.text ro code 0x080045a4 0x264 misca.o [2]
.text ro code 0x08004808 0x5c0 hib.o [2]
.text ro code 0x08004dc8 0x11c crc.o [2]
.text ro code 0x08004ee4 0x494 uart.o [2]
.text ro code 0x08005378 0x3a4 service.o [2]
.text ro code 0x0800571c 0x76 ABImemcpy_unaligned.o [5]
.rodata const 0x08005792 0x2 os_dbg.o [2]
.text ro code 0x08005794 0x46c rotor.o [2]
.text ro code 0x08005c00 0xee I64DivMod.o [5]
.rodata const 0x08005cee 0x2 os_dbg.o [2]
.text ro code 0x08005cf0 0x51e foc.o [2]
.rodata const 0x0800620e 0x2 os_dbg.o [2]
.text ro code 0x08006210 0xa4 svm.o [2]
.text ro code 0x080062b4 0x58 sine.o [2]
.text ro code 0x0800630c 0x14e os_hooks.o [2]
.rodata const 0x0800645a 0x2 os_dbg.o [2]
.text ro code 0x0800645c 0x178 periodic.o [2]
.text ro code 0x080065d4 0x354 ccu.o [2]
.text ro code 0x08006928 0x50 os_time.o [2]
.text ro code 0x08006978 0xc cstartup_M.o [5]
.text ro code 0x08006984 0xe8 startup.o [2]
.text ro code 0x08006a6c 0xdd2 xprintfdefault.o [3]
.rodata const 0x0800783e 0x2 os_dbg.o [2]
.text ro code 0x08007840 0x4a8 os_core.o [2]
.text ro code 0x08007ce8 0x1dc datetime.o [2]
.text ro code 0x08007ec4 0x36 strlen.o [5]
.text ro code 0x08007efa 0x2 os_dbg.o [2]
.text ro code 0x08007efc 0x1c sqrtf.o [4]
.text ro code 0x08007f18 0x136 os_sem.o [2]
.rodata const 0x0800804e 0x2 os_dbg.o [2]
.text ro code 0x08008050 0x15e os_mbox.o [2]
.rodata const 0x080081ae 0x2 os_dbg.o [2]
.text ro code 0x080081b0 0x2b8 os_task.o [2]
.text ro code 0x08008468 0x428 main.o [2]
.text ro code 0x08008890 0x22 fpinit_M.o [4]
.rodata const 0x080088b2 0x2 os_dbg.o [2]
.text ro code 0x080088b4 0x1a cmain.o [5]
.rodata const 0x080088ce 0x2 os_dbg.o [2]
.text ro code 0x080088d0 0x16 strchr.o [5]
.rodata const 0x080088e6 0x2 os_dbg.o [2]
.text ro code 0x080088e8 0x58 memchr.o [5]
.text ro code 0x08008940 0x44 xdnorm.o [4]
.text ro code 0x08008984 0x114 xdscale.o [4]
.text ro code 0x08008a98 0x58 DblToI32.o [4]
.text ro code 0x08008af0 0x30 I32ToDbl.o [4]
.text ro code 0x08008b20 0xe div.o [3]
.rodata const 0x08008b2e 0x1 main.o [2]
CODE ro code 0x08008b30 0xac os_cpu_a.o [2]
.text ro code 0x08008bdc 0xa0 os_cpu_c.o [2]
.text ro code 0x08008c7c 0x6 ABImemclr.o [5]
.text ro code 0x08008c84 0xc iarEdom.o [5]
.text ro code 0x08008c90 0xc main.o [2]
.text ro code 0x08008c9c 0xe0 bt.o [2]
.text ro code 0x08008d7c 0x2024 dte.o [2]
.text ro code 0x0800ada0 0x7c main.o [2]
.text ro code 0x0800ae1c 0x600 terminal.o [2]
.text ro code 0x0800b41c 0x1a2c simcom.o [2]
.text ro code 0x0800ce48 0x328 dflash.o [2]
.text ro code 0x0800d170 0x4e0 rf.o [2]
.text ro code 0x0800d650 0x8ce gyro.o [2]
.text ro code 0x0800df20 0x47c menu.o [2]
.text ro code 0x0800e39c 0x28 data_init.o [5]
.text ro code 0x0800e3c4 0x4 exit.o [3]
.text ro code 0x0800e3c8 0x5e ABImemset.o [5]
.text ro code 0x0800e428 0xc errno.o [3]
.text ro code 0x0800e434 0xc main.o [2]
.text ro code 0x0800e440 0x234 str.o [2]
.text ro code 0x0800e674 0x40 I64ToDbl.o [4]
.text ro code 0x0800e6b4 0x4e FltToDbl.o [4]
.text ro code 0x0800e704 0x45a xsin.o [4]
.text ro code 0x0800eb60 0xac atan.o [4]
.text ro code 0x0800ec0c 0x62 memcmp_unaligned.o [5]
.text ro code 0x0800ec6e 0x14 gyro.o [2]
.text ro code 0x0800ec84 0x6a atan2f.o [4]
.text ro code 0x0800ecf0 0x324 ansi.o [2]
.text ro code 0x0800f014 0xa cexit.o [5]
.text ro code 0x0800f020 0x168 xquad.o [4]
.text ro code 0x0800f188 0xa4 xatanf.o [4]
.text ro code 0x0800f22c 0xc XXexit.o [5]
.text ro code 0x0800f238 0x7e xdint.o [4]
.text ro code 0x0800f2b8 0x20 DblCmpEq.o [4]
.text ro code 0x0800f2d8 0x1a8 fmod.o [4]
.text ro code 0x0800f480 0x1cbc ui.o [2]
.text ro code 0x0801113c 0x20 cmain_call_ctors.o [5]
.text ro code 0x0801115c 0x18 cppinit.o [3]
.textRAM ro code 0x08011174 0x4 intmon.o [2]
SHT$$PREINIT_ARRAY 0x08011178 0x0 <Block>
SHT$$INIT_ARRAY 0x08011178 0x4 <Block>
.init_array const 0x08011178 0x4 main.o [2]
.text ro code 0x0801117c 0x40 zero_init3.o [5]
.text ro code 0x080111bc 0x38 packbits_init_single.o [5]
.iar.init_table const 0x080111f4 0x24 - Linker created -
.rodata const 0x08011218 0x0 zero_init3.o [5]
.rodata const 0x08011218 0x0 packbits_init_single.o [5]
Initializer bytes const 0x08011218 0x53 <for P3 mid-1>
.codetail const 0x0801126c 0xc misca.o [2]
- 0x08011278 0x11278

Цитата(adnega @ Sep 16 2018, 21:08) *
CRC32 считает

Чтобы посчитать CRC32 нужно всего пару десятков байт. rolleyes.gif

PS: да конечно - в моём .map есть примерно около 15КБ отладочного кода. Но как без него отлаживать? Так что его тоже нужно включать в необходимый объём флеша.
Так что как видите - Вы не правы, даже для простого управления движком, с небольшим количеством дополнительного функционала, 64КБ - уже мало.
Это уже даже не говоря о том, что отлаживать приходится с выключенной оптимизацией, а тогда объём кода ещё значительно вырастет.
Тот же проект с Low-оптимизацией для (отладки) уже == 83324 байт. Так что в "достаточные для любого случая 64КБ" - не верится ну совсем.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 16 2018, 19:14
Сообщение #26


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(adnega @ Sep 16 2018, 21:08) *
Для простого что-то многовато. У меня загрузчик и образы расшифровывает, и CRC32 считает, и в приложение функции экспортирует.

Да действительно расшифровка каким нибудь блочным алгоритмом и CRC32 занимают не больше килобайта. Это мелочи.
CRC с аппаратным ускорением занимает пару десятков команд, не стоит даже упоминания.
У меня кстати MD5 считает, это надежнее.
Но я могу и SHA вставить. А могу и весь TLS стек с RSA и ассиметричным шифрованием. Это возможности фреймворка.
Но размер еще увеличится. Размер должен быть большим. Размер есть показатель крутизны кода. cool.gif


Цитата(jcxz @ Sep 16 2018, 21:58) *
И получаю == 70264 байт флеша при полной оптимизации IAR (поставил даже оптимизацию по размеру специально).

Что-то очень мало.
В аналогичном приложении с мотором, 9D IMU сенсором, без LCD и без GPS, но с MQX, BT, USB и FAT у меня занимает 209 КБ.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 16 2018, 19:42
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AlexandrY @ Sep 16 2018, 22:14) *
В аналогичном приложении с мотором, 9D IMU сенсором, без LCD и без GPS, но с MQX, BT, USB и FAT у меня занимает 209 КБ.

ну - у меня FAT и USB-стека всё-таки нет; да и uCOS думаю будет полегче MQX.
Зато в другом проекте с LCD(без картинок, только кучка шрифтов) + WiFi (со всем что поверх оного) + универсальный ИК-приёмник с обучением + MP3-декодер + AAC+-декодер + GUI довольно развесистый + ещё кучка всякой мелочи - при полной оптимизации уже == 226200 байт. И это при том, что довольно значительная часть MP3- и AAC-декодеров - написана на асме.
Так что в 42КБ ув. adnega как-то верится с трудом. Ну если только он не целиком на асме писал. biggrin.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 17 2018, 04:17
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Sep 16 2018, 22:42) *
Так что в 42КБ ув. adnega как-то верится с трудом.

Все самописное. Ethernet только IP и UDP, FAT только чтение, никакой ОС нет.
Вроде, ESP8266 должен еще работать.

CODE
.isr_vector 0x0000000008040000 0x188
0x0000000008040000 . = ALIGN (0x4)
*(.isr_vector)
.isr_vector 0x0000000008040000 0x188 ./obj_sw/startup_stm32f407.o
0x0000000008040000 vectors
0x0000000008040188 . = ALIGN (0x4)

.flashtext 0x0000000008040188 0x0
0x0000000008040188 . = ALIGN (0x4)
*(.flashtext)
0x0000000008040188 . = ALIGN (0x4)

.text 0x0000000008040188 0xabdc
0x0000000008040188 . = ALIGN (0x4)
*(.text)
.text 0x0000000008040188 0xecc ./obj_sw/main.o
0x0000000008040188 cb_on_item
0x0000000008040254 on_fat_search_event
0x0000000008040340 cb_init_search
0x000000000804038c on_fat_init_event
0x000000000804049c on_fat_open_update_event
0x0000000008040678 on_read
0x0000000008040760 on_init_search
0x00000000080407d0 on_init
0x00000000080408a4 on_fat_read_update_event
0x0000000008040cec i2c_delay
0x0000000008040d02 i2c_write
0x0000000008040d74 i2c_read
0x0000000008040e04 i2c_start
0x0000000008040e44 i2c_stop
0x0000000008040e80 oled_init
0x0000000008040fb8 oled_set_page_address
0x0000000008040fdc oled_set_column_address
0x0000000008041010 oled_picture
.text 0x0000000008041054 0x50 ./obj_sw/startup_stm32f407.o
0x0000000008041054 Reset_Handler
.text 0x00000000080410a4 0xf40 ./obj_sw/command.o
0x00000000080410a4 func_reboot
0x00000000080410c4 func_sn
0x00000000080410dc func_wifi_led
0x00000000080410e8 func_wifi_id
0x00000000080410ea func_rtc_get_param
0x0000000008041100 func_rtc_get_param_off
0x0000000008041110 func_who
0x000000000804113c func_help
0x00000000080411a4 func_file
0x00000000080411c8 func_get_volume
0x0000000008041240 func_can_stat
0x0000000008041308 func_rtc_list
0x0000000008041394 func_param
0x0000000008041614 func_mac
0x0000000008041718 func_ip
0x00000000080417cc func_mask
0x0000000008041880 func_gw
0x0000000008041934 func_volume
0x00000000080419a8 func_name
0x0000000008041a0c func_set_time
0x0000000008041a38 func_rtc_id
0x0000000008041cfc func_rtc_set_id
0x0000000008041d50 func_rtc_set_param
0x0000000008041dae func_rtc_update
0x0000000008041e2c func_rtc_prog_write
0x0000000008041eac func_rtc_prog_read
0x0000000008041f08 console_command_mainloop
.text 0x0000000008041fe4 0xa6c ./obj_sw/define.o
0x0000000008041fe4 set_uart_txeie
0x0000000008041ff0 set_pin
0x00000000080420b8 set_volume
0x000000000804212c every2bit
0x000000000804214c con_ver
0x000000000804218c con_per
0x00000000080421ec con_datetime
0x0000000008042354 con_uptime
0x00000000080423cc rtc_get_datetime
0x0000000008042470 rtc_set_datetime
0x000000000804257c tick
0x0000000008042598 print_fault
0x00000000080426b4 rtc_on_sync
0x0000000008042858 rtc_timer
.text 0x0000000008042a50 0x4e8 ./obj_sw/init.o
0x0000000008042a50 init_ETH
0x0000000008042b64 SDIO_power
0x0000000008042bd4 init_SDIO
0x0000000008042bf0 init_DAC
0x0000000008042bfc init_TIMER3
0x0000000008042c1c init_SYSTEM
0x0000000008042c5c init_GPIO
0x0000000008042da4 init_SYSTICK
0x0000000008042dc8 init_USART1
0x0000000008042df4 init_USART2
0x0000000008042e1c init_CLK
0x0000000008042e36 init_NVIC
0x0000000008042eb4 init_RCC
0x0000000008042ed4 init_RTC
.text 0x0000000008042f38 0x102c ./obj_sw/isr.o
0x0000000008042f38 update_timer
0x000000000804357c CAN1_TX_IRQHandler
0x000000000804360c CAN1_RX0_IRQHandler
0x00000000080436b4 EXTI4_IRQHandler
0x000000000804380c ETH_IRQHandler
0x000000000804387c TIM3_IRQHandler
0x0000000008043898 wifi_timer
0x0000000008043c48 USART2_IRQHandler
0x0000000008043cb4 DoRCCStateCommand
0x0000000008043d44 RCC_IRQHandler
0x0000000008043d90 NMIException
0x0000000008043dbc USART1_IRQHandler
0x0000000008043e2c rcc_timer
0x0000000008043e8c workled_blink
0x0000000008043f28 SysTickHandler
.text 0x0000000008043f64 0x538 ./obj_sw/serial_port.o
0x0000000008043f64 sp_init
0x0000000008043fb6 sp_tx_push
0x0000000008043fde sp_tx_pop
0x000000000804401e sp_str
0x0000000008044034 sp_start
0x000000000804404c sp_txen_timer
0x000000000804407e sp_rx_push
0x00000000080440a6 sp_rx_pop
0x00000000080440e6 sp_hex
0x0000000008044118 sp_dec
0x0000000008044178 sp_udec
0x00000000080441c8 command_exec
.text 0x000000000804449c 0x3c ./obj_sw/exception.o
0x000000000804449c HardFaultException
0x00000000080444a8 my_memcpy
0x00000000080444c0 rbit8
0x00000000080444c8 get2pow
0x00000000080444d2 getIPSR
.text 0x00000000080444d8 0xdc8 ./obj_sw/sdio.o
0x00000000080444d8 con_sdio_ans
0x000000000804455c SDIO_Test
0x0000000008044594 SDIO_Send
0x00000000080445bc SDIO_Read
0x000000000804466c SDIO_Delay
0x0000000008044684 SDIO_IRQHandler
0x00000000080450dc SDIO_Init
0x0000000008045134 SDIO_Write
0x0000000008045204 SDIO_CardPresend
0x0000000008045214 SDIO_timer
.text 0x00000000080452a0 0xb6c ./obj_sw/fat.o
0x00000000080452a0 fat_open_async_on_item
0x00000000080452c0 fat_cluster_to_sector
0x00000000080452e0 fat_fs_info_test
0x0000000008045314 fat_MBR_test
0x000000000804535c fat_fill
0x0000000008045464 fat_init_callback
0x000000000804550c fat_get_dir_item
0x0000000008045664 sd_read_async
0x0000000008045668 fat_item
0x00000000080456ec fat_search_callback
0x0000000008045918 fat_read_async_callback
0x0000000008045ab0 fat_init_async
0x0000000008045b10 fat_search_async
0x0000000008045bc0 fat_open_async_on_event
0x0000000008045c58 fat_open_async
0x0000000008045d10 fat_read_async
.text 0x0000000008045e0c 0x1e8 ./obj_sw/mstring.o
0x0000000008045e0c mmemset
0x0000000008045e1e mstrcmp
0x0000000008045e38 mstrcpy
0x0000000008045e4a mstrcat
0x0000000008045e66 mstrupr
0x0000000008045e82 mstrcmp_f
0x0000000008045ea4 mstrlen
0x0000000008045eb4 mstr2ip
0x0000000008045f22 mstradd_char
0x0000000008045f32 mstradd_int2
0x0000000008045f5c cp866_to_win1251
0x0000000008045fa2 unicode_to_win1251
.text 0x0000000008045ff4 0xa0 ./obj_sw/player.o
0x0000000008045ff4 player_irq
.text 0x0000000008046094 0x354 ./obj_sw/arp.o
0x0000000008046094 arp_send_request
0x0000000008046130 arp_send_answer
0x00000000080461c8 arp_init
0x00000000080461f8 arp_timer
0x0000000008046274 arp_find
0x00000000080462a8 arp_add
0x0000000008046350 emac_arp
.text 0x00000000080463e8 0x6ec ./obj_sw/emac.o
0x00000000080463e8 emac_init_tx
0x0000000008046404 emac_get_tx
0x0000000008046444 emac_send_tx
0x0000000008046474 emac_abort_tx
0x00000000080464a0 emac_send
0x0000000008046544 emac_rx_data
0x000000000804658c read_PHY
0x00000000080465b4 read_PHY_im
0x00000000080465c4 emac_timer
0x0000000008046a9c write_PHY
0x0000000008046ac0 write_PHY_im
.text 0x0000000008046ad4 0xbc ./obj_sw/icmp.o
0x0000000008046ad4 emac_icmp
.text 0x0000000008046b90 0x114 ./obj_sw/ip.o
0x0000000008046b90 emac_ip
0x0000000008046bcc ip_send
.text 0x0000000008046ca4 0x340 ./obj_sw/udp.o
0x0000000008046ca4 get_hex
0x0000000008046ce2 udp_fill
0x0000000008046d0c udp_send_data
0x0000000008046d94 emac_udp
.text 0x0000000008046fe4 0x420 ./obj_sw/nokia_1202.o
0x0000000008046fe4 nokia_1202_cs
0x0000000008046fe6 nokia_1202_send
0x0000000008046fe8 nokia_1202_set
0x0000000008047048 nokia_1202_init
0x000000000804713c nokia_1202_show_icon
0x00000000080471bc nokia_1202_str
0x00000000080472b4 nokia_1202_strto
0x00000000080473e4 nokia_1202_set_contrast
.text 0x0000000008047404 0x238 ./obj_sw/datetime.o
0x0000000008047404 datetime_init
0x0000000008047406 date_to_int
0x0000000008047438 int_to_time
0x000000000804745e int_to_date
0x00000000080474dc datetime_update
.text 0x000000000804763c 0x1034 ./obj_sw/can.o
0x000000000804763c can_message_load
0x00000000080476a4 can_pc_id
0x00000000080476a8 can_pc_conf
0x00000000080476ac can_pc_media
0x00000000080476b0 can_rtc_rt
0x00000000080476b4 can_rtc_id
0x00000000080476b8 can_rtc_media
0x00000000080476bc can_init_bus
0x000000000804776c can_init
0x00000000080477d4 can_start
0x0000000008047860 can_send
0x000000000804789c can_pc_rt
0x0000000008047924 can_rtc_conf
0x0000000008048640 can_exec
.text 0x0000000008048670 0x5c ./obj_sw/crc32.o
0x0000000008048670 crc32
0x0000000008048698 crc32_init
0x00000000080486a2 crc32_next
.text 0x00000000080486cc 0x44 ./obj_sw/irand.o
0x00000000080486cc rand_get
0x00000000080486e4 rand_init
0x00000000080486e8 rand_decode
*(.text.*)
.text.startup 0x0000000008048710 0x7e8 ./obj_sw/main.o
0x0000000008048710 main
*(.rodata)
.rodata 0x0000000008048ef8 0x10e ./obj_sw/command.o
0x0000000008048ef8 console_command_table
0x0000000008048fd8 s_undef
0x0000000008048ffd s_reset
.rodata 0x0000000008049006 0x94 ./obj_sw/define.o
0x0000000008049006 param_list
0x000000000804902c param_default
0x000000000804906c s_who
.rodata 0x000000000804909a 0x43 ./obj_sw/isr.o
0x000000000804909a GET_PAGE1
0x00000000080490bc GET_PAGE2
.rodata 0x00000000080490dd 0x11 ./obj_sw/serial_port.o
0x00000000080490dd Hex
*fill* 0x00000000080490ee 0x2
.rodata 0x00000000080490f0 0x14 ./obj_sw/emac.o
0x00000000080490f0 br_mac
0x00000000080490f8 br_ip
0x00000000080490fc zr_mac
.rodata 0x0000000008049104 0x7f0 ./obj_sw/font.o
0x0000000008049104 Font_Single
.rodata 0x00000000080498f4 0x400 ./obj_sw/crc32.o
0x00000000080498f4 crc_table
*(.rodata*)
.rodata.str1.1
0x0000000008049cf4 0x452 ./obj_sw/main.o
0x468 (size before relaxing)
.rodata.str1.1
0x000000000804a146 0x3b2 ./obj_sw/command.o
0x3c6 (size before relaxing)
.rodata.str1.1
0x000000000804a4f8 0x112 ./obj_sw/define.o
0x11c (size before relaxing)
.rodata.str1.1
0x000000000804a60a 0x1d8 ./obj_sw/isr.o
0x1f6 (size before relaxing)
.rodata.str1.1
0x000000000804a7e2 0x282 ./obj_sw/sdio.o
0x298 (size before relaxing)
.rodata.str1.1
0x000000000804aa64 0x18 ./obj_sw/fat.o
0x1b (size before relaxing)
.rodata.str1.1
0x000000000804aa7c 0xa ./obj_sw/player.o
.rodata.str1.1
0x000000000804aa86 0xf9 ./obj_sw/emac.o
0x101 (size before relaxing)
.rodata.str1.1
0x000000000804ab7f 0x15 ./obj_sw/udp.o
.rodata.str1.1
0x000000000804ab94 0x1cd ./obj_sw/can.o
0x1eb (size before relaxing)
*(.glue_7)
.glue_7 0x0000000000000000 0x0 linker stubs
*(.glue_7t)
.glue_7t 0x0000000000000000 0x0 linker stubs
0x000000000804ad64 . = ALIGN (0x4)
*fill* 0x000000000804ad61 0x3
0x000000000804ad64 _etext = .
0x000000000804ad64 _sidata = _etext

.vfp11_veneer 0x000000000804ad64 0x0
.vfp11_veneer 0x0000000000000000 0x0 linker stubs

.v4_bx 0x000000000804ad64 0x0
.v4_bx 0x0000000000000000 0x0 linker stubs

.iplt 0x000000000804ad64 0x0
.iplt 0x0000000000000000 0x0 d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/thumb/cortex-m3/crtbegin.o

.rel.dyn 0x000000000804ad64 0x0
.rel.iplt 0x0000000000000000 0x0 d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/thumb/cortex-m3/crtbegin.o

.ccmram
*(.ccmram)

.bkpsram
*(.bkpsram)

.bootloader
*(.bootloader)

.eeprom
*(.eeprom)

.image
*(.image)

Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Sep 17 2018, 05:03
Сообщение #29


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(adnega @ Sep 17 2018, 07:17) *
Все самописное. Ethernet только IP и UDP, FAT только чтение, никакой ОС нет.

Мне кажется у вас серьезный кризис в личной продуктивности. Замыкание на самописном коде - прямой путь к выгоранию.
Бросайте это дело и беритесь за что-нибудь трендовое, скажем Amazon FreeRTOS или Zephyr Project или Mbed.
Там узнаете как пишутся действительно защищенные загрузчики и сколько они занимают места (mcuboot),
как работают действительно надежные файловые системы(nffs, littlefs) и как делать менеджеры систем с встраиваемыми протоколами и транскодерами (mcumgr).
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 17 2018, 05:27
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(AlexandrY @ Sep 17 2018, 08:03) *
Мне кажется у вас серьезный кризис в личной продуктивности. Замыкание на самописном коде - прямой путь к выгоранию.

Скажем так: я с вами не согласен. Кто каким инструментом умеет пользоваться, тот им и должен работать.
Изучили вы много сторонних библиотек - молодец - пользуйтесь ими. У меня много своих библиотек и я хорошо ими пользуюсь.
На старой работе попробовал разок использовать чужой велосипед, т.к. руководство запретило изобретать свой,
что ж потратил времени больше на изучение FreeRTOS, uIP, StdLib. И что самое обидное - из коробки не работает - нужно допиливать.
А править чужую библиотеку, на мой взгляд, крайне неправильный подход.

Просто для общего развития: какие критерии "серьезного кризиса в личной продуктивности"? Вдруг он у меня действительно есть.

Мы очень сильно отошли от темы. Не думаю, что ТС использует или планирует использовать в будущем сторонние библиотеки.
Мнения высказаны. Я считаю, что для озвученной задачи вполне хватит STM32F042F4 (меньше просто уже нет).
Кто-то считает, что нужно закладывать камень с 2МБ флеши. Истина будет где-то посередине.

Цитата(AlexandrY @ Sep 17 2018, 08:03) *
Там узнаете как пишутся действительно защищенные загрузчики и сколько они занимают места (mcuboot),

Защита от чтения встроена в МК и устанавливается загрузчиком.
Образ обновления защищает от дурака (чтоб не залить какой-нить текстовый файл и не отдать его на исполнение) - просто
чтоб неокирпичить девайс. Защищать от копирования - не тот уровень поделия, чтоб его ломали.

Цитата(AlexandrY @ Sep 17 2018, 08:03) *
как работают действительно надежные файловые системы(nffs, littlefs)

У меня карта работает в read-only. Зачем мне эта надежность? Я могу выкинуть карту и вставить новую за 500 руб (раз в 5 лет).
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th April 2024 - 19:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01619 секунд с 7
ELECTRONIX ©2004-2016