|
__raw прерывания |
|
|
|
Jun 13 2007, 09:50
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата(Сергей Борщ @ Jun 13 2007, 11:07)  Подозреваю, что не включили заголовочный файл, в котором находится объявление функции __indirect_jump_to(). Изучайте, чем вызов функции отличается от ее объявления и чем объявление функции отличается от ее определения. Оказалось проще, надо комп перегрузить. Цитата(Rst7 @ Jun 13 2007, 12:12)  Делаю так обычно, ужос конечно, но что поделать: Супер!!! То что надо!!!!!!!! Огромное СПАСИБО!!!
|
|
|
|
|
Jun 13 2007, 19:24
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата(IgorKossak @ Jun 13 2007, 22:21)  Не понятно, разве Rst7 не по ИАРу ответил или не на "чистом" С? И как Вы собираетесь от ИАРа ответ получить? По моему они отвечают только зарегистрированным пользователям и на запросы, адресованные именно к ним по почте (здесь они врядли идеи черпают  ). Я на С новичок, но мне кажется что ((void (*) (void deceit_int)(); это "чистый С" хотя и не катит в CAVR А С иаром  "голь на выдумки хитра" Чай то-же на географическом говорят  . Ответят.
Сообщение отредактировал Т.Достоевский - Jun 13 2007, 19:35
|
|
|
|
|
Jun 13 2007, 20:20
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Извините, что я вмешиваюсь в столь лихо закрученную тему. Но если у Вас дрожание происходит из-за другого прерывания (по ADC), то я Вам предложу несколько, на мой взгляд более простых решений. И именно в рамках IAR. Попробуйте их сделать. 1) Самое простое и возможно эффективное. Во всяком случае Вам не придётся ломать программу. Первой командой прерывания ADC введите __enable_interrupt(); 2) По скольку динамическая индикация - вещь явно периодическая, а АЦП Вы явно вызываете по таймеру или привязываете его ко времени другим способом, то выкиньте вообще прерывание по ADC. Работайте следующим образом. В начале прерывания динамической индикации - считываете предыдущее значение АЦП. В конце меняете канал и запускаете следующее измерение. Если время опроса АЦП у вас меньше времени регенерации - то вызывайте регенерацию по N-ному прерыванию от АЦП. Можно и ещё предложений много сделать. Главное, чтобы моя мысль до Вас дошла. За всю жизнь мне не разу не приходилось делать прерывание от АЦП. Сложно даже представить себе ситуацию когда это нужно. Как и прерывание от SPI передачи. Малоэффективно. Потери на обработку прерывания велики по сравнению с ожиданием результата. Рекомендую применять синхронное чтение, когда результат - гарантировано будет получен. Извиняюсь, если я не правильно оценил задачу и ответил не на Ваши вопросы.
|
|
|
|
|
Jun 13 2007, 21:04
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата(SasaVitebsk @ Jun 14 2007, 00:20)  Извините, что я вмешиваюсь в столь лихо закрученную тему. Но если у Вас дрожание происходит из-за другого прерывания (по ADC), то я Вам предложу несколько, на мой взгляд более простых решений. И именно в рамках IAR. Попробуйте их сделать. Всё что Вы говорите совершенно верно. Для меня "дрожание" индикатора это частный случай изучения тонких моментов языка С и конкретных сред разработки. К сожалению тех. документация на среды разработки оставляет желать много лудшего. Зачастую изучить систему команд нового микроконтроллера бывает значительно проще, чем написать пустую функцию main() во вновь изучаемой среде. По этому опыт людей столкнувшихся с подобными проблемами трудно переоценить. А отсутствие упоминания о действуещем модификаторе __raw наводит на мысль о наличии других недокументированных модификаторов, дающих возможность получить, желаемый в данном случае результат. Со своей точки зрения могу сказать, отсутствие таких возможностей в IAR сильно снижает его привлекательность для малых микроконтроллеров, таких как обсуждаемый нами mega88. Со своей стороны приложу все усилия для того, что бы получить разяснения по недосказанным, и поверхностно описанным моментам в описании IAR С компилятора.
|
|
|
|
|
Jun 14 2007, 17:44
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
В этом смысле платформы для микропроцессоров даже лучше чем аналогичные для PC. Некоторых вещей совершенно не упоминается, к примеру, в DELFI, хотя это совершенно не мешает их использовать. Если конечно знаешь что они есть!  Но в этом как раз и вопрос! Поэтому как бы не хвалили родную документацию, хорошая книга на русском языке от знающего автора и умеющего донести свои знания, - безусловно лучше. Только вот где эти авторы в области МК? К сожалению их практически нет и выбирать не из чего. Приведу пример для DELFI. Использую процедуру BitBlt(Image1.Canvas.Handle,0,0,Image1.Width,Image1.Height,BackGnd2.Canvas.Handl e,0,0,SRCCOPY); Появилась ещё в DELFI5. Подсмотрел у Стива Тейксейры и Ксавье Паченко http://www.libex.ru/detail/book66580.html. Великолепная книга, ставшая для меня настольной с совершенно отличным изложением. В хелпе DELFI 7 упоминания о ф-ции не нашёл. Но прекрасно работает. И такие примеры - на каждом углу в области программирования на PC. Думаю лет ч/з 20 появится хорошие книги по IAR, правда будут ли они кому нужны??? При том при всём - не отчаивайтесь. Я например недавно пытался переписать одну маленькую процедуру, которая вызывается огромное число раз, в IAR C на ассемблер. При этом следует признать, что на ассемблере я писал длительное время. Так вот при том что конкретные единичные операции удаётся написать эффективней, компилятор красивей работает с переменными. И выигрыш в результате получился плёвый, по сравнению с более грамотной Си программой. Так что я оставил Си текст, просто оптимизировал его. Вот и получается что знание ассемблера помогает красивее написать Си процедуру. Потому, что ты заранее предполагаешь как компилятор будет поступать. А следовательно - чем лучше ты знаешь компилятор - тем эффективней будут программы. Надо отходить от асемблера.
|
|
|
|
|
Jun 14 2007, 21:39
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
Цитата(IgorKossak @ Jun 15 2007, 01:04)  Вот и славненько! На этой мажорной ноте предлагаю Т.Достоевскому, как автору, закрыть тему. Если, конечно, добавить по теме больше нечего или спросить. Есть! А как её закрыть? Закрывайте!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|