ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
125326
rezident (16.07.2008 15:57, просмотров: 13413)
Блин, опять (в третий раз) возвращаюсь к вопросу указателей в IAR при использовании кристаллов с ядром MSP430X. Кто разбирался и использовал их, поясните. Понятно, что указатели на функцию только 20-и битные. А вот указатели на данные могут быть и 16и и 20и битные в зависимости от выбранной в опциях проекта модели памяти. Причем крайне смущает вот такое
Casting a data pointer to a function pointer and vice versa is illegal.
Это цитата из раздела Pointer types EW430_CompilerReference.pdf IAR EW430 v4.10a. Как это понимать? Суть задачи в том, что я адаптирую некоторые функции, которые использовались в проекте с MSP430F148, а теперь используются в проекте с MSP430F2418. Нужно проект модифицировать так, чтобы функции можно было использовать и там и там, изменяя лишь опции проекта. Возникают вопросы: нужно ли модифицировать структуры данных с помощью которых передаются указатели или можно оставить так, как есть, в расчете на мозговитость компилятора? А если модифицировать, то как? Для указателя на функцию в первом случае нужно unsigned int использовать, а во втором unsigned long. А с данными как-то непонятно. Пробую применять аттрибуты __data16 и __data20, но компилятор ругается на то, что они не применимы к автоматическим переменным.
Error[Be009]: memory attributes not allowed on auto variables or parameters ...\MSP430_410\_LIB\drvFLASHlib.c 15
И что делать-то в такой ситуации? По такой жаре вообще плохо соображается :( Поделитесь опытом работы с указателями в проектах с кристаллами у которых ядро MSP430X, плз.