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

 
 
 
Reply to this topicStart new topic
> Как в IAR обЪявить массив указателей на функцию
shasik
сообщение Jun 28 2006, 20:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188



Я попробовал IAR пишет, что не может создать массив функций, а добавишь еще одну *звездочку, пару скобочек пишет, что отсутствует имя типа. Чето я запутался.

А может и заодно посоветуете более элегентный способ решения. Ситуация следуящая: имеем 40-50 команд (или функций, соответсвующих этим командам), необходимо выполнить команду по ее по номеру. Простой swith c case'ами - слишком медленно. Использовал swith с __even_in_range, а номер команды просто сдвигал на один разряд влево. Работало гораздо быстрее. Но! Сказали, что номера команд - 0..255. И если умножить на два - вываливаемся за unsigned char и even_in_range уже не подходит. Я решил создать массив из 256 указателей на функцию. Если команда не определена, то соответсвующий указатель ссылается на функцию-заглушку. Это теория, практики пока нет. К тому же у меня есть такое смутное чувство, что я китайский пионер и сам себе создаю трудности. Может кто научить програмить красиво.
Go to the top of the page
 
+Quote Post
diper
сообщение Jun 28 2006, 21:10
Сообщение #2


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

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



Если фукций много, то с массивом - оптимальный вариант.
Ну вот так например можно объявить
Код

typedef void (*FUNC_PTR) (void);

FUNC_PTR ProcessingPorinters[10];

void aaa (void){
//...
}
void bbb (void){
//...
}

void main( void )
{
  ProcessingPorinters[0] = aaa;
  ProcessingPorinters[1] = bbb;

  ProcessingPorinters[0](); //exec aaa
  ProcessingPorinters[1](); //exec bbb

}

Объявить можно и без typedef, но с ним имхо удобнее...
Код
void(*ProcessingPorinters[10])(void);

Но это скорее вопрос по С, нежели по msp и iar.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 15 2006, 08:52
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Я тоже использую этот принцип, но...
Последние версии компилятора IAR формируют массив функций самостоятельно в случае написания SWITCH. Так что больше доверяйте компилятору.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Aug 9 2006, 14:47
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Dog Pawlowa @ Jul 15 2006, 11:52) *
Я тоже использую этот принцип, но...
Последние версии компилятора IAR формируют массив функций самостоятельно в случае написания SWITCH. Так что больше доверяйте компилятору.

Компилятору то можно доверять, но на мой взгляд использование switch в подобных случаях не элегантно, т. к. вместо вызова функции по её номеру\индексу предполагает выбор (а в худшем случае - перебор).
Go to the top of the page
 
+Quote Post

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

 


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


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