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

 
 
> Прототип обработчика прерывания, попробовал воспользоваться --require_prototypes
aspID
сообщение May 23 2012, 07:51
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Решил попробовать воспользоваться параметром --require_prototypes и понял, что не знаю, как правильно работать с обработчиками прерываний.

Что должно выноситься в заголовочный файл, а что быть только в .c-файле? Как правильно описать прототип функции-обработчика прерывания?

На форуме пытался найти ответ на этот вопрос, но видимо, не умею правильно его задать.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение May 24 2012, 03:25
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Прототип функции - это объявление функции перед ее вызовом, для того чтобы компилятор мог правильно проверить типы параметров и возвращаемого значения функции. Обычно записывается в *.h и подключается include'ом в начале *.c-файла в котором используется, но можно указать и явно в начале файла:
Код
#include <stdio.h>
int power(int m, int n);
/* тестирование power - функции возведения в степень */
main()
{
int i;
for (i = 0; i < 10; ++i)
printf("%d %d %d\n", i, power(2,i), power(-3,i));
return 0;
}
/* power: возводит base в п-ю степень; n >= 0 */
int power(int base, int n)
{
int i, p;
P = 1;
for (i = 1; i <= n; ++i)
p = p * base;
return p;
}


Перед функцией main можно заметить такую строку:
Код
int power(int m, int n);

Она сообщает, что power является функцией с двумя аргументами типа int, возвращающей также значение типа int. Эта декларация называется прототипом функции и обязана согласовываться по форме как с определением (заголовком) функции power, так и с любыми ее вызовами. Если определение функции отличается от ее прототипа или формы вызова, возникает ошибка.

Имена параметров согласовывать не обязательно. Вообще-то не обязательно даже указывать имена параметров в прототипе функции, поэтому предыдущий прототип можно было бы записать так:
Код
int power(int, int);

Однако хорошо выбранные имена являются своеобразной документацией к программе, так что они будут часто использоваться.


Опция компилятора --require_prototypes, заставляет в обязательном порядке всем функциям иметь прототипы, иначе он выдаст ошибку

Прототип функции прерывания - как и у всех остальных функций
Код
interrupt void dmaXmtIsr(void); /// <--- прототип функции
.......
void main (void)
{
......
}
......
interrupt void dmaXmtIsr(void)
{
......
.............
}


Подробнее - в книге Керигана/Ричи, откуда и были взяты примеры.

Сообщение отредактировал alexeyv - May 24 2012, 03:27
Go to the top of the page
 
+Quote Post
aspID
сообщение May 26 2012, 06:58
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Цитата(alexeyv @ May 24 2012, 10:25) *
Подробнее - в книге Керигана/Ричи, откуда и были взяты примеры.


За изложение матчасти, конечно, спасибо, может быть, кому-то пригодится... В принципе, о прототипах я и сам могу несколько подробнее рассказать. И --require_prototypes использовал намеренно, в общем-то. Вопрос только был несколько в другом - я не совсем понимаю, как правильно объявить прототип обработчика прерывания. fman.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:33
Рейтинг@Mail.ru


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