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