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

Разработать устройство

И как потом, не тяжко поддерживать заросли веток?

Очень знакомая ситуация. На прошлой работе у нас был такой разработчик. :biggrin:

Заложил МК с ресурсами по минимуму: "И так хватит, сейчас ведь влезает. Зато этот МК я хорошо знаю по прошлым проектам."

Но аппетит приходит во время еды: у заказчиков начали появляться хотелки, плюс - в ПО оказалось много багов, которые надо править. Ну и этому коллеге естественно ничего не оставалось делать как пойти по пути размножения веток версий прошивки для разных наборов программных хотелок и аппаратных исполнений устройства. В конце-концов дошло до того, что чтобы внести элементарную правку в код или поддержку новой простейшей фичи (которую мы добавляли в другие устройства за пару дней вместе с тестированием) он тратил на это по месяцу. Пока оптимизирует чтобы во флешь кое-как втиснуть, везде во все ветки прошивки внесёт, несколько раз переделает. Пока потом всё это оттестирует, найдёт все версии железа, которые надо протестить. Сидел ежедневно да самого вечера - перерабатывал каждый день: я приходил на работу - он уже там, уходил - он ещё там. :biggrin:

И начальник его всё время шпынял - "как до сих пор не готово??!" :biggrin:

Потом он уже признал свою ошибку, но сделать уже ничего было нельзя. Подшучивали над ним по этому поводу постоянно. В конце-концов он уволился. Хотя может конечно и не из-за этого...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень знакомая ситуация. На прошлой работе у нас был такой разработчик. :biggrin:

Заложил МК с ресурсами по минимуму: "И так хватит, сейчас ведь влезает. Зато этот МК я хорошо знаю по прошлым проектам."....

В конце-концов он уволился. Хотя может конечно и не из-за этого...

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

 

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

А по поводу "Зато этот МК я хорошо знаю по прошлым проектам" - да, это наше все. "Мы только Мегу знаем и любим, а больше и ничего нам не надо" - вот основной лозунг. А вот "ихние" начинают проект с выбора того, чего "нужно", а не того, чего было в "прошлый раз". И тут добавка. Покупать микроконтроллеры выгоднее не там, где дешевле, а там, где лучше техподдержка. Просто потому, что так быстрее осваивается все новое. И не подсунут контрафакт.

 

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

Вывод: экономия на микросхемах - путь к банкротству.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заложил МК с ресурсами по минимуму

ОЗУ 6К и ПЗУ 16К это минимум?

В эти объемы можно уложить нехилый функционал (пример я привел), а не то что 4 реле по CAN.

Я не знаю как ваши фирмы работают, но у нас есть пример: толстый контроллер на базе STM32F407VG.

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

А есть задачки, для которых вполне хватает STM32F030K6 (причем основные расходы ПЗУ на шрифты).

Правда, затем заменили на STM32F051K8 именно из соображений, чтоб по памяти не упираться.

Зачем использовать дорогой, трудоемкий, габаритный контроллер, когда задачу прекрасно решает

мелкий во всех смыслах контроллер? Нужно понимать, что если мы не можем решить задачу на мелкоте, то

на фулфарше она решается гарантированно, поэтому развиваем оба. Кста, сейчас появился промежуточный

контроллер с плюсами обоих на STM32F030CC. По скорости разработки никогда описываемых вами ужасов не было,

типовая задачка занимает 2-4 часа вместе со сборкой стенда и документированием.

 

На той неделе был на совещании - предлагают мини-ПК в довесок к STM32 ставить, чтоб был WiFi, в устройстве типа,

получил-отправил пакет по CAN (авто-диагностика). Так что с оверхэдом у нас все в порядке ;).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ОЗУ 6К и ПЗУ 16К это минимум?

Вы передёргиваете. Позволю себе напомнить:

Распределение памяти такое:

...

- 10К - приложение;

...

В приложении - чуть больше 900 свободных байт.

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

 

В эти объемы можно уложить нехилый функционал (пример я привел), а не то что 4 реле по CAN.

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

 

Нужно понимать, что если мы не можем решить задачу на мелкоте, то

на фулфарше она решается гарантированно, поэтому развиваем оба.

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

 

типовая задачка занимает 2-4 часа вместе со сборкой стенда и документированием.

ну-ну... типовая мигалка лампочками :biggrin:

А бывают задачки в МБ-ы исходного кода. Своего. И файлов - под сотню. Тогда, только чтобы понять в каком модуле глюк, бывает нужно несколько дней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из этих слов видно, что Вы ещё не имели дела с серийным производством и с множеством заказчиков.

С чего вы взяли? С того, что без шишек умею работать?

Контроллеры выпускаются серийно с конца 2011 года.

Примерно 100 штук ежемесячно. Изделия очень разные, Заказчиков множество.

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

 

Конкретно за STM32F042F4 скажу, что это делал себе для умного дома.

Использую одну прошивку с базовым функционалом. Один работает в подсветке кухни,

второй рулит санузлом. Логика элементарная: плавно включить-выключить свет,

по датчику дверцы или движению. При этом по CAN можно узнать и температуру МК,

и напряжение питания, максимальную глубину стека, uptime, хеши объектов и т.п.

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

За вечер превратил аналогичный контроллер в 9-канальный измеритель температуры.

По CAN рассылает сообщения с температурой датчиков, ID которых заданы в энергонезависимых

переменных. Еще делал какую-то прошивку для управления кондиционером, а другую со сбором

показаний весов с ИК-выходом, но подробностей уже не помню.

Есть STM32F042F6 с 32К ПЗУ, можно их поставить, но зачем, если и в 16К все влезает?

Сенсорные выключатели я делаю на STM32F042K6, дык, фулфарш-прошивка занимает около 11К,

при выделенных 20К. Там функционал тот же, только всего больше, плюс обработка емкостных сенсоров.

Самый крутой контроллер для умного дома на STM32F407 использует 42К из выделенных 128К.

По функционалу там и Ethernet, и uSD, дисплей, GPS для часов, датчики давления/влажности/температуры,

сервер времени и конфигураций в добавку ко всему ранее сказанному.

Я не могу придумать код на 64К - факт, подтвержденный временем.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не могу придумать код на 64К - факт, подтвержденный временем.

Ну добавьте в это фарш HTTP-сервер с парой картинок и... придумалось :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не могу придумать код на 64К - факт, подтвержденный временем.

Во даете.

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

Сделан на фреймворке Mbed, который занимает бОльшую часть кода.

В Mbed не ленятся и даже придумывают классы типа NonCopyable только лишь для того

чтобы юзер случайно не скопировал объекты RTOS в операциях присвоения (вспомнил, потому что тут как то была тема про опасное копирование структур).

Это теперь называется эргономика программирования.

Опора на Mbed позволяет пропустить огромный кусок документирования.

Ускоряет программирование кратно.

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

 

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

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Реально не понятно зачем для управления 4реле по CAN такие требования к процессору? Студент?

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

 

..

 

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

...

:01:

 

И процессор здесь не нужен. Такое делается на экспандерах типа MCP25055

 

Если перейти по указанной ссылке можно увидеть что:

Status: Not Recommended for new designs

 

 

 

 

Какой бюджет?

Что хотите получить на выходе? Т.е. что будет считаться завершением работы?

[email protected]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с парой картинок

Картинки, шрифты, звуковые файлы, обновления прошивок, пользовательские скрипты - это все лежит на uSD-карте.

Я говорил про сам код - 64К хватит каждому ;)

 

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

Для простого что-то многовато. У меня загрузчик и образы расшифровывает, и CRC32 считает, и в приложение функции экспортирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я говорил про сам код - 64К хватит каждому ;)

Ваши данные выглядят как-то фантастично. И Ethernet (чистый? Или всё-таки TCP? в чистом без TCP - мало смысла) и uSD (FatFS? она очень даже немаленькая) и ещё и LCD (с граф.-API поди?) и пр. И всего 42К??? :wacko: Что-то как-то маловато... ну если только там всё очень примитивно сделано, уж извините. :laughing:

Вот смотрю один свой проект: TCP нет, SD - тоже нет, и LCD нет.; есть uCOS, BT+GPS, управление PMSM-мотором, гироскоп, RF-приёмник, ну и всякая мелочь типа UART и конфигураторов/user-API. И получаю == 70264 байт флеша при полной оптимизации IAR (поставил даже оптимизацию по размеру специально).

И что-то как-то не верится в 42К....

Может покажете Ваш .map? :rolleyes:

Вот мой от этого проекта:

  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

CRC32 считает

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

 

PS: да конечно - в моём .map есть примерно около 15КБ отладочного кода. Но как без него отлаживать? Так что его тоже нужно включать в необходимый объём флеша.

Так что как видите - Вы не правы, даже для простого управления движком, с небольшим количеством дополнительного функционала, 64КБ - уже мало.

Это уже даже не говоря о том, что отлаживать приходится с выключенной оптимизацией, а тогда объём кода ещё значительно вырастет.

Тот же проект с Low-оптимизацией для (отладки) уже == 83324 байт. Так что в "достаточные для любого случая 64КБ" - не верится ну совсем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для простого что-то многовато. У меня загрузчик и образы расшифровывает, и CRC32 считает, и в приложение функции экспортирует.

Да действительно расшифровка каким нибудь блочным алгоритмом и CRC32 занимают не больше килобайта. Это мелочи.

CRC с аппаратным ускорением занимает пару десятков команд, не стоит даже упоминания.

У меня кстати MD5 считает, это надежнее.

Но я могу и SHA вставить. А могу и весь TLS стек с RSA и ассиметричным шифрованием. Это возможности фреймворка.

Но размер еще увеличится. Размер должен быть большим. Размер есть показатель крутизны кода. B)

 

 

И получаю == 70264 байт флеша при полной оптимизации IAR (поставил даже оптимизацию по размеру специально).

Что-то очень мало.

В аналогичном приложении с мотором, 9D IMU сенсором, без LCD и без GPS, но с MQX, BT, USB и FAT у меня занимает 209 КБ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В аналогичном приложении с мотором, 9D IMU сенсором, без LCD и без GPS, но с MQX, BT, USB и FAT у меня занимает 209 КБ.

ну - у меня FAT и USB-стека всё-таки нет; да и uCOS думаю будет полегче MQX.

Зато в другом проекте с LCD(без картинок, только кучка шрифтов) + WiFi (со всем что поверх оного) + универсальный ИК-приёмник с обучением + MP3-декодер + AAC+-декодер + GUI довольно развесистый + ещё кучка всякой мелочи - при полной оптимизации уже == 226200 байт. И это при том, что довольно значительная часть MP3- и AAC-декодеров - написана на асме.

Так что в 42КБ ув. adnega как-то верится с трудом. Ну если только он не целиком на асме писал. :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так что в 42КБ ув. adnega как-то верится с трудом.

Все самописное. Ethernet только IP и UDP, FAT только чтение, никакой ОС нет.

Вроде, ESP8266 должен еще работать.

 

.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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все самописное. Ethernet только IP и UDP, FAT только чтение, никакой ОС нет.

Мне кажется у вас серьезный кризис в личной продуктивности. Замыкание на самописном коде - прямой путь к выгоранию.

Бросайте это дело и беритесь за что-нибудь трендовое, скажем Amazon FreeRTOS или Zephyr Project или Mbed.

Там узнаете как пишутся действительно защищенные загрузчики и сколько они занимают места (mcuboot),

как работают действительно надежные файловые системы(nffs, littlefs) и как делать менеджеры систем с встраиваемыми протоколами и транскодерами (mcumgr).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется у вас серьезный кризис в личной продуктивности. Замыкание на самописном коде - прямой путь к выгоранию.

Скажем так: я с вами не согласен. Кто каким инструментом умеет пользоваться, тот им и должен работать.

Изучили вы много сторонних библиотек - молодец - пользуйтесь ими. У меня много своих библиотек и я хорошо ими пользуюсь.

На старой работе попробовал разок использовать чужой велосипед, т.к. руководство запретило изобретать свой,

что ж потратил времени больше на изучение FreeRTOS, uIP, StdLib. И что самое обидное - из коробки не работает - нужно допиливать.

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

 

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

 

Мы очень сильно отошли от темы. Не думаю, что ТС использует или планирует использовать в будущем сторонние библиотеки.

Мнения высказаны. Я считаю, что для озвученной задачи вполне хватит STM32F042F4 (меньше просто уже нет).

Кто-то считает, что нужно закладывать камень с 2МБ флеши. Истина будет где-то посередине.

 

Там узнаете как пишутся действительно защищенные загрузчики и сколько они занимают места (mcuboot),

Защита от чтения встроена в МК и устанавливается загрузчиком.

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

чтоб неокирпичить девайс. Защищать от копирования - не тот уровень поделия, чтоб его ломали.

 

как работают действительно надежные файловые системы(nffs, littlefs)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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