|
|
|
SDRAM + stm32f429, не хватило памяти |
|
|
|
Jun 28 2018, 05:26
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(jcxz @ Jun 27 2018, 22:29) Глупо считать CRC для мегабайта байтов заполнения. Умные люди CRC располагают в пределах образа прошивки или сразу за его концом. Хотя чудаки всякие бывают.... Для приложения я выделил 64кБ памяти. В самом конце 4 байта - это CRC32 всех 64кБ без 4 байт. Сейчас прошивка весит 12кБ. Через месяц будет 56кБ. Где и как по вашему умный человек должен хранить CRC32, чтобы загрузчик без проблем обновил приложение и проверил корректность прошивки? Кста, файл с обновлением шифрованный вместе со всеми FF и имеет фиксированный размер и структуру. На самом деле это не имеет никакого значения, т.к. нет никаких гарантий что сейчас образ имеет в конце FF, и в будущем там ничего не появиться. Кста, ТС давно уже мог бы и прояснить что там в этом мегабайте? FF-ы, CRC32 или данные? А то некоторые, вместо того, чтобы задать правильный вопрос, уже в какой раз включают режим телепата и оскорбляют пользователей почем зря. jcxz что-то вы в последнее время ведете себя как не профессионал. Опыт и знания чувствуются есть, но манера общения недружелюбная. Люди на форум приходят за помощью, а не для того, чтобы их унижали, оскорбляли или воспитывали. Имхо.
|
|
|
|
|
Jun 28 2018, 06:11
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(adnega @ Jun 28 2018, 08:26) Для приложения я выделил 64кБ памяти. В самом конце 4 байта - это CRC32 всех 64кБ без 4 байт. Сейчас прошивка весит 12кБ. Через месяц будет 56кБ. Где и как по вашему умный человек должен хранить CRC32, чтобы загрузчик без проблем обновил приложение и проверил корректность прошивки? У меня CRC хранится внутри образа прошивки (вместе с контролируемым ей размером образа) без всяких FF в конце. И загрузчик нормально её проверяет и расшифровывает и обновляет. Не вижу проблем. И размер прошивки - переменный. У нас планируется в будущем добавить содержимое HTTP-сервера в образ прошивки, а это - до 2МБ. И что-ж мне и сейчас 2МБ файлы прошивок таскать? А если завтра Вам потребуется добавить какой-нить массив в прошивку на пару сотен КБ, а Вы уже себе все ходы обрезали - что будете делать? А в некоторых проектах мне приходилось обновлять прошивки удалённо через GSM/спутник/ZigBee/PLC для пары сотен устройств в сети. Если-б я туда заложил образы прошивок на весь доступный объём флеша, то и счета за GSM/спутниковый_инет были бы хорошие такие у заказчиков и само обновление весь обмен по ZigBee/PLC вешало бы на день если не больше. Цитата(adnega @ Jun 28 2018, 08:26) Люди на форум приходят за помощью, а не для того, чтобы их унижали, оскорбляли или воспитывали. Имхо. Где я Вас оскорбил??? Конечно - желающий оскорбиться, всегда найдёт повод, раз он того желает. Так что-ль? И тут вроде форум электронщиков, а не кисейных барышень.
|
|
|
|
|
Jun 28 2018, 07:01
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(jcxz @ Jun 28 2018, 09:11) Не вижу проблем. А у меня образ под всю зарезервированную память. И тоже нет никаких проблем с расшифровкой и обновлением. Цитата(jcxz @ Jun 28 2018, 09:11) У нас планируется в будущем добавить содержимое HTTP-сервера в образ прошивки, а это - до 2МБ. И что-ж мне и сейчас 2МБ файлы прошивок таскать? А в чем проблема? В медленном и дорогом канале связи? В моих задачах нет таких проблем, и обновление прошивки для меня скорее исключение, чем норма. Можно и 2МБ залить по Ethernet за несколько секунд. Если бы обновлялся с перфокарт, то подумал бы о каждом байте, но к великой радости - такое время давно прошло. Цитата(jcxz @ Jun 28 2018, 09:11) Где я Вас оскорбил??? Цитата Умные люди CRC располагают в пределах образа прошивки или сразу за его концом. Хотя чудаки всякие бывают.... Меня - нигде. Но ходите по грани. Объясню импликацию "умные люди" "располагают за концом". Но "располагают в конце 2МБ" не означает что "человек не умный". Вам это понятно. Типа как "незнание закона" "не освобождает от ответственности". А "знание" что? "Освобождает" что ли? Согласен. Можно под прошивку использовать только часть доступной памяти с резервом на будущее. И такой подход может быть признаком умного человека. Но если ты используешь всю доступную память, то не во всех случаях это доказывает отсутствие ума. В рамках логики это утверждение не может быть ни истинным, ни ложным. Но вы решили, что это признак чудака. Теперь по сути. Какой смысл ТСу вместо этих FF записывать туда свой код? Никакого. Сегодня там FF, а завтра какой-нить HTTP-сервер. Т.е. вы с позиций умного человека советуете эту область использовать по своему усмотрению? И всякий раз когда FF сместятся при каком-нить обновлении заново собирать свое приложение с плясками по свободным местам?
|
|
|
|
|
Jun 28 2018, 09:04
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(adnega @ Jun 28 2018, 10:01) Согласен. Можно под прошивку использовать только часть доступной памяти с резервом на будущее. И такой подход может быть признаком умного человека. Но если ты используешь всю доступную память, то не во всех случаях это доказывает отсутствие ума. Не согласен совершенно. Если некто сделал что-то ногодрыгом, типа "и так сойдёт", "ведь работает". Хотя рядом был периферийный блок, на котором нормально можно было сделать. Или написал программу, сожрав все ресурсы, хотя данная задача реализуется с гораздо меньшими ресурсами. Я не буду считать такого человека профессионалом, пускай даже этот девайс и как-то работает. Сделанное на "отвали" - это признак непрофессионала, а значит глупого человека. То что "оно" сейчас как то работает, не означает ничего. Потому что завтра потребуется что-то добавить и будет облом. Или использовать в последующих разработках. А пример почему большой образ прошивки плохо - я Вам привёл. И примеры эти - из реальной жизни, из моей практики. Цитата(adnega @ Jun 28 2018, 10:01) Т.е. вы с позиций умного человека советуете эту область использовать по своему усмотрению? И всякий раз когда FF сместятся при каком-нить обновлении заново собирать свое приложение с плясками по свободным местам? Вы похоже чего-то не поняли в моём сообщении.... ТСу нужна память. Я написал что она может посмотреть в конец области add_flash, и если там FF, то скорей всего эту область можно урезать и использовать для себя. И вот если написатели её ПО поступили как я, а не как Вы, и не считают CRC по всем этим FF, то никаких проблем урезать сегмент app_flash не будет. Вот Вам и ещё один аргумент в пользу моего подхода. А если они поступили как Вы и даже не подумали, то теперь эта область как балласт - и сами не юзают и другие не могут. Вот это и есть глупый подход. И куда там FF сместятся? Подходите, пожалуйста, опять с позиций умного человека: естественно надо урезать с конца регион app_flash и ничего никуда не сместится. Если то чужое приложение может само обновляться (чего не следует из сообщений ТС), то отрезаемый регион стоит подровнять по границам блоков стирания флешь.
|
|
|
|
|
Jun 28 2018, 10:19
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(jcxz @ Jun 28 2018, 12:04) И вот если написатели её ПО поступили как я, а не как Вы, и не считают CRC по всем этим FF, то никаких проблем урезать сегмент app_flash не будет. Сегодня не будет, а завтра будет. Допустим половина области сплошные FF. ТС взял их под свои нужны. Завтра новая прошивка, но уже FF больше половины, и все это налезает на прошивку ТСа. Ваше "скорей всего" и есть дилетантский подход к разработке. У меня есть ТЗ, я по этому ТЗ все реализовал и выбрал соответствующие ресурсы. Разумеется профи не будет ставить 2МБ чип, когда проша со всем ТЗ умещается в 64кБ. И про ногодрыг непонятно. Это светодиодом по DMA управлять? Или UART ногодрыгом при свободных аппаратных UART? Конечно, для светодиодов индикации я использую ногодрыг и софтовые таймеры, если нужно мигание (1Гц и т.п.). Периферию гружу по максимуму, но только там где это надо. Тут вопрос другой. Что делать с недостатком памяти? Либо ставить чип объемнее, либо согласовывать и утверждать новую карту памяти. Можно навесить внешней памяти, но это затратнее толстого чипа. Все! Никаких других профессиональных, гарантированных, законных вариантов я придумать не могу. А это ваше "скорее всего" очень модное "хайли лайкли" напоминает, но вы при этом не в лучшем свете себя выставляете. Лирика: более 10 лет назад я работал в одной компании. Там был свой софт и своя база данных. Дык, никакого способа добраться до этой базы, кроме реверса не было. А автоматизировать работу хотелось. Пару вечеров, и я сделал утилитку, которая на основе этой базы генерила отчеты очень упрощающие жизнь мне, представителю заказчика и проектировщикам. Причем, последние, ну уж очень плотно на эту утилитку подсели, ибо исполнительную документацию можно было сделать гораздо точнее и быстрее. Свою работу я закончил, про утилитку забыл, а проектировщики продолжали ее использовать. Потом поменялась версия софта и чуть-чуть это затронуло базу. Я чуть-чуть поправил утилитку (по просьбе трудящихся), но разбираться пришлось практически заново (реверс новой базы). После третьего по счету реверса пришлось объяснять, проектировщикам про боль тленного мира, про варианты прямые и совсем неправильные. Мораль: свою задачку я решил тем средством каким решил. Без реверса, а полностью легально было бы долго и не факт, что руководство на это бы пошло. Сейчас всегда, когда просят какой-нить протокол интегрировать или что-то подобное, рассказываю эту историю и предупреждаю, что сегодня может работать, а завтра нет. Кто хочет - тот рискует, но я пути, не позволяющие гарантировать результат, стараюсь не выбирать.
|
|
|
|
|
Jun 28 2018, 11:24
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(adnega @ Jun 28 2018, 13:19) Ваше "скорей всего" и есть дилетантский подход к разработке. У меня есть ТЗ, я по этому ТЗ все реализовал и выбрал соответствующие ресурсы. Разумеется профи не будет ставить 2МБ чип, когда проша со всем ТЗ умещается в 64кБ. Вы вообще исходное сообщение ТС читали? Про какой "выбор чипа" вообще говорите, какой "выбор ресурсов"??? У ТС - есть конкретная прошивка под конкретный чип, и она хочет кроме неё записать ещё что-нить. "скорей всего" - потому что ни я ни Вы (думаю) не знаем от чего зависит работа той готовой прошивки у ТС. И от чего она перестанет работать. И потому что если бы эта задача стояла передо мной, то давно бы уже решилась за несколько минут. Но я не могу видеть что там у автора топика. Да и каково ваше то предложение, "не дилетантское"? Вы то что посоветуете в этой ситуации? Флешь трогать нельзя, а что тогда можно трогать? Цитата(adnega @ Jun 28 2018, 13:19) Тут вопрос другой. Что делать с недостатком памяти? Либо ставить чип объемнее, либо согласовывать и утверждать новую карту памяти. Можно навесить внешней памяти, но это затратнее толстого чипа. Все! Ещё раз перечитайте исходное сообщение. Прошивка есть под конкретный МК и с большей памятью его видимо нет (иначе вопрос вообще не должен стоять). А может вообще - есть готовое устройство, в которое нужно что-то добавить? Внешняя память? А грузить куда? Есть внешняя ОЗУ? А пины для подключения внешней памяти есть? А как подключение внешней памяти повлияет на существующую готовую прошивку? Не станет ли она глючить после этого? А если текущая версия не глючит, то не станут ли глючить последующие обновления? ...которые не знают как ТС подключил свои external RAM and FLASH. Так что получается и ваше решение как Вы выразились - "хайли лайкли", а по-русски - как фишка ляжет. Только с гораздо большими сложностями и расходами
|
|
|
|
|
Jun 28 2018, 12:17
|
Гуру
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702
|
Цитата(jcxz @ Jun 28 2018, 14:24) У ТС - есть конкретная прошивка под конкретный чип, и она хочет кроме неё записать ещё что-нить. Получается, что ТСу нужно 40кБ прошивки превратить в 32кБ. Удачи. Можно константные массивы (звуки, картинки, таблицы) вынести по внешнюю последовательную EEPROM, если это сэкономит 10кБ памяти. Цитата(jcxz @ Jun 28 2018, 14:24) Ещё раз перечитайте исходное сообщение Вот вы и почитайте. Узнаете, что у ТС сначала 429, потом 407, какие-то discovery... но толком в первом посте ничего не объясняется. Он попросил объяснить как SDRAM ему может помочь - ему объяснили. Но если SDRAM подойдет, то и МК придется какой-нить STM32F427V использовать с FMC (но есть у меня подозрения, что SDRAM в V-корпусе не получится). Дык, если уж докатились до смены МК, то проще взять STM32F427VI с 2МБ памяти и забыть про SDRAM и т.п. jcxz, я, пожалуй, общение с вами прекращу, т.к. создается впечатление, что какой-нить Николай Семенович взломал вашу учетку и публикует неадекватные сообщения на форуме с очевидным нарушением логики и базовых принципов. Как отвоюете учетку назад - буду рад продолжить общение.
|
|
|
|
|
Jul 2 2018, 12:35
|
Частый гость
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250
|
Привет, спасибо за ваши советы. Я сейчас действительно роюсь в файлах разработчика и пытаюсь "оторвать" от приложения и добавить к своему проекту хотя бы еще 16К Что делаю: Перераспределяю память в обоих файлах линковщика (у моего проекта с дровами на все, и в файле на приложение разработчика - по совету самого разработчика) Также по его совету меняю команды вызова загрузчика stm32flash, который вызывается из приложения разработчика YAPLC-IDE и пилит код по адресу, 0х08008000. Сколько я не меняю настройки в файлах разработчика...нифига, загрузчик упорно пишет в этот адрес. Как распределить память для моего проекта и приложения разработчика - вродь разобралсЁ. Теперь у меня стоит "глупый" вопрос... как заставить загрузчик пилить с другого адреса приложение разработчика, если я до этого несчастного загрузчика достучаться не могу. Вообще, что у меня происходит : У меня есть некий проект (инит всего МК, к чему может обращаться YAPLC-IDE, некий проект yaplc-runtime для stm32f4disco) В нем успешно настроены - модбас, входы/выходы, ацп, цап, canFestival - подгрузка которого много весит) Этот рантайм хранится с 0х08000000 по 0х08008000, не включительно, занимает 32К, пару страниц ( это стандартно) Но мне понадобилась третья страница для моей проги) Приложение разработчика грузится в память из среды YAPLC-IDE через загрузчик stm32flash. И теперь мой косяк в том, что я почему-то не могу изменить адрес, с которого этот загрузчик должен писать код. нужно сменить с 0x08008000 на 0х0800С000... Что такое... Простите, если я некорректно задаю вопросы. Если нужны какие-то уточнения - я уточню. Код Вопрос, наверное, так лучше задать... После поднятия Boot, вызывается загрузчик и появляется его консоль, где я вижу, с какого адреса этот загрузчик пилит...
Как мне изменить этот адрес, как понять, откуда именно он его берет?
Сообщение отредактировал Ekka - Jul 2 2018, 12:36
|
|
|
|
|
Jul 2 2018, 15:43
|
Профессионал
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848
|
Цитата(Ekka @ Jul 2 2018, 15:35) Приложение разработчика грузится в память из среды YAPLC-IDE через загрузчик stm32flash. И теперь мой косяк в том, что я почему-то не могу изменить адрес, с которого этот загрузчик должен писать код. нужно сменить с 0x08008000 на 0х0800С000... Утилита управляется из командной строки, если ЭТО, ключами, в том числе адресация что-куда. Может есть заблокированные самой утилитой "служебные" диапазоны адресов, куда запрещена запись. Если есть возможность, посмотрите с какими опциями стартуется stm32flash. Если грузится формат hex, то адресация забита в нем, и изменить это может перекомпиляция на другие адреса. ps Вот, вроде этого, в FAQ здесь
|
|
|
|
|
Jul 3 2018, 12:39
|
Частый гость
Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250
|
Привет всем. Как писать с другого адреса от загрузчика - сделано. Возникла проблема - может кто-то с таким сталкивался, или проблема типичная для новичком или пробелы в моем знании организации памяти в stm32f4...НО Может, кто-то в курсе, почему при указании адреса начала записи 0х08008000 все пишет, куда и указано Но стоит указать адрес 0х0800С000, и я получаю код, записанный по адресу на сектор позже, 0х08010000? опять же, если укажу адрес 0х08020000 (начало 5 сектора), получу код, начиная с адреса 0х08028000 Может быть проблема в разных размерах секторов памяти? Подскажите, что я делаю не так...??? память в моем коде Код MEMORY { rom (rx) : ORIGIN = 0x08000000, LENGTH = 128K app_flash (rx) : ORIGIN = 0x08020000, LENGTH = 896K ram (rwx) : ORIGIN = 0x20000000, LENGTH = 8K appram (rwx) : ORIGIN = 0x20002000, LENGTH = 120K } Приложение разработчика Код MEMORY { flash (rx) : ORIGIN = 0x08020000, LENGTH = 896K ram (rwx) : ORIGIN = 0x20002000, LENGTH = 120K ccm (rwx) : ORIGIN = 0x10000000, LENGTH = 64K } Правда, из каких соображений в ccm 64K, я без понятия... было вообще так Код MEMORY { flash (rx) : ORIGIN = 0x08008000, LENGTH = 992K ram (rwx) : ORIGIN = 0x20002000, LENGTH = 120K ccm (rwx) : ORIGIN = 0x10000000, LENGTH = 64K }
Сообщение отредактировал Ekka - Jul 3 2018, 13:02
|
|
|
|
|
Jul 4 2018, 08:58
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Вам трудно что-то советовать, так как непонятно ни кто именно "пишет": Цитата(Ekka @ Jul 3 2018, 15:39) почему при указании адреса начала записи 0х08008000 все пишет, куда и указано про кого разговор? Ни что означает: Цитата(Ekka @ Jul 3 2018, 15:39) память в моем коде и Цитата(Ekka @ Jul 3 2018, 15:39) Приложение разработчика У Вас есть некий "разработчик" который совместно с Вами пишет код в этот кристалл? Вы вроде совмещали своё приложение с неким готовым кодом, но из вышеуказанных фраз неясно - где говорится про ваш код, а где - про сторонний? Понимаете: Вашу задачу знаете только Вы, и только Вы видите ваши исходники. А остальным Вы даже не пытаетесь обрисовать картинку, а ваш вопрос больше похож на причитания, а не на просьбу консультации. Или как тут принято говорить: "Телепаты в отпуске!" Цитата(Ekka @ Jul 3 2018, 15:39) Правда, из каких соображений в ccm 64K, я без понятия... Может потому, что в данном МК она имеет размер 64К, кэп? PS: При задавании вопроса, перечитайте ваш вопрос ещё раз, с позиции стороннего человека, не знающего что там у вас да как. И подумайте - поняли ли Вы сами о чём вопрос? А то многие вопросы тут звучат как: "Я что-то делаю (не скажу что) с чем-то (не скажу с чем) с помощью чего-то (не скажу с помощью чего) и у меня что-то получается (не скажу что). Подскажите как мне быть, если я хочу другого (не скажу чего)?" Этот совет не только к Вам относится, но и ко многим другим вопрошающим......
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|