Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в IAR обЪявить массив указателей на функцию
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
shasik
Я попробовал IAR пишет, что не может создать массив функций, а добавишь еще одну *звездочку, пару скобочек пишет, что отсутствует имя типа. Чето я запутался.

А может и заодно посоветуете более элегентный способ решения. Ситуация следуящая: имеем 40-50 команд (или функций, соответсвующих этим командам), необходимо выполнить команду по ее по номеру. Простой swith c case'ами - слишком медленно. Использовал swith с __even_in_range, а номер команды просто сдвигал на один разряд влево. Работало гораздо быстрее. Но! Сказали, что номера команд - 0..255. И если умножить на два - вываливаемся за unsigned char и even_in_range уже не подходит. Я решил создать массив из 256 указателей на функцию. Если команда не определена, то соответсвующий указатель ссылается на функцию-заглушку. Это теория, практики пока нет. К тому же у меня есть такое смутное чувство, что я китайский пионер и сам себе создаю трудности. Может кто научить програмить красиво.
diper
Если фукций много, то с массивом - оптимальный вариант.
Ну вот так например можно объявить
Код

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

Компилятору то можно доверять, но на мой взгляд использование switch в подобных случаях не элегантно, т. к. вместо вызова функции по её номеру\индексу предполагает выбор (а в худшем случае - перебор).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.