dzrkot писал(а):Всётаки я очень надеялся что мне на простом примитивном языке это подскажут, и в голове вся картина соберётся воедио.
Вектор прерываний — это адреса ячеек памяти программ, которые загружаются в счётчик команд при возникновении прерывания. Другими словами, МК начинает выполнять команды, расположенные по соотв. адресу прерывания. Т.е. если у вас будет прерывание DMA, то будет выполняться команда по адресу 0FFE4h. Обычно вектор прерываний содержит команды безусловного перехода на области памяти, где непосредственно находятся процедуры обработки прерываний.
спасибо) тогда дальше, вот по этому адресу 0FFE4h , у меня что находится, просто грубо говоря пустая ограниченная область памяти, в которую я уже пишу код, и грубо говоря оперирую именно ей. А если мне надо скажем по прерыванию что-то посчитать для main, то мне придётся обращаться к локальным переменным в main через указатели(или ссылки в С++), ну т.е. это по сути будет (с точки зрения написания кода) просто функция, которая ничего не возвращает и не имеет аргументов?
ibiza11 писал(а):что такое прерывание в общих чертах Вы, полагаю уже знаете. Я могу чуть подробнее рассказать: В контроллере есть таблица векторов, в которой находятся команды перехода на обработчики прерываний. Обработчик прерывания - обычная функция, выполняемая в прерывании. Контроллер в обычном режиме двигает указатель по программной памяти и последовательно считывает и выполняет команды, одна за другой. В момент возникновения какого-либо события (например переполнения счетчика таймера) устанавливается аппаратный флаг. В случае если разрешены глобальные прерывания и разрешено прерывание от возникшего события, указателю программной памяти аппаратно присваивается значение из области таблицы векторов прерываний. Какое именно значение зависит от возникшего события. По соответствующему адресу должен стоять вектор, который направляет указатель на обработчик прерывания.... надеюсь понятно))))
PS пока строчил, тут уже все объяснили)
спасибо, не всё, вы как раз таки ответили на то, что я ещё спросил) хотя про указатели итп было бы интересно понять..)
т.е. TIMER0_A0_VECTOR - это и есть то, что должно быть в процедуре обработки этого вектора т.е. в Си это будет иметь вид:
В общем и целом правильно.В каждом компиляторе свой синтаксис ообработки прерываний. И самое важное, не разрешайте прерываний, которые не описаны соответствующей конструкцией. Иначе случится неописанная ситуация в виде регулярного ресета.
т.е. TIMER0_A0_VECTOR - это и есть то, что должно быть в процедуре обработки этого вектора т.е. в Си это будет иметь вид:
В общем и целом правильно.В каждом компиляторе свой синтаксис ообработки прерываний. И самое важное, не разрешайте прерываний, которые не описаны соответствующей конструкцией. Иначе случится неописанная ситуация в виде регулярного ресета.
, а если поменять TIMER1_A0_VECTOR на любую тарабарщину, то всё ок, т.е. что-то я не так делаю....нашёл пример с #pragma vector= ...о там для AVR ... бду дальше разгадыватьвсё это))
//директиве #pragma vector= нужно указать номер вектора // прерывания, список векторов задан в файле iotiny45.h #pragma vector=PCINT0_vect //имя PCINT0_routine взято произвольно __interrupt void PCINT0_routine(void) { __no_operation(); }
непонятно как в данном случае работает #pragma vector= и почему имя PCINT0_routine взято произвольно... Но по сути моя конструкция должна выглядеть примерно так:
Так смотрите внимательнее Там же написано, что нужно делать #pragma vector=Вектор Эта директива компилятора она указывает, что следующая процедура является обработкой прерывания по данному вектору. Любое произвольное название и будет названием этой процедуры. А если не писать #pragma vector= то нужно пользоваться стандартными функциями Что это за вектор такой? TIMER1_A0_VECTOR В студии есть TIMER1_COMPA_vect может все таки пересмотрите еще раз что там описано в вашем заголовочнике? И вообще си чувствительно к регистру.
vitalik_1984 писал(а):Так смотрите внимательнее Там же написано, что нужно делать #pragma vector=Вектор Эта директива компилятора она указывает, что следующая процедура является обработкой прерывания по данному вектору. Любое произвольное название и будет названием этой процедуры. А если не писать #pragma vector= то нужно пользоваться стандартными функциями Что это за вектор такой? TIMER1_A0_VECTOR В студии есть TIMER1_COMPA_vect может все таки пересмотрите еще раз что там описано в вашем заголовочнике? И вообще си чувствительно к регистру.
В студии? Я использую IAR for MSP430 там в хедере... #include "msp430f5435A"
Необходимо преобразование на verilog'е Как я понимаю есть 2 пути - описание математикой и подключением примитива 74185?
Короче говоря - проект на CPLD. Есть поле из 8-ми двоично-десятичных счётчиков и 8-ми регистров с выводом на 7-сегментный дешифратор. Имеет ли смысл переводить систему на двоичные счётчики, или преобразование Bin2BCD сожрет больше памяти чем при использовании двоично-деесятичной системы?
Если я правильно уловил вашу мысль, то вам необходимо считать и выводить 8 десятичных цифр. Если да, то bin2bcd на 8 разрядов потребует существенно больший объём по ресурсам ПЛИС нежели 8 двоично-десятичных счётчиков - надо будет в цикле делить на 10 с вычитанием... Это IMHO.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
в datasheet в таблице регистра отвечающего за состояние портов, настроенных на выход, не указано значение default т.е. после reseta и т.п. ...т.е. их надо все обязательно инициализировать ручками? А что будет если их не инициализировать, они будут в случайном состоянии? И ещё вопрос, входы, которые висят в воздухе - написано, что лучше их инициализировть как выходы, и программно сажать на землю/питание через подтягивающий резистор, но не сказано что из этого лучше...вообще я подумал что мб есть какое-то правило хорошего тона там или как-то принято это...?Ну т.е. что-то конкретное считается лучшим или принято из этого.
dzrkot писал(а):в datasheet в таблице регистра отвечающего за состояние портов, настроенных на выход, не указано значение default т.е. после reseta и т.п. ...
Не вижу проблемы ) Если ножки не используются - можно с ними ничего не делать, ибо совершенно все равно что там будет, особенно если они настроены на выход. В случае если они используются, в любом случае их надо инициализировать.
dzrkot писал(а):в datasheet в таблице регистра отвечающего за состояние портов, настроенных на выход, не указано значение default т.е. после reseta и т.п. ...
Не вижу проблемы ) Если ножки не используются - можно с ними ничего не делать, ибо совершенно все равно что там будет, особенно если они настроены на выход. В случае если они используются, в любом случае их надо инициализировать.
Ну первое - думал мало ли...правила хорошего тона там..)) Со вторым то понятное дело))
я смотрю на схему и думаю, может вам программатор громова попробовать? схема почти такая же, а деталей меньше. и вроде работет на более современных компах http://easyelectronics.ru/avr-shag-pervyj-programmator.html на понипрога все больше нареканий посл время
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Где-то я видел такой немаленький программатор, туда и громов и другие вошли. Работал от COM и USB, сейчас не вспомню. Правда мне все чаще мысли приходят что лучше купить программатор, только дорогие.
Главный инженер проекта - человек, который как никто другой знает, что приближаться к спроектированной им хрени близко не стоит.