rezident (16.07.2008 21:39, просмотров: 146) ответил Сергей Борщ на "По такой жаре вообще плохо соображается :( " - это верно. Зачем передавать указатели на функции как unsigned int и unsigned long? Их надо передавать как указатели на функцию. А компилятор сам разберется, какой размер выделить под указатель. Это мои
Попробую привести пример. Это пример только для данных. Без передачи указателя на функцию в качестве параметра другой функции. Использую вот такую структуру для передачи параметров в функцию IAP.
typedef struct st_IAPparam
{ unsigned long param[3];
unsigned int result[2];
} st_IAPparam;
Прототип функции IAP
unsigned int f_IAP(unsigned int cmd, void *pntr);
Внутри функции f_IAP void-овый указатель pntr в зависимости от команды интерперетируется по-разному: не используется вообще, используется как указатель на единственную переменную или как указатель на структуру типа st_IAPparam. Вот в последнем случае у меня и непонятки возникают. Надо ли мне param[3] обязательно как unsigned long определять, для случая MSP430X, памятуя о 20-и битном указателе?
Пока склоняюсь к упрощению. Поскольку ОЗУ внутри нижнего 64кБ сегмента расположено и моя программа заведомо помещается в этот же сегмент, то нет смысла мутить 20-и битные указатели на данные. Проще выбрать в опциях проекта модель памяти для данных small и не морочиться с ними, работая как с обычными 16-и битными указателями. Ну и с указателями на функции тоже понятно. Компилятор сам выделит 32 бита без напоминаний. Мне, при передаче указателя на функцию, естественно тоже нужно unsigned long для него выделять.