Здравствуйте, Tunga, Вы писали:
T>Здравствуйте, RedChief, Вы писали:
RC>>Здравствуйте, Tunga, Вы писали:
T>>>Здравствуйте, Tunga, Вы писали:
T>>>>Здравствуйте, RedChief, Вы писали:
RC>>>>>Может кто-нибудь занимался программированием для однокристальных микроЭВМ (конкретно Motorola MC68HC11F1)?
RC>>>>>Если да, то подскажите, где физически будет размещена таблица векторов прерываний в расширенном режиме, если
RC>>>>>настроить внутреннюю память ППЗУ (EEPROM) так, чтобы она распологалась на странице $E в адресном простанстве
RC>>>>>(адреса $EE00 — $EFFF). Стандартно таблица прерываний лежит в $FFC0 — $FFFF. Можно ли физически прошить
RC>>>>>ее на подключаемую внешнюю память команд по этим адресам, чтобы при обращении по этим адресам (при обработке
RC>>>>>прерывания) адреса брались из этой внешний памяти.
RC>>>>>Всего можно адресовать 64K памяти. На камне расположено 1024byte RAM и 512byte EEPROM (флэшка).
RC>>>>>З.Ы. Если кто ничего не понял — я не виноватый, такое это уж дело тяжелое — программирование микроконтроллеров.
T>>>>Ты сам-то понял, чего спросил?
T>>>>Во-первых, флеш и еепром — два разных по физическим принципам носителя информации, Так же как скажем магнитная лента и компакт-диск. Учи матчасть.
T>>>>А во-вторых, нафига менять положение таблицы прерываний? Её положение должно быть фиксировано, иначе получится обычное дублирование: нужно будет создать некую предварительную таблицу, которая будет указывать на таблицу, в которой лежат истинные адреса обработчиков прерываний. То есть, для того чтобы отработать ресет процу нужно будет прыгать на адрес в предварительной таблице, оттуда на адрес в истинной таблице, и уже оттуда на адрес начала обработчика.
T>>>ЗЫ: Хотя должен признать, что разницы между EEPROM и FLASH мало
Но её достаточно, чтобы отличать две технологии друг от друга...
RC>>Ты сам-то понял что ответил?
RC>>Я же не спрашивал про то, как мне продублировать таблицу векторов прерываний или подменить ее. И уж точно я
RC>>не спрашивал про то, чем отличается EEPROM и FLASH, тем более, что несмотря на различие этих технологий, принципиально
RC>>они похожи очень, тем более когда они зашиты на камень производителем, и нас мало вонует, какую именно технологию там
RC>>использовали.
RC>>Я спросил как можно сделать так, чтобы адреса векторов прерываний в карте памяти не менять, а физически расположить
RC>>их на другом носителе, конкретно: на внешней памяти команд. В этой однокристалке адресное пространсто единое! А вот откуда
RC>>прочитаются данные, при обращении по какому-либо адресу — вот это вопрос.
RC>>И еще. Мне просто интересно, ты программировал когда-нибудь что-нибудь для однокристалок? Судя по ответу, ты разбираешься
RC>>в программировании на ASM, даже знаешь как подменить таблицу векторов прерываний (хотя я бы просто адреса в реальной
RC>>таблице поменял, безо всяких там прыжков по исходной и измененной таблицам). Но только вот программирование персоналок,
RC>>которые в абсолютном большинстве работают, придерживаясь фон-неймановской архитектуры, и программирование однокристальных
RC>>микроЭВМ, работающих по гарвардской архитектуре, это вещи разные как небо и земля! В ассемблерах схожие (не одинаковые!)
RC>>инструкции по пальцам одной руки пересчитать можно.
RC>>Так что, если опыт действительно имеется, пиши посты! Буда рад обменяться опытом
T>Уж не знаю, что ты подразумевал, когда писал "512byte EEPROM (флэшка)", но матчасть подучить нефигово бы.
T>А теперь небольшой ликбез. При включении питания или при ресете, процессор начинает выполнять зашитые в него производителем микрооперации. Согласно этим командам после ресета начинается выполнение команды по фиксированному адресу, обычно это адрес 0х0000 (во всяком случае в атмелских рисках это именно так)
У меня не "атмелский риск".
T>, а команда представляет собой инструкцию типа jmp на адрес обработчика ресета. изменить адрес, по которому лезет микрокоманда может только производитель.
В момент старта инициируется системный RESET, по которому в программный счетчик загружаются две последние ячейки памяти $FFFE и $FFFF, после чего программа продолжается именно с указанной точки (а что там будет, обработчик RESET или еще какой-нить код, это мало волнует сам микроконтроллер).
T> условно, я не исключаю возможности, что в тех контроллерах, которые ты осваиваешь, реализована возможность менять положение таблицы прерываний,
Да, и такая возможность предусмотрена, но мне НЕ НАДО МЕНЯТЬ ПОЛОЖЕНИЕ ТАБЛИЦЫ ВЕКТОРОВ ПРЕРЫВАНИЙ, мне надо подменить значение вектора прерывания. А именно значение вектора прерывания именно ресета. В низкоуровневом программировании если нельзя но очень хочется, то можно.
Вопрос я решил сам, переместив EEPROM в адресном пространсве повыше. При обращени к таблице векторов прерываний контроллер просто пападает во внешняя подключенную память. Не красиво, но надежно, и, как выяснилось работает. Возможно еще просто переписать вектора прерываний напрямую в EEPROM и никуда в адресном пространстве его не двигать. Просто перепрограммирование это займет много тактов. В моем случае это не преемлимо.
T> отсюда и вопрос у тебя такой. Но не могу понять ЗАЧЕМ это нужно??? даже ситуации такой представить не могу, где это могло бы понадобиться.
Ну вот надо мне!

Я НЕ программирую поджигание лампочек! А занимаюсь более серьезными делами.
T>Далее, ты не шибко внимательно прочитал мой пост. Говоря о двух таблицах, я описывал ситуацию, к которой приведет возможность изменять положение таблицы векторов прерываний. А то, что ты написал в скобках, является не твоим изобретением, а стандартным методом реализации точек входа в соответствующие обработчики прерываний.
Я и не претендовал на это изобретение. Это было придумано до меня
T>Далее. Конечно, сравнивать ассемблеры для двух принципиально разных архитектур, это сильно. Разные задачи, разные архитектуры, разная производительность и разный набор команд. Нельзя!
T>А вот слова про то, что EEPROM и FLASH ЗАШИТЫ на камень... Парень, учи матчасть, толк будет только при знании теории.
FLASH на кристалле нет, я и не писал про нее. Я писал, что на кристалле есть 512 байт EEPROM. И эту память никуда оттуда не деть, потому что она встроена (вшита, впаяна, вклеяна, забита — читай как хочешь) в сам кристал!
T>Если ты научился лампочки поджигать контроллером, это очень хорошо, но этого мало для реальной работы.
Про реальную работу я выше написал.
T>Собссно, на этом я прекращаю участие в этой "дискуссии".
И правильно. Я тоже считаю, что когда нечего сказать, то лучше молчать.
Учи матчасть, парень