Цитата:
Сообщение от
gid
Тут похоже я в заблуждение ввёл. Я начал разбираться и вникать, что там такое я понаписал в тесте. И вот что выяснилось. Там на скриншоте в посте
#136 число 16 - это не номер страницы. Это количество килобайт доступной памяти. Это инкрементный счётчик, который увеличивается на 16 для каждой проверенной половинки страницы.
Это реальный косяк программы - когда вывод результата непонятен даже автору, по прошествии достаточного количества времени.
Но тем не менее, проверка ОЗУ проводится 16кбайтными кусками, половинками страницы в двух режимах, как в таблице. И как-то эту половинку надо именовать.
понятно, те счетчик встал на первых 16кБ расширенной памяти которую он пытался проверить
так получается логично повторение этого сообщения
Цитата:
Да, с номером страницы всё верно
Смысл этого выражения от меня ускользает, но физический адрес страницы в линейном адресном пространстве вычисляется так:
BASE + (SMK_PAGE << 15), где BASE - начальное смещение участка в памяти, выделенного под ОЗУ СМК, а "<< 15" это умножение на 0x8000 - размер страницы 32кб.
все именно так
я поясню: - так как полный адрес 24бита то имеет смысл уменьшить его длину за счет разбивки на сегменты и
я разбил всю память 32МБ на сегменты по 4кБ те 10000(8), что явно соответствует размеру разбивки у SMK и мне кажется удобным для программирования
соответственно и сделал набор регистров (16шт) в которые можно записать адрес сегмента
младшие 8 регистров сделаны на вырост (или доработку с отключением нижней памяти с 0 до 77777)
старшие же соответствуют SMK-маппированию
технически я транслирую запрос к мапперу SMK в запрос к мапперу AZ обеспечивая совместимость
соответственно у меня формируется номер этого 4кБ сегмента - базовое смещение для сегментов SMK + SMK страница + номер сегмента в странице: {6'b000001,SMK_PAGE,3'd6};
Цитата:
Полная расшифровка этой строки такая:
"Страницу с кодом подключения страницы 0020, ранее уже подключали кодом подключения страницы 0120".
0120 - это самый самый первый код подключения первой половинки страницы 0. У вас получается такая штука, что абсолютно все страницы мапятся в один и тот же участок памяти. Причём что странно, даже вторая половинка страницы 0, так же мапится в первую половинку стр. 0.
Цитата:
И ещё, имейте в виду, что код режима HLT11 на самом деле 0, а не 20000, в регистре 177130 бита 13 по записи нету, поэтому он ни на что и не влияет. Просто в ПО АльтПро было принято соглашение, что код режима по каким-то уже забытым причинам не должен быть равен 0. Поэтому взяли вот такое число.
опа
:v2_dizzy_facepalm:
Цитата:
Не ок. Уточнение. Не всегда, а всегда, за исключением режима SYS. Там вместо ОЗУ продублировано ПЗУ, которое по адресам 160000-167777. см табл. режимов.
См. таблицу режимов, строка "170(177000hdd)-0"
Основное применение - HALT режим. ОЗУ по записи по адресам 177674,177676
Бейсик - вторичен.
Тут есть такой нюанс. Т.к. 7й сегмент делится на 2 части, то и проверяется он дважды. Но! Тест на экран выводит только ошибочные ситуации, если ошибки нет, на экран ничего не выводится.
Поэтому ошибка:7-6(10) относится не к диапазону 170000-176776, а к диапазону 177000-177777. Оба эти диапазона имеют код 7, поэтому происходит путаница.
Я исправлю вывод информации в тесте, чтобы было более понятно, когда придумаю как.
- - - Добавлено - - -
А ещё, внутри этой страницы, в зависимости от режима работы СМК, нужно по-разному тасовать сегменты по 010000 байт.
круто
спасибо за развернутые ответы!
хотел ответить сразу, но пошел по более длинному пути, а именно решил что пришло время написать свой тест AZ
ибо железка получается сложная и надо явно автоматизировать проверку функционала
за базу взял последнуюю версию Вашего теста обрубил тест SMK и занялся тестированием AZ-а
обнаружил неприятную проблему после 16ого мегабайта, те снос крыши у памяти, что вообще очень странно ибо тест памяти прекрасно проходит если идет с STM32
пока завис на ловле глюка