реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Прерывание на С, для Keil
Виктория
сообщение Oct 31 2005, 05:47
Сообщение #16


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(Regbist @ Oct 31 2005, 00:01)
Народ, я написал обработчик прерываний для com порта, используя Keil/ А как мне вызвать эти прерывание в программе?
*

Прерывания вызываются не в программе. По приходу события - запроса прерывания от источника прерываний вызывается подпрограмма обработки прерывания. В Вашем случае может быть 2 прерывания, свидетельствующие о завершении операции передачи информации по последовательному порту, и о завершении операции приема информации.
Фоновая программа с другими вычислениями выполняется параллельно процессу приема/передачи (точнее квазипараллельно). Поэтому синхронизацию фоновой программы с подпрограммой обработки прерывания ("...потом "Бац" и мне приходит команда по компорту,которую надо обработать и понять что это за команда,остановив при этом вычисления...."), равно как и обмен данными ("...и как я узнаю, что мне чтото пришло по компорту...") нужно "ручками", т.е. самим программировать.

Вообще то в Вашем случае smile.gif , уважаемая наша молодежь, нужно с книг начинать. Можно вот эти, хотя бы

1. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. – М.: “Финансы и статистика”, 1991.
2. Фролов А.В., Фролов Г.В. Аппаратное обеспечение компьютера IBM PC. – М.: “Диалог-МИФИ”, книги 1-2, 1992. (Библиотека системного программиста; Т. 2).
3. Фролов А.В., Фролов Г.В. Программирование модемов. – М.: “Диалог-МИФИ”, 1993. (Библиотека системного программиста; Т. 4).
4. Густав Олссон, Джангуидо Пиани. Цифровые системы автоматизации и управления.- С.Петербург: “Невский диалект”, 2001.

Если у Вас уж очень серьезная необходимость, а книг нет - то могу выложить в этой ветке (кроме Джордейна).
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Oct 31 2005, 09:52
Сообщение #17


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(Regbist @ Oct 30 2005, 23:01)
....я написал обработчик прерываний для com порта.....А как мне вызвать эти прерывание в программе?......


Если разрешены прерывания по COM порту, то прерывание вызоветься автоматически по приходу (или отсылки - в зависимости от настроек разрешения) байта в(из) порта. Если требуеться передать в основной цикл нечто, то делают (обычно) буффер приёма (к примеру) и в него кидают принятый байт. В основном цикле проверяют данный буффер. Если в нём нечто есть - читаем и освобождаем в буфере место... То же самое и на передачу мона делать, только направление обратное... записываем, проверяем на активность обработчик, запускаем если спит, прерывание отработало (передался байтик), взяли очередной из буффера, очистили место в буффере, закинули в COM.

Или вот ышо вариант... Приходящий байтик по COM порту вываливаем на шинку порта. Тут буфером никаким не пахнет. Единственный нюанс (как и везде) - заботиться о сохранности регистров проца. Ведь если Вы заюзали регистр "a" (к примеру) - то нуна сохранить старое значение. Сохранить мона либо на стэке, либо в ячейке памяти.

удачи Вам
(круглый)
Go to the top of the page
 
+Quote Post
Roma_te
сообщение Dec 13 2005, 13:16
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 123
Регистрация: 13-12-05
Из: Украина, Тернополь
Пользователь №: 12 161



Цитата(Regbist @ Oct 30 2005, 23:01) *
Народ, я написал обработчик прерываний для com порта, используя Keil/ А как мне вызвать эти прерывание в программе?
к примеру задача такая:
я выполняю какие то операции в контроллере , затем мне надо всё остановить и передеть по com порту,


1. Включаеш режым дебагера (CTRL+F5)
2. Ставиш брекпоинт в начале обработчика перериваний (Debug - Insert/Remove Breakpoint)
3. Запускаєшь на исполнение (F5)
В случае если биты ЕА и ЕS равны 1 после комманды SBUF=... (через определенное количество операций) твоя программа должна остановится на брекпоинте.

Цитата(Regbist @ Oct 30 2005, 23:01) *
затем опять начать считать что то в контроллере,либо котроллер что то считает , потом "Бац" и мне приходит команда по компорту,которую надо обработать и понять что это за команда,остановив при этом вычисления.


1. Включаеш режым дебагера (CTRL+F5)
2. Ставиш брекпоинт в начале обработчика перериваний (Debug - Insert/Remove Breakpoint)
3. Запускаєшь на исполнение (F5)
Для проверки обработчика на прием необходимо в окне Watch открыть переменные SBUF и RI, присваиваешь SBUF нужное значение затем присваиваешь RI 1 и программа останавливается на брек поинте.

Не забудь в конце обработчика програмно сбросить флаги ТI и RI smile.gif
Go to the top of the page
 
+Quote Post
san822
сообщение Dec 14 2005, 08:51
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 195
Регистрация: 26-07-05
Из: Санкт-Петербург
Пользователь №: 7 111



Цитата(Vic1 @ Oct 31 2005, 08:47) *
Вообще то в Вашем случае smile.gif , уважаемая наша молодежь, нужно с книг начинать. Можно вот эти, хотя бы

1. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. – М.: “Финансы и статистика”, 1991.
2. Фролов А.В., Фролов Г.В. Аппаратное обеспечение компьютера IBM PC. – М.: “Диалог-МИФИ”, книги 1-2, 1992. (Библиотека системного программиста; Т. 2).
3. Фролов А.В., Фролов Г.В. Программирование модемов. – М.: “Диалог-МИФИ”, 1993. (Библиотека системного программиста; Т. 4).
4. Густав Олссон, Джангуидо Пиани. Цифровые системы автоматизации и управления.- С.Петербург: “Невский диалект”, 2001.

Если у Вас уж очень серьезная необходимость, а книг нет - то могу выложить в этой ветке (кроме Джордейна).




Очень бы хотелось почитать что-нибудь о прерываниях на русском языке,
желательно с примерами на ЯП Си.
У меня по Си есть книги, но, к сожалению, в них про прерывания не сказано почти ничего.
Наверное не то читаю...
Go to the top of the page
 
+Quote Post
Виктория
сообщение Dec 14 2005, 12:47
Сообщение #20


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(san822 @ Dec 14 2005, 12:51) *
Цитата(Vic1 @ Oct 31 2005, 08:47) *



Вообще то в Вашем случае smile.gif , уважаемая наша молодежь, нужно с книг начинать. Можно вот эти, хотя бы

1. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. – М.: “Финансы и статистика”, 1991.
2. Фролов А.В., Фролов Г.В. Аппаратное обеспечение компьютера IBM PC. – М.: “Диалог-МИФИ”, книги 1-2, 1992. (Библиотека системного программиста; Т. 2).
3. Фролов А.В., Фролов Г.В. Программирование модемов. – М.: “Диалог-МИФИ”, 1993. (Библиотека системного программиста; Т. 4).
4. Густав Олссон, Джангуидо Пиани. Цифровые системы автоматизации и управления.- С.Петербург: “Невский диалект”, 2001.

Если у Вас уж очень серьезная необходимость, а книг нет - то могу выложить в этой ветке (кроме Джордейна).




Очень бы хотелось почитать что-нибудь о прерываниях на русском языке,
желательно с примерами на ЯП Си.
У меня по Си есть книги, но, к сожалению, в них про прерывания не сказано почти ничего.
Наверное не то читаю...


Теоретически, для чего нужны прерывания - см. 2 главу [4]
Практически на примерах программирования на Си для IBM PC AT - глава из [2].
Последний файл - это материал из моих старых лекций (давно электронный вариант не обновляла, рассказываю студентам уже немного по другому и естеств., с примерами)

А дальше уже смотрите свою док. на используемый контроллер (принципы организации прерываний) и компилятор Си (ключевые слова типа interrupt, функции установки векторов прерываний и маскирования).
Прикрепленные файлы
Прикрепленный файл  olson1.zip ( 2.33 мегабайт ) Кол-во скачиваний: 52
Прикрепленный файл  ch2.htm ( 80.12 килобайт ) Кол-во скачиваний: 68
Прикрепленный файл  lec.doc ( 34 килобайт ) Кол-во скачиваний: 356
 
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 23 2005, 14:21
Сообщение #21


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Karol @ Oct 21 2005, 07:53) *
Какое время отклика на прерывание следует ожидать у LPCxx ? По моим наблюдениям отклик на внешнее прерывание, SPI и I2C в области микросекунд. Программа на Кейл Ц во внешней RAM.


Время отклика в первую очередь зависит от приоритета прерывания и далее от частоты кварца, настроек PLL, частоты периферийной шины... переход на обработчик FIQ LPC (в Keil) в области наносекунд (завершение текущей команды, сохранение в стек адреса возврата и переход по адресу FIQ), IRQ векторные - медленнее, а безвекторные могут откликаться, как Вы и говорите, в области микросекунд, т.к. могут откладываться до завершения обработки всех активных более высокоприоритетных прерываний плюс имеют дополнительный тормоз - потребность в программном определении источника прерывания. Реакция на прерывание не зависит от источника, будь-то внешний источник или внутренний, главное в какой слот записан вектор обработчика.
Go to the top of the page
 
+Quote Post
Regbist
сообщение Dec 29 2005, 10:44
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 8-09-05
Пользователь №: 8 357



здрасте!!! это снова я, и снова с прерываниямиsmile.gif
теперь проблема такая.
написал обработчик прерывания по com порту для микроконтроллера (DS80c400) в кейле,но при компиляции проекта прроисходит наложение адресов. #memory space overlap from c:400023h to c:400027h#. как мне избавиться от этого?
ещё такие особенности заметил при эксперименте с этим делом smile.gif
если для етого контроллера компилировать проект для его пошагового исполния в эмуляторе кейловском, то всё нормально компилируется, если же подгружать файл startup.a51(необходииый для загрузки в железо), то как раз происходит вышеуказанная путаница....

наверно я один из студентов разбираюсь с железяками в такое время, когда все остальные уже начали отмечать НГ smile.gif)))
всем удачи и с наступающим smile.gif
Go to the top of the page
 
+Quote Post
Regbist
сообщение Jan 10 2006, 13:03
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 8-09-05
Пользователь №: 8 357



UP!!
Go to the top of the page
 
+Quote Post
Roma_te
сообщение Jan 11 2006, 19:12
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 123
Регистрация: 13-12-05
Из: Украина, Тернополь
Пользователь №: 12 161



Цитата(Regbist @ Dec 29 2005, 14:44) *
написал обработчик прерывания по com порту для микроконтроллера (DS80c400) в кейле,но при компиляции проекта прроисходит наложение адресов. #memory space overlap from c:400023h to c:400027h#. как мне избавиться от этого?
ещё такие особенности заметил при эксперименте с этим делом smile.gif
если для етого контроллера компилировать проект для его пошагового исполния в эмуляторе кейловском, то всё нормально компилируется, если же подгружать файл startup.a51(необходииый для загрузки в железо), то как раз происходит вышеуказанная путаница....


Попробуй подгружать не startup.a51 а start390.a51 из ...Keil\C51\EXAMPLES\Dallas 390\C (я прицел его к етому сообщению)

Извиняюсь, почемуто файл с расширением A51 не цепляется (смотри предыдущее сообщение). Поетому пришлось переименовать в ТХТ (смотри атачмент).
Прикрепленные файлы
Прикрепленный файл  START390.TXT ( 7.12 килобайт ) Кол-во скачиваний: 142
 
Go to the top of the page
 
+Quote Post
Regbist
сообщение Jan 26 2006, 19:40
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 8-09-05
Пользователь №: 8 357



я подгружал файл startup400.a51 и startup390.a51 ошибка такая же sad.gif(( может в настройках Keila надо сделать что то ? пока разбираюсь с файлом startup400.a51, может там кроется истина smile.gif
Go to the top of the page
 
+Quote Post
Roma_te
сообщение Jan 26 2006, 20:32
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 123
Регистрация: 13-12-05
Из: Украина, Тернополь
Пользователь №: 12 161



Цитата(Regbist @ Jan 26 2006, 23:40) *
я подгружал файл startup400.a51 и startup390.a51 ошибка такая же sad.gif(( может в настройках Keila надо сделать что то ? пока разбираюсь с файлом startup400.a51, может там кроется истина smile.gif

Выложи здесь обработчик прерываний, может с ним чтото не так.
Попробуй в startup400.a51 отключить ненужные опции (следуй операторам IF ELSE) и рано или позно найдеш что тебе мешает (хотя я лично не вижу что ето может быть).
Go to the top of the page
 
+Quote Post
alm_
сообщение Feb 16 2006, 08:43
Сообщение #27


Участник
*

Группа: Свой
Сообщений: 25
Регистрация: 2-02-06
Пользователь №: 13 904



Адрес code:27h - это адрес вектора прерывания serial0. Очевидно у тебя два обработчика прерывания на этот порт (interrupt 4)

Но самое главное - бросай этот процесоор. Он не приспособлен для написания больших программ (с размером кода больне 64К) - просто не хватает сегмена data для автоматических переменных (туда помещаются аргументы функций и переменные внутри функция). Те, кто используют для этих целей сегмент xdata/hdata - извращенцы. И прочих дыр там полно - загрузчик, таймеры, выборка периферии.

Для проектов с размером коа меньше 64К Используй AVRMega, для большего - ARM7
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.03584 секунд с 7
ELECTRONIX ©2004-2016