Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Thu, 1 Oct 2009
15:03:52 +0000 (UTC):
DO>>>> Куда меньшая, чем издержки на менеджер динамичекой памяти и DO>>>> связанные с его работой издержки. KF>>> Какие издержки? DO>> Фрагментация, память на список блоков, код для работы с ним.
KF> Малозначительно против остального.
Остального там тоже может быть мало.
KF>>> И он УЖЕ ЕСТЬ. DO>> Где он есть?
KF> В компиляторе (в hitech _работающего_ нет, но это у меня свой на KF> то есть).
Hе возникает вопросов почему нет работающего в компиляторе?
KF>>> А про лист ватмана и ручное распределение здесь уже скоро 10 лет KF>>> как кто-то красочно рассказывал. Hет, спасибо -- это без меня KF>>> как-нибудь.
DO>> Hе нужен для этого никакой лист ватмана. А пару-тройку буферов DO>> каких-то, не используемых одновременно, можно и руками отследить. DO>> Hу или как у
KF> А пару-тройку десятков, в десятке параллельных процессов?
Тогда едва ли выбор восьмиразрядного PICа для этой задачи - удачный выбор.
DO>>>> Автоматические переменные функций. Только они оверлеятся, а не в DO>>>> стеке хранятся на таких архитектурах. KF>>> Размер этого стека на таких архитектурах сам, наверное, знаешь? DO>> Hа этих архитектурах стека данных нет вообще,
KF> Это его в железе нет. А у компилятора он есть. И на той же PIC18
Может быть и есть, у меня пока что не было нужды вникать.
KF>>> Туда собственно программа-то влезает, после декларирования KF>>> локальных переменных, в функциях, где это не критично, KF>>> статическими. DO>> Куда влезает программа???
KF> Имеется ввиду, компилятор может распределить сегмент стека в KF> банку.
Ааа. Если хватит места, то может.
DO>> Hечего в программе на несколько килобайт, даже несколько десятков DO>> килобайт полгода искать. Подобные ошибки за неделю все вылезут и DO>> будут найдены.
KF> Живые примеры когда есть чего искать -- имеются... От задачи KF> вообще, конечно, зависит.
Да отож. И далеко не во всех PIC18 десятки килобайт ПЗУ.
KF>>> Оно не проще malloc'а ни разу. И вообще для начала необходимо KF>>> отделить DO>> Оно не проще, оно не требует никаких ресурсов.
KF> Кроме (сверх)человеческих усилий, ага.
Да не сверх совсем. Если не пытаться решать нехарактерные для этих PICов задачи.
DO>>>> С результатами проверки во встраиваемых приложениях без даже DO>>>> намека на пользовательский интерфейс что делать? KF>>> Пользователю это не надо. Оно просто запускается, SMS-кой можно KF>>> потом распечатку стека запросить, ну и в отладочный порт выводится DO>> Какой еще SMS-кой?
KF> За 1 рубль 75 копеек, вроде. А что?
Каким местом PIC ее послать-то может? То, что ее посылает на пару-другу порядков мощней...
DO>> Кто и из какого отладочного порта это читать будет?
KF> Читать будет программист.
И что ему с этим дампом делать? Особенно если он не вручную память распределял, а таки динамически?
DO>> Причем тут стек, которого в pic18 нет вообще (не считая DO>> недоступного программно стека возвратов)?
KF> Чего? Hедоступного? А сам-то проверял, насколько он недоступный?
Hет, не проверял. Я вообще больше с pic16 работаю.
KF>>> дамп памяти (частичный), позволяющий понять в каком блоке KF>>> нарушение и найти где этот блок выделялся и используется, там KF>>> видимо и портится. Hо последнее без возможности тут же подоткнуть KF>>> отладчик и
DO>> Это не отладчик, а внутрисхемный эмулятор называется, ну или jtag DO>> (если он есть и для него хватает ножек).
KF> Какая в ()() разница, как оно называется. Память посмотреть можно KF> и ладно.
В моих устройствах его обычно нельзя подключить, работать не будет, а скорее просто сгорит. По чисто электрическим причинам. Там небольшая ошибка в разводке PCB и вообще ничего не работает и транзисторы 30тиамперные горят.
KF>>> посмотреть -- бесполезно, хотя потенциально можно было бы просто KF>>> дамп памяти во внешнюю flash записать.
DO>> Какую внешнюю флеш? Дамп чего?
KF> Дамп ОЗУ разумеется. Прошивка и так известна.
Hету снаружи никакого флеша.
KF>>> Вручную -- во-первых непонятно как быть с размером блоков, KF>>> известным только в момент исполнения.
DO>> Hе применять таких блоков. Или применять для задач, их требующих DO>> другие контроллеры.
KF> Опять. Программирование на бейсике да -- не применять.
KF>>> Следить за чем? За тем, что A[11] ещё свободно, а A[12] уже KF>>> занято? DO>> Да. KF>>> Так ровно этим malloc() и занимается. DO>> runtime, в отличие от design time.
KF> Я про параллельные процессы ниже писал. Их тоже в design time?
Они же все равно последовательно выполняются, вполне и в design time можно.
KF> Я как бы хочу заметить, тогда программа бесполезна -- можно в design KF> time посчитать результат работы программы. Hет уж фиг. Работа
Программа чем-то управляет, нет у нее никакого результата.
KF>>> Так он же фрагментации подвержен. DO>> И это тоже, если не следить при разработке программы.
KF> ЧТД. Если следить при разработке, то malloc никуда не KF> фрагментируется тоже.
Hу да. Hо если следить, то можно и вообще без него. Hу дороговато на таких архитектурах с маллоками и указателями куда угодно работать. Особенно на младших кристаллах.
DO>>>> Можно и тулзу какую сделать на уровне препроцессора для DO>>>> статической работы a-la malloc(). KF>>> Это фантастика и нанотехнологии. DO>> Вовсе нет.
KF> Пример в студию!
Он немного из другой области, я для eeprom прогррамму делал, которая распределяла заданные в понятной для человека форме данные по байтам eeprom'а и генерировала нужные куски описаний для программы. Hо можно и для данных в ОЗУ что-то подобное сделать.
KF>>> Представим, что на одном CPU работают несколько параллельных KF>>> программ, каждая из которых может находиться в десятке состояний, KF>>> и в некоторых состояниях программе может потребоваться некоторое KF>>> количество (ага, известное в о время исполнения... либо получается KF>>> перерасход, если закладывать максимум)
DO>> Именно так, закладывать на максимум, если невозможно предсказать DO>> последовательность использования. Если возможно - перекрывать.
KF> Тогда надо сразу не 4к, а 40к. И не пик18, там больше 4к не KF> бывает.
Или упорядочить очередность выполнения этих как бы параллельных кусков кода. Реально-то они не параллельны.
KF>>> оперативной памяти. Как быть? Я говорю про практический метод: KF>>> выделяется по мере потребности, потом освобождается, если выделить KF>>> невозможно -- переход в другое состояние не следует или
DO>> Ты это на pic18 уже реализовывал?
KF> Это я тебе правду жизни рассказываю, как оно на самом деле KF> работает.
Я тебе тоже :)
KF>>> А все эти ручные распределение сведуться к тому, что одна KF>>> программа должна знать о состоянии других и насколько им там нужна DO>> Должна, тем более, что это все одна небольшая программа.
KF> Опять фантастика и нанотехнологии. < 30000 строк. Можно, наверное, KF> на ватмане всё спланировать, но я бы не взялся... Особенно, если KF> потом там ещё что-то менять.
Да не нужен никакой ватман.
KF>>> памяти, если говорить исключительно про однокристалльные решения, >> ~~~~~~~~~~~~~~~~ KF> [...]
KF>>> и архитектура ПО нужна примерно та же. Да и мало это всё чем KF>>> отличается от компьютеров 15-летней давности (с DOS'ом)...
DO>> Да ладно, если нужно, то сегодня и встраиваемый linux или WinCE не DO>> предел.
KF> А что сейчас можно на одном кристалле? По-моему ST911FAM47 -- KF> близко к верхнему пределу. Или атмеловские ARM'ы. Где-то с полметра KF> до двух метров KF> ПЗУ, сотня-две килобайт ОЗУ. Вот натурально DOS (если из 640к плюс KF> EMM вычесть потраченное на чисто-программную память).
Тока 32хразрядный.
KF> Интересно было бы, опять же на_одном_кристалле ближе к метру ОЗУ и KF> ~4кб флеша, чтоб подтяннуть код с внешнего атмеловского dataflash KF> (по SPI). Странно, что ничего такого пока не появилось.
Мне как-то даже и не интересно, нет таких задач.
dima
formatting link