Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SDRAM + stm32f429
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Ekka
Привет всем.
Не совсем понимаю задачу, которую нужно решить, может, кто-то просветит меня(

Дело в том, что у меня не хватило памяти для программы.

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

Код
MEMORY
{
    rom       (rx)  : ORIGIN = 0x08000000, LENGTH = 32K
        app_flash (rx)  : ORIGIN = 0x08008000, LENGTH = 992K
    ram       (rwx) : ORIGIN = 0x20000000, LENGTH = 8K
    appram    (rwx) : ORIGIN = 0x20002000, LENGTH = 120K
}


Некто посоветовал мне подключить SDRAM.
Чтобы посмотреть, как эта штука вообще работает, пробую на stm32f429 работать с SDRAM.
Пока только на HAL.

Так вот... простите за тупые вопросы, не совсем понимаю, каким именно образом мне сократить объем программы, используя внешнюю память.
Что туда грузить? Массивы из библиотек, которые подключаю?

Кто-нибудь, объясните, пожалуйста, доходчиво для тех, кто в танке.
adnega
Цитата(Ekka @ Jun 27 2018, 12:24) *
Кто-нибудь, объясните, пожалуйста, доходчиво для тех, кто в танке.

А не проще какую-нить NOR-память задействовать?
Иначе придется из какого-то внешнего энергонезависимого хранилища копировать все в SDRAM,
а оттуда уже запускать. При этом в это внешнее хранилище часть прошивку нужно будет как-то записать.
Аналогично и с NOR, придется как-то туда прошивку записывать, но можно исполнять код прямо из
NOR, без копирования в SDRAM.
jcxz
Цитата(Ekka @ Jun 27 2018, 12:24) *
Так вот... простите за тупые вопросы, не совсем понимаю, каким именно образом мне сократить объем программы, используя внешнюю память.

SDRAM - это ОЗУ. Соответственно - размещать в ней можно только объекты требующие ОЗУ. Ну если не считать того, что для отладки её можно использовать для загрузки ROM-секций программы (код и данные).
К "сокращению объёма программы" это вообще никакого отношения не имеет. Сокращает объём программы оптимизация и голова программиста.
Ekka
Цитата(jcxz @ Jun 27 2018, 10:35) *
SDRAM - это ОЗУ. Соответственно - размещать в ней можно только объекты требующие ОЗУ. Ну если не считать того, что для отладки её можно использовать для загрузки ROM-секций программы (код и данные).
К "сокращению объёма программы" это вообще никакого отношения не имеет. Сокращает объём программы оптимизация и голова программиста.


Код сокращен до минимума.
Как можно решить эту проблему с нехваткой?

получаю вот что

Код
region `rom' overflowed by 10748 bytes


на форумах пишут, что можно как бы добавить к _rom, но внешнее подключенное приложение пишет свои данные начиная с определенного адреса.
jcxz
Цитата(Ekka @ Jun 27 2018, 13:51) *
получаю вот что
...
rom (rx) : ORIGIN = 0x08000000, LENGTH = 32K

А нафига обрезали сегмент flash-кода до 32K??? wacko.gif
Там же 2 МБ флеша!
Наведите порядок с регионами памяти:
Код
define memory mem with size = 4G;
define region FLASH_regionA   = mem:[from 0x08000000 to 0x081FFFFF];
define region RAM_regionA     = mem:[from 0x10000000 size 0x10000]; //CCM SRAM
define region RAM_regionB     = mem:[from 0x20000000 size 0x20000]; //main SRAM (bit-band)
define region RAM_regionC     = mem:[from 0x20020000 size 0x10000]; //main SRAM (bit-band)
define region RAM_regionD     = mem:[from 0x40024000 size 0x01000]; //backup SRAM
define region ROM_region      = mem:[from 0xE00FF000 to 0xE00FFFFF];
define region SDRAM_region    = mem:[from 0xD0000000 size 0x00800000]; //SDRAM

для STM32F429 с SDRAM.
Секции ro-data и text линковать в FLASH_regionA:
Код
place in FLASH_regionA {ro};


Для отладки можно использовать SDRAM для размещения кода и ro-данных, типа так:
CODE
define memory mem with size = 4G;
define region FLASH_regionA = mem:[from 0x08000000 to 0x081FFFFF];
define region RAM_regionA = mem:[from 0x10000000 size 0x10000]; //CCM SRAM
define region RAM_regionB = mem:[from 0x20000000 size 0x20000]; //main SRAM (bit-band)
define region RAM_regionC = mem:[from 0x20020000 size 0x10000]; //main SRAM (bit-band)
define region RAM_regionD = mem:[from 0x40024000 size 0x01000]; //backup SRAM
define region ROM_region = mem:[from 0xE00FF000 to 0xE00FFFFF];
define region SDRAM_regionA = mem:[from 0xD0000000 size 0x00040000]; //SDRAM (code/const)
define region SDRAM_regionB = mem:[from 0xD0040000 size 0x000BF000]; //SDRAM (data)
define region SDRAM_regionC = mem:[from 0xD00FF000 size 0x00701000]; //SDRAM (data)

define block HEAP with alignment = 8, size = 0x000 {};

//.dma: channel control table for DMA-controller
//.BITBAND_RAM: для bitband-переменных

initialize by copy {rw};
do not initialize {section .noinit};
do not initialize {section .raw};
do not initialize {section .ccm};
do not initialize {section .dma};
do not initialize {section .eraw};
do not initialize {section .edma};
do not initialize {section .bssStk};
do not initialize {section .bssStkMain};
do not initialize {section .imonSave};
do not initialize {section .backup};
do not initialize {section .aoutRecord};
do not initialize {section .graphMem};
do not initialize {section .rawMp3};
do not initialize {section .rawAac};
do not initialize {section .rawAacSbr};

define overlay .rawMpeg {section .rawMp3};
define overlay .rawMpeg {section .rawAac};

define block IMAGE_HEAD with fixed order {section .intvec, section .checksum,
section .codehead, section .intvecTail, section .codebegin};
place in RAM_regionA {section .bssStkMain, section .bssStk, overlay .rawMpeg, section .ccm};
place in RAM_regionB {ro, first block IMAGE_HEAD, last section .codetail,
section .rodataInternal, section .textInternal, section .constFast};
place in RAM_regionC {section .BITBAND_RAM, section .dma};
place in RAM_regionA | RAM_regionC {rw, section .bssInternal, block HEAP};
place in RAM_regionD {section .backup};
place in SDRAM_regionB {section .eraw, section .edma, section .framCache, section .graphMem};
place in SDRAM_regionC {section .aoutRecord};

place in SDRAM_regionA {
section .codeSignature,
section .fnt,
section .rodata,
section .text object rds.o,
section .text object menu.o,
section .text object ir_term.o,
section .text object fonttest.o,
section .text object storage.o,
section .text object tuner.o,
section .text object esp_link.o,
section .text object datetime.o,
section .text object sntp.o,
section .text object dflash.o,
section .text object bakf.o,
section .text object dte.o,
section .text object dte_lcd.o,
section .text object fram_map.o,
section .text object periodic.o,
section .text object pack.o,
section .text object ansi.o,
section .text object config.o,
section .text object tscr.o,
section .text object spi.o,
section .text object service.o,
section .text object ui.o
};

Как видно - код и ro-данные линкуются частично в RAM_regionB, частично в SDRAM_regionA.
Ekka
Наверное, я не правильно задаю вопрос(

Лучше так:

Как можно исправить эту ошибку?

Код
region `rom' overflowed by 10748 bytes


Цитата(jcxz @ Jun 27 2018, 11:58) *
А нафига обрезали сегмент flash-кода до 32K??? wacko.gif
Там же 2 МБ флеша!
Наведите порядок с регионами памяти:
Код
define memory mem with size = 4G;
define region FLASH_regionA   = mem:[from 0x08000000 to 0x081FFFFF];
define region RAM_regionA     = mem:[from 0x10000000 size 0x10000]; //CCM SRAM
define region RAM_regionB     = mem:[from 0x20000000 size 0x20000]; //main SRAM (bit-band)
define region RAM_regionC     = mem:[from 0x20020000 size 0x10000]; //main SRAM (bit-band)
define region RAM_regionD     = mem:[from 0x40024000 size 0x01000]; //backup SRAM
define region ROM_region      = mem:[from 0xE00FF000 to 0xE00FFFFF];
define region SDRAM_region    = mem:[from 0xD0000000 size 0x00800000]; //SDRAM

для STM32F429 с SDRAM.
Секции ro-data и text линковать в FLASH_regionA:
Код
place in FLASH_regionA {ro};


сейчас объясню.
у меня есть проект рантайма от разработчиков с возможностью его "поправить под себя".
проект сделан под stm32f4 - discovery, с таким вот распределением памяти

Код
/* Define memory regions. */
MEMORY
{
    rom       (rx)  : ORIGIN = 0x08000000, LENGTH = 32K
    app_flash (rx)  : ORIGIN = 0x08008000, LENGTH = 992K
    ram       (rwx) : ORIGIN = 0x20000000, LENGTH = 8K
    appram    (rwx) : ORIGIN = 0x20002000, LENGTH = 120K
}

PROVIDE( _stack     = ORIGIN(appram) + LENGTH(appram) );
PROVIDE( _app_start = ORIGIN(app_flash)               );
PROVIDE( _app_end   = _app_start + LENGTH(app_flash)  );


Это стандартная прошивка.
Начиная с адреса app_flash работает внешнее приложение YAPLC_IDE

(это я просто в попытках хотя бы посмотреть, как настраивать sdram, пробую на hal stm32f429, а так мк - stm32f407vg)
jcxz
Цитата(Ekka @ Jun 27 2018, 14:04) *
Как можно исправить эту ошибку?
Код
region `rom' overflowed by 10748 bytes

В этом сообщении компоновщик Вам сообщает, что Вы пытаетесь какой-то сегмент выходного образа прошивки засунуть в регион 'rom', но там не хватает места.
Исправить - перераспределить память, увеличить 'rom', перенести сегмент который не лезет в другие регионы.
Например: сдвиньте 'app_flash' вниз (уменьшив соответственно его размер) и на освобождённый размер увеличьте 'rom'.
Или определите выше 'app_flash' дополнительный регион (уменьшив 'app_flash') и компонуйте нелезущие сегменты туда.
Ekka
Цитата(jcxz @ Jun 27 2018, 12:16) *
В этом сообщении компоновщик Вам сообщает, что Вы пытаетесь какой-то сегмент выходного образа прошивки засунуть в регион 'rom', но там не хватает места.
Исправить - перераспределить память, увеличить 'rom', перенести сегмент который не лезет в другие регионы.
Например: сдвиньте 'app_flash' вниз (уменьшив соответственно его размер) и на освобождённый размер увеличьте 'rom'.
Или определите выше 'app_flash' дополнительный регион (уменьшив 'app_flash') и компонуйте нелезущие сегменты туда.


в том то и проблема, что я app_flash не могу двигать с этого адреса - 0х08008000, потому что внешнее приложение оттуда пишет свое, а в его внутренних кишках (среда YAPLC-IDE, с файлами на питоне и многой другой ерундой)
и лезть нечего... там все поедет, программа разработчиков. Потому и спрашиваю, как сделать можно...
jcxz
Цитата(Ekka @ Jun 27 2018, 14:27) *
и лезть нечего... там все поедет, программа разработчиков. Потому и спрашиваю, как сделать можно...

Тогда второй вариант, как писал выше. Наверняка там не весь объём 'app_flash' используется и в конце 0xFF.
К тому же в STM32F429 как я уже писал - 2МБ флеша, а по вашим сообщениям видно что у Вас описан только 1МБ. Так что выше 'app_flash' есть ещё 1МБ. Определите там регион и компонуйте в него.
Ekka
Цитата(jcxz @ Jun 27 2018, 12:35) *
Тогда второй вариант, как писал выше. Наверняка там не весь объём 'app_flash' используется и в конце 0xFF.
К тому же в STM32F429 как я уже писал - 2МБ флеша, а по вашим сообщениям видно что у Вас описан только 1МБ. Так что выше 'app_flash' есть ещё 1МБ. Определите там регион и компонуйте в него.


нет-нет-нет... у меня STM32F4-DISCOVERY, stm32f429 просто поиграться... мне на 407VG надо, у stm32f4 disco всего 1мб flash вроде

esaulenka
Зайдём с другой стороны. Где именно на STM32F4DISCOVERY припаяна SDRAM ?
controller_m30
Цитата(Ekka @ Jun 27 2018, 14:04) *
Код
region `rom' overflowed by 10748 bytes

Если во внутренней SRAM есть свободного места на 10748 байт, тогда сделать так: на внешние пины подключить последовательную флешку, в которой будет храниться не вместившийся в основную флешь-память фрагмент программы. После инициализации этот фрагмент переносится из внешней флешь во внутреннюю SRAM, и там исполняется.

Если места во внутренней SRAM нету, тогда всё тоже самое + подключить внешнюю SRAM. Достаточно объёма 16 Кб и для доп.ОЗУ и для доп.флешь.
У STM32F407 есть FSMC, который может работать с внешней SRAM. Фрагмент хранится во внешней флешь, а исполняется во внешней SRAM.
Ekka
Цитата(esaulenka @ Jun 27 2018, 13:14) *
Зайдём с другой стороны. Где именно на STM32F4DISCOVERY припаяна SDRAM ?



СЕЙЧАС нигде.
Поэтому принцип работы разбираю на готовой плате stm32f429 (понимаю, это тупо) и вообще сомневаюсь, что мне хватит свободных ног для работы с ней у discovery

Потому я и спрашиваю, можно ли как-то и что-то с этим rom сделать
esaulenka
Варианты:
1) если планируется какое-то своё железо (407VG + SDRAM - это НЕ дискавери), поставить камень потолще и не морочить себе и окружающим голову
2) договориться с "программой разработчиков", что адреса их интерпретатора будут другие.
3) написать свой кусок более компактно.

Городить внешнюю память в этом случае смысла как-то немного...
adnega
Цитата(Ekka @ Jun 27 2018, 15:31) *
Потому я и спрашиваю, можно ли как-то и что-то с этим rom сделать

В общем случае, лучше выбрать МК с большим объемом Flash, благо такие существуют.
Или уговаривать разработчиков на другую карту распределения памяти.
Все остальное - усложнения жизни, по масштабу несравнимые с первым вариантом.
Но я бы попробовал подрезать app_flash в пользу rom, уговорив разработчиков.
По сути нужно где-то только поправить константы.
jcxz
Цитата(adnega @ Jun 27 2018, 16:20) *
Но я бы попробовал подрезать app_flash в пользу rom, уговорив разработчиков.

Ekka так и не показала образ памяти в 'app_flash'. У меня есть стойкое подозрение, что бОльшая часть того региона заполнена FF и проблема выеденного яйца не стОит.
Не представляю - чего такого можно написать на 1МБ на МК? Разве что картинок понасовать.....
adnega
Цитата(jcxz @ Jun 27 2018, 16:24) *
У меня есть стойкое подозрение, что бОльшая часть того региона заполнена FF и проблема выеденного яйца не стОит.

Возможно. Но у меня, к примеру, корректность прошивки контролируется путем подсчета CRC32 по всей отведенной для нее памяти.
Т.е. вполне могут быть FF, а в конце 4 байта CRC32.
jcxz
Цитата(adnega @ Jun 27 2018, 17:21) *
Возможно. Но у меня, к примеру, корректность прошивки контролируется путем подсчета CRC32 по всей отведенной для нее памяти.
Т.е. вполне могут быть FF, а в конце 4 байта CRC32.

Глупо считать CRC для мегабайта байтов заполнения. Умные люди CRC располагают в пределах образа прошивки или сразу за его концом. Хотя чудаки всякие бывают....
adnega
Цитата(jcxz @ Jun 27 2018, 22:29) *
Глупо считать CRC для мегабайта байтов заполнения. Умные люди CRC располагают в пределах образа прошивки или сразу за его концом. Хотя чудаки всякие бывают....

Для приложения я выделил 64кБ памяти. В самом конце 4 байта - это CRC32 всех 64кБ без 4 байт.
Сейчас прошивка весит 12кБ. Через месяц будет 56кБ. Где и как по вашему умный человек должен хранить CRC32,
чтобы загрузчик без проблем обновил приложение и проверил корректность прошивки?
Кста, файл с обновлением шифрованный вместе со всеми FF и имеет фиксированный размер и структуру.

На самом деле это не имеет никакого значения, т.к. нет никаких гарантий что сейчас образ имеет в конце FF,
и в будущем там ничего не появиться. Кста, ТС давно уже мог бы и прояснить что там в этом мегабайте?
FF-ы, CRC32 или данные? А то некоторые, вместо того, чтобы задать правильный вопрос, уже в какой раз включают
режим телепата и оскорбляют пользователей почем зря.

jcxz что-то вы в последнее время ведете себя как не профессионал. Опыт и знания чувствуются есть, но манера общения недружелюбная.
Люди на форум приходят за помощью, а не для того, чтобы их унижали, оскорбляли или воспитывали. Имхо.
jcxz
Цитата(adnega @ Jun 28 2018, 08:26) *
Для приложения я выделил 64кБ памяти. В самом конце 4 байта - это CRC32 всех 64кБ без 4 байт.
Сейчас прошивка весит 12кБ. Через месяц будет 56кБ. Где и как по вашему умный человек должен хранить CRC32,
чтобы загрузчик без проблем обновил приложение и проверил корректность прошивки?

У меня CRC хранится внутри образа прошивки (вместе с контролируемым ей размером образа) без всяких FF в конце. И загрузчик нормально её проверяет и расшифровывает и обновляет. Не вижу проблем.
И размер прошивки - переменный. У нас планируется в будущем добавить содержимое HTTP-сервера в образ прошивки, а это - до 2МБ. И что-ж мне и сейчас 2МБ файлы прошивок таскать? smile3009.gif
А если завтра Вам потребуется добавить какой-нить массив в прошивку на пару сотен КБ, а Вы уже себе все ходы обрезали - что будете делать?
А в некоторых проектах мне приходилось обновлять прошивки удалённо через GSM/спутник/ZigBee/PLC для пары сотен устройств в сети. Если-б я туда заложил образы прошивок на весь доступный объём флеша, то и счета за GSM/спутниковый_инет были бы хорошие такие у заказчиков и само обновление весь обмен по ZigBee/PLC вешало бы на день если не больше.

Цитата(adnega @ Jun 28 2018, 08:26) *
Люди на форум приходят за помощью, а не для того, чтобы их унижали, оскорбляли или воспитывали. Имхо.

Где я Вас оскорбил??? wacko.gif
Конечно - желающий оскорбиться, всегда найдёт повод, раз он того желает. Так что-ль?
И тут вроде форум электронщиков, а не кисейных барышень.
k155la3
Цитата(jcxz @ Jun 27 2018, 16:24) *
. . .Не представляю - чего такого можно написать на 1МБ на МК? Разве что картинок понасовать.....
При наличии TFT + тачскрина грузят .NET

adnega
Цитата(jcxz @ Jun 28 2018, 09:11) *
Не вижу проблем.

А у меня образ под всю зарезервированную память. И тоже нет никаких проблем с расшифровкой и обновлением.

Цитата(jcxz @ Jun 28 2018, 09:11) *
У нас планируется в будущем добавить содержимое HTTP-сервера в образ прошивки, а это - до 2МБ. И что-ж мне и сейчас 2МБ файлы прошивок таскать?

А в чем проблема? В медленном и дорогом канале связи?
В моих задачах нет таких проблем, и обновление прошивки для меня скорее исключение, чем норма.
Можно и 2МБ залить по Ethernet за несколько секунд.
Если бы обновлялся с перфокарт, то подумал бы о каждом байте, но к великой радости - такое время давно прошло.

Цитата(jcxz @ Jun 28 2018, 09:11) *
Где я Вас оскорбил??? wacko.gif

Цитата
Умные люди CRC располагают в пределах образа прошивки или сразу за его концом. Хотя чудаки всякие бывают....

Меня - нигде. Но ходите по грани. Объясню импликацию "умные люди" "располагают за концом".
Но "располагают в конце 2МБ" не означает что "человек не умный". Вам это понятно.
Типа как "незнание закона" "не освобождает от ответственности". А "знание" что? "Освобождает" что ли?
Согласен. Можно под прошивку использовать только часть доступной памяти с резервом на будущее. И такой подход
может быть признаком умного человека. Но если ты используешь всю доступную память, то не во всех случаях это
доказывает отсутствие ума. В рамках логики это утверждение не может быть ни истинным, ни ложным.
Но вы решили, что это признак чудака.

Теперь по сути. Какой смысл ТСу вместо этих FF записывать туда свой код? Никакого.
Сегодня там FF, а завтра какой-нить HTTP-сервер. Т.е. вы с позиций умного человека советуете
эту область использовать по своему усмотрению? И всякий раз когда FF сместятся при каком-нить обновлении
заново собирать свое приложение с плясками по свободным местам?
jcxz
Цитата(adnega @ Jun 28 2018, 10:01) *
Согласен. Можно под прошивку использовать только часть доступной памяти с резервом на будущее. И такой подход
может быть признаком умного человека. Но если ты используешь всю доступную память, то не во всех случаях это
доказывает отсутствие ума.

Не согласен совершенно.
Если некто сделал что-то ногодрыгом, типа "и так сойдёт", "ведь работает". Хотя рядом был периферийный блок, на котором нормально можно было сделать.
Или написал программу, сожрав все ресурсы, хотя данная задача реализуется с гораздо меньшими ресурсами.
Я не буду считать такого человека профессионалом, пускай даже этот девайс и как-то работает.
Сделанное на "отвали" - это признак непрофессионала, а значит глупого человека.
То что "оно" сейчас как то работает, не означает ничего. Потому что завтра потребуется что-то добавить и будет облом. Или использовать в последующих разработках.
А пример почему большой образ прошивки плохо - я Вам привёл. И примеры эти - из реальной жизни, из моей практики.

Цитата(adnega @ Jun 28 2018, 10:01) *
Т.е. вы с позиций умного человека советуете
эту область использовать по своему усмотрению? И всякий раз когда FF сместятся при каком-нить обновлении
заново собирать свое приложение с плясками по свободным местам?

Вы похоже чего-то не поняли в моём сообщении.... wacko.gif
ТСу нужна память. Я написал что она может посмотреть в конец области add_flash, и если там FF, то скорей всего эту область можно урезать и использовать для себя.
И вот если написатели её ПО поступили как я, а не как Вы, и не считают CRC по всем этим FF, то никаких проблем урезать сегмент app_flash не будет. Вот Вам и ещё один аргумент в пользу моего подхода.
А если они поступили как Вы и даже не подумали, то теперь эта область как балласт - и сами не юзают и другие не могут. Вот это и есть глупый подход.
И куда там FF сместятся? Подходите, пожалуйста, опять с позиций умного человека: естественно надо урезать с конца регион app_flash и ничего никуда не сместится.
Если то чужое приложение может само обновляться (чего не следует из сообщений ТС), то отрезаемый регион стоит подровнять по границам блоков стирания флешь.
adnega
Цитата(jcxz @ Jun 28 2018, 12:04) *
И вот если написатели её ПО поступили как я, а не как Вы, и не считают CRC по всем этим FF, то никаких проблем урезать сегмент app_flash не будет.

Сегодня не будет, а завтра будет.
Допустим половина области сплошные FF. ТС взял их под свои нужны. Завтра новая прошивка, но уже FF больше половины,
и все это налезает на прошивку ТСа. Ваше "скорей всего" и есть дилетантский подход к разработке.
У меня есть ТЗ, я по этому ТЗ все реализовал и выбрал соответствующие ресурсы. Разумеется профи не будет
ставить 2МБ чип, когда проша со всем ТЗ умещается в 64кБ.

И про ногодрыг непонятно. Это светодиодом по DMA управлять? Или UART ногодрыгом при свободных аппаратных UART?
Конечно, для светодиодов индикации я использую ногодрыг и софтовые таймеры, если нужно мигание (1Гц и т.п.).
Периферию гружу по максимуму, но только там где это надо.

Тут вопрос другой. Что делать с недостатком памяти? Либо ставить чип объемнее, либо согласовывать и утверждать новую карту памяти.
Можно навесить внешней памяти, но это затратнее толстого чипа. Все! Никаких других профессиональных, гарантированных,
законных вариантов я придумать не могу. А это ваше "скорее всего" очень модное "хайли лайкли" напоминает, но вы при этом не в лучшем
свете себя выставляете.

Лирика: более 10 лет назад я работал в одной компании. Там был свой софт и своя база данных. Дык, никакого способа добраться
до этой базы, кроме реверса не было. А автоматизировать работу хотелось. Пару вечеров, и я сделал утилитку, которая на основе
этой базы генерила отчеты очень упрощающие жизнь мне, представителю заказчика и проектировщикам. Причем, последние,
ну уж очень плотно на эту утилитку подсели, ибо исполнительную документацию можно было сделать гораздо точнее и быстрее.
Свою работу я закончил, про утилитку забыл, а проектировщики продолжали ее использовать.
Потом поменялась версия софта и чуть-чуть это затронуло базу. Я чуть-чуть поправил утилитку (по просьбе трудящихся),
но разбираться пришлось практически заново (реверс новой базы). После третьего по счету реверса пришлось объяснять,
проектировщикам про боль тленного мира, про варианты прямые и совсем неправильные.
Мораль: свою задачку я решил тем средством каким решил. Без реверса, а полностью легально было бы долго и не факт,
что руководство на это бы пошло. Сейчас всегда, когда просят какой-нить протокол интегрировать или что-то подобное,
рассказываю эту историю и предупреждаю, что сегодня может работать, а завтра нет. Кто хочет - тот рискует,
но я пути, не позволяющие гарантировать результат, стараюсь не выбирать.
jcxz
Цитата(adnega @ Jun 28 2018, 13:19) *
Ваше "скорей всего" и есть дилетантский подход к разработке.
У меня есть ТЗ, я по этому ТЗ все реализовал и выбрал соответствующие ресурсы. Разумеется профи не будет
ставить 2МБ чип, когда проша со всем ТЗ умещается в 64кБ.

Вы вообще исходное сообщение ТС читали? Про какой "выбор чипа" вообще говорите, какой "выбор ресурсов"??? У ТС - есть конкретная прошивка под конкретный чип, и она хочет кроме неё записать ещё что-нить.
"скорей всего" - потому что ни я ни Вы (думаю) не знаем от чего зависит работа той готовой прошивки у ТС. И от чего она перестанет работать. И потому что если бы эта задача стояла передо мной, то давно бы уже решилась за несколько минут. Но я не могу видеть что там у автора топика.
Да и каково ваше то предложение, "не дилетантское"? rolleyes.gif
Вы то что посоветуете в этой ситуации? Флешь трогать нельзя, а что тогда можно трогать?

Цитата(adnega @ Jun 28 2018, 13:19) *
Тут вопрос другой. Что делать с недостатком памяти? Либо ставить чип объемнее, либо согласовывать и утверждать новую карту памяти.
Можно навесить внешней памяти, но это затратнее толстого чипа. Все!

Ещё раз перечитайте исходное сообщение. Прошивка есть под конкретный МК и с большей памятью его видимо нет (иначе вопрос вообще не должен стоять). А может вообще - есть готовое устройство, в которое нужно что-то добавить?
Внешняя память? А грузить куда? Есть внешняя ОЗУ? А пины для подключения внешней памяти есть? А как подключение внешней памяти повлияет на существующую готовую прошивку? Не станет ли она глючить после этого? А если текущая версия не глючит, то не станут ли глючить последующие обновления? ...которые не знают как ТС подключил свои external RAM and FLASH.
Так что получается и ваше решение как Вы выразились - "хайли лайкли", а по-русски - как фишка ляжет. Только с гораздо большими сложностями и расходами biggrin.gif
adnega
Цитата(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, я, пожалуй, общение с вами прекращу, т.к. создается впечатление, что какой-нить Николай Семенович
взломал вашу учетку и публикует неадекватные сообщения на форуме с очевидным нарушением логики и базовых принципов.
Как отвоюете учетку назад - буду рад продолжить общение.
Ekka
Привет, спасибо за ваши советы.
Я сейчас действительно роюсь в файлах разработчика и пытаюсь "оторвать" от приложения и добавить к своему проекту хотя бы еще 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, вызывается загрузчик и появляется его консоль, где я вижу, с какого адреса
этот загрузчик пилит...

Как мне изменить этот адрес, как понять, откуда именно он его берет?
k155la3
Цитата(Ekka @ Jul 2 2018, 15:35) *
Приложение разработчика грузится в память из среды YAPLC-IDE через загрузчик stm32flash.
И теперь мой косяк в том, что я почему-то не могу изменить адрес, с которого этот загрузчик должен писать код.
нужно сменить с 0x08008000 на 0х0800С000...

Утилита управляется из командной строки, если ЭТО, ключами, в том числе адресация что-куда.
Может есть заблокированные самой утилитой "служебные" диапазоны адресов, куда запрещена запись.
Если есть возможность, посмотрите с какими опциями стартуется stm32flash.
Если грузится формат hex, то адресация забита в нем, и изменить это может перекомпиляция на другие адреса.
ps
Вот, вроде этого, в FAQ здесь
Ekka
Привет всем. Как писать с другого адреса от загрузчика - сделано.


Возникла проблема - может кто-то с таким сталкивался, или проблема типичная для новичком или пробелы в моем знании

организации памяти в stm32f4...НО

Может, кто-то в курсе, почему при указании адреса начала записи 0х08008000 все пишет, куда и указано
Но стоит указать адрес 0х0800С000, и я получаю код, записанный по адресу на сектор позже, 0х08010000?
опять же, если укажу адрес 0х08020000 (начало 5 сектора), получу код, начиная с адреса 0х08028000
Может быть проблема в разных размерах секторов памяти?

Подскажите, что я делаю не так...??? smile3046.gif

память в моем коде
Код
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
}
jcxz
Вам трудно что-то советовать, так как непонятно ни кто именно "пишет":
Цитата(Ekka @ Jul 3 2018, 15:39) *
почему при указании адреса начала записи 0х08008000 все пишет, куда и указано

про кого разговор?

Ни что означает:
Цитата(Ekka @ Jul 3 2018, 15:39) *
память в моем коде

и
Цитата(Ekka @ Jul 3 2018, 15:39) *
Приложение разработчика

У Вас есть некий "разработчик" который совместно с Вами пишет код в этот кристалл? wacko.gif
Вы вроде совмещали своё приложение с неким готовым кодом, но из вышеуказанных фраз неясно - где говорится про ваш код, а где - про сторонний?
Понимаете: Вашу задачу знаете только Вы, и только Вы видите ваши исходники. А остальным Вы даже не пытаетесь обрисовать картинку, а ваш вопрос больше похож на причитания, а не на просьбу консультации. crying.gif
Или как тут принято говорить: "Телепаты в отпуске!"

Цитата(Ekka @ Jul 3 2018, 15:39) *
Правда, из каких соображений в ccm 64K, я без понятия...

Может потому, что в данном МК она имеет размер 64К, кэп? laughing.gif

PS: При задавании вопроса, перечитайте ваш вопрос ещё раз, с позиции стороннего человека, не знающего что там у вас да как. И подумайте - поняли ли Вы сами о чём вопрос? smile3046.gif
А то многие вопросы тут звучат как: "Я что-то делаю (не скажу что) с чем-то (не скажу с чем) с помощью чего-то (не скажу с помощью чего) и у меня что-то получается (не скажу что). Подскажите как мне быть, если я хочу другого (не скажу чего)?"
Этот совет не только к Вам относится, но и ко многим другим вопрошающим......
Ekka
Ребята, спасибо всем, кто отвечал, нашлись мои ошибки. Вернее мои ошибки не относились прямо к коду... а скорее к путям указания нужных мне файлов.
Но спасибо всем, кто отвечал на мои "вопрошания и причитания")) a14.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.