-
- Демонстрация концепции в приложенном архиве. Вкратце, заставить GNU ld выкинуть секцию невозможно... но можно вырезать потом из исполняемого файла с помощью objcopy. При этом можно получить неработающий бинарник (не осилил почему -- понял, что fk0(310 знак., 05.01.2013 03:25)
- Главная проблема: как компилятору объяснить, что эта строка должна быть в сегменте code а другая в сегменте super_flash. Линкер разложить разные сегменты по разным областям умеет, остальное вы уже описали. Как объяснить компилятору я не знаю, это AlexBi(24 знак., 27.12.2012 09:55)
- Для строк можно сделать следующее AD(272 знак., 26.12.2012 17:02 - 17:12)
- написать простенькую прогу которая создаст файл согласно структуре на картинке. abivan(572 знак., 26.12.2012 14:57 - 16:10)
- Ничего не понял. Речь вообще-то в основном про строковые константы неизвестной (ну до килобайта) длины и прочие подобные вещи. Описывать их какими-то структурами, где-то на стороне??? Суть в том, чтоб в исходнике всё осталось как есть, только fk0(58 знак., 26.12.2012 15:00)
- Написать свой препроцессор для исходников, который будет выдёргивать эти строки, генерить HEX для внешней памяти и таблицу адресов для доступа к ней. - SciFi(26.12.2012 16:04)
- да о них и речь о строковых константах и не строковых тоже любой длины. только XSTR не макрос а ф-я, будет puts(XSTR(ID_HELLO)); если это устроит то могу более подробно объяснить и ответить на вопросы. - abivan(26.12.2012 15:51)
- XSTR(s) должен быть непременно макросом или может быть функцией? Если производительности хватает, то присваивать строкам абстрактные идентификаторы вместо адресов, а функция XSTR пусть грузит в ОЗУ и возвращает указатель koyodza(260 знак., 26.12.2012 15:46 - 15:51)
- да, именно это и имелось ввиду. К структуре t_cache нужно счетчик обращений добавить. - abivan(26.12.2012 16:08)
- Ничего не понял. Речь вообще-то в основном про строковые константы неизвестной (ну до килобайта) длины и прочие подобные вещи. Описывать их какими-то структурами, где-то на стороне??? Суть в том, чтоб в исходнике всё осталось как есть, только fk0(58 знак., 26.12.2012 15:00)
- от Вас не ожидал такого вопроса... Я сам задал бы Вам такой. - Ациль Шифер(26.12.2012 14:22)
- Кажется, это тот же известный макрос, что и доступе EEPROM ;) А уж куда считывать - в динамически выделенный массив или один из буферов уже неважно. Vladimir Ljaschko(152 знак., 26.12.2012 11:30, ссылка)
- Не всё так просто. Линкеру нужно два скрипта. В первом секция, например, "FLASH" не линкуется, но занимает адресное пространство (типа bss). Во втором -- в вывод должна попасть только она (и с корректными адресами). В первом случае получаем coff fk0(100 знак., 26.12.2012 14:19)
- А зачем во втором случае линкер? Если внешняя память таки меньше внутренней, то делается второй проект, который инициализирует внешнюю память по частям значениями по умолчанию. Или через интерфейс получаем данные и грузим. - Vladimir Ljaschko(26.12.2012 15:09)
- Внешняя память на порядки больше внутренней. И константные данные (строки) не отделимы от текста программы без титанических усилий. - fk0(26.12.2012 18:04)
- хэши ещё бывают... со всякими лексияками... - Vit(26.12.2012 18:10)
- Внешняя память на порядки больше внутренней. И константные данные (строки) не отделимы от текста программы без титанических усилий. - fk0(26.12.2012 18:04)
- А зачем во втором случае линкер? Если внешняя память таки меньше внутренней, то делается второй проект, который инициализирует внешнюю память по частям значениями по умолчанию. Или через интерфейс получаем данные и грузим. - Vladimir Ljaschko(26.12.2012 15:09)
- Не всё так просто. Линкеру нужно два скрипта. В первом секция, например, "FLASH" не линкуется, но занимает адресное пространство (типа bss). Во втором -- в вывод должна попасть только она (и с корректными адресами). В первом случае получаем coff fk0(100 знак., 26.12.2012 14:19)
- Если я правильно понял, вы "изобретаете" чисто программную реализацию MMU? - rezident(26.12.2012 11:16, ссылка)
- скорее псевдофайловую систему + кэш этой псевдофайловой системы. - Mahagam(26.12.2012 13:07)
- +1. Контроллеры непрофессионального уровня генерят исключения, а обработчик может подставлять правильные данные. Некоторые таким образом фиксят отсутствие невыровненного доступа в проце. - SciFi(26.12.2012 11:37)