Перейти к содержанию
    

__raw прерывания

Подозреваю, что не включили заголовочный файл, в котором находится объявление функции __indirect_jump_to(). Изучайте, чем вызов функции отличается от ее объявления и чем объявление функции отличается от ее определения.

Оказалось проще, надо комп перегрузить.

 

Делаю так обычно, ужос конечно, но что поделать:

Супер!!! То что надо!!!!!!!! Огромное СПАСИБО!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Супер!!! То что надо!!!!!!!! Огромное СПАСИБО!!!

Так у Вас получилось что хотели в итоге или просто понравилось?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так у Вас получилось что хотели в итоге или просто понравилось?

И понравилось и получилось. Особенно то что я не один работаю с реалтайм. Использовал раньше ijmp z, прямо на "фиктивный" вектор, теперь можно средствами "чистого С". Хотя странно почему такого в иаре нет . Подождём что иар ответит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...Хотя странно почему такого в иаре нет . Подождём что иар ответит.

Не понятно, разве Rst7 не по ИАРу ответил или не на "чистом" С?

И как Вы собираетесь от ИАРа ответ получить? По моему они отвечают только зарегистрированным пользователям и на запросы, адресованные именно к ним по почте (здесь они врядли идеи черпают B) ).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понятно, разве Rst7 не по ИАРу ответил или не на "чистом" С?

И как Вы собираетесь от ИАРа ответ получить? По моему они отвечают только зарегистрированным пользователям и на запросы, адресованные именно к ним по почте (здесь они врядли идеи черпают B) ).

Я на С новичок, но мне кажется что ((void (*) (void deceit_int)(); это "чистый С" хотя и не катит в CAVR

 

А С иаром ;) "голь на выдумки хитра" Чай то-же на географическом говорят :beer: . Ответят.

Изменено пользователем Т.Достоевский

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, что я вмешиваюсь в столь лихо закрученную тему. Но если у Вас дрожание происходит из-за другого прерывания (по ADC), то я Вам предложу несколько, на мой взгляд более простых решений. И именно в рамках IAR. Попробуйте их сделать.

 

1) Самое простое и возможно эффективное. Во всяком случае Вам не придётся ломать программу.

Первой командой прерывания ADC введите __enable_interrupt();

 

2) По скольку динамическая индикация - вещь явно периодическая, а АЦП Вы явно вызываете по таймеру или привязываете его ко времени другим способом, то выкиньте вообще прерывание по ADC. Работайте следующим образом.

В начале прерывания динамической индикации - считываете предыдущее значение АЦП. В конце меняете канал и запускаете следующее измерение.

Если время опроса АЦП у вас меньше времени регенерации - то вызывайте регенерацию по N-ному прерыванию от АЦП.

 

 

Можно и ещё предложений много сделать. Главное, чтобы моя мысль до Вас дошла. За всю жизнь мне не разу не приходилось делать прерывание от АЦП. Сложно даже представить себе ситуацию когда это нужно. Как и прерывание от SPI передачи. Малоэффективно. Потери на обработку прерывания велики по сравнению с ожиданием результата. Рекомендую применять синхронное чтение, когда результат - гарантировано будет получен.

 

 

Извиняюсь, если я не правильно оценил задачу и ответил не на Ваши вопросы. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, что я вмешиваюсь в столь лихо закрученную тему. Но если у Вас дрожание происходит из-за другого прерывания (по ADC), то я Вам предложу несколько, на мой взгляд более простых решений. И именно в рамках IAR. Попробуйте их сделать.

Всё что Вы говорите совершенно верно. Для меня "дрожание" индикатора это частный случай изучения тонких моментов языка С и конкретных сред разработки. К сожалению тех. документация на среды разработки оставляет желать много лудшего. Зачастую изучить систему команд нового микроконтроллера бывает значительно проще, чем написать пустую функцию main() во вновь изучаемой среде. По этому опыт людей столкнувшихся с подобными проблемами трудно переоценить. А отсутствие упоминания о действуещем модификаторе __raw наводит на мысль о наличии других недокументированных модификаторов, дающих возможность получить, желаемый в данном случае результат.

Со своей точки зрения могу сказать, отсутствие таких возможностей в IAR сильно снижает его привлекательность для малых микроконтроллеров, таких как обсуждаемый нами mega88.

Со своей стороны приложу все усилия для того, что бы получить разяснения по недосказанным, и поверхностно описанным моментам в описании IAR С компилятора. :maniac:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про недокументированные модификаторы для AVR поищите на форуме слова __x, __z, __x_z, __z_x - тоже понравится ;)

 

добавлено позже: Ах пардон, оказывается, они уже упоминаются в доке на 4.30... Пойду погляжу в exe-файл, может еще чего интересного появилось ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этом смысле платформы для микропроцессоров даже лучше чем аналогичные для 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 на ассемблер. При этом следует признать, что на ассемблере я писал длительное время. Так вот при том что конкретные единичные операции удаётся написать эффективней, компилятор красивей работает с переменными. И выигрыш в результате получился плёвый, по сравнению с более грамотной Си программой. Так что я оставил Си текст, просто оптимизировал его. Вот и получается что знание ассемблера помогает красивее написать Си процедуру. Потому, что ты заранее предполагаешь как компилятор будет поступать. А следовательно - чем лучше ты знаешь компилятор - тем эффективней будут программы. Надо отходить от асемблера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... Вот и получается что знание ассемблера помогает красивее написать Си процедуру. Потому, что ты заранее предполагаешь как компилятор будет поступать. А следовательно - чем лучше ты знаешь компилятор - тем эффективней будут программы....

Тут не помешало бы вспомнить ув. Bill'a. Он, хотя и покинул эмбеддерское интернетовское сообщество сейчас, сумел раньше посеять хорошие семена, которые дали достойные всходы :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и получается что знание ассемблера помогает красивее написать Си процедуру. Потому, что ты заранее предполагаешь как компилятор будет поступать. А следовательно - чем лучше ты знаешь компилятор - тем эффективней будут программы. Надо отходить от асемблера.

От себя добавлю "надо отходить от асемблера" особенно в свете появления двух, и 8-и(восьми) ядерных микроконтроллеров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и славненько!

На этой мажорной ноте предлагаю Т.Достоевскому, как автору, закрыть тему. Если, конечно, добавить по теме больше нечего или спросить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот и славненько!

На этой мажорной ноте предлагаю Т.Достоевскому, как автору, закрыть тему. Если, конечно, добавить по теме больше нечего или спросить.

Есть! А как её закрыть?

Закрывайте!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...