Здравствуйте, 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>Так что, если опыт действительно имеется, пиши посты! Буда рад обменяться опытом
Уж не знаю, что ты подразумевал, когда писал "512byte EEPROM (флэшка)", но матчасть подучить нефигово бы.
А теперь небольшой ликбез. При включении питания или при ресете, процессор начинает выполнять зашитые в него производителем микрооперации. Согласно этим командам после ресета начинается выполнение команды по фиксированному адресу, обычно это адрес 0х0000 (во всяком случае в атмелских рисках это именно так), а команда представляет собой инструкцию типа jmp на адрес обработчика ресета. изменить адрес, по которому лезет микрокоманда может только производитель. Безусловно, я не исключаю возможности, что в тех контроллерах, которые ты осваиваешь, реализована возможность менять положение таблицы прерываний, отсюда и вопрос у тебя такой. Но не могу понять ЗАЧЕМ это нужно??? даже ситуации такой представить не могу, где это могло бы понадобиться.
Далее, ты не шибко внимательно прочитал мой пост. Говоря о двух таблицах, я описывал ситуацию, к которой приведет возможность изменять положение таблицы векторов прерываний. А то, что ты написал в скобках, является не твоим изобретением, а стандартным методом реализации точек входа в соответствующие обработчики прерываний.
Далее. Конечно, сравнивать ассемблеры для двух принципиально разных архитектур, это сильно. Разные задачи, разные архитектуры, разная производительность и разный набор команд. Нельзя!
А вот слова про то, что EEPROM и FLASH ЗАШИТЫ на камень... Парень, учи матчасть, толк будет только при знании теории. Если ты научился лампочки поджигать контроллером, это очень хорошо, но этого мало для реальной работы.
Собссно, на этом я прекращаю участие в этой "дискуссии".