|
Microblaze InstancePtr |
|
|
|
 |
Ответов
|
May 18 2007, 09:34
|

Местный
  
Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991

|
Цитата(CodeWarrior1241 @ May 18 2007, 12:00)  Так зделайте его глобальным и все! Веди это же ваш XDevice DeviceInstance. Там где делаете declaration of structure XDevice, там и делаете declaration of the pointer...
Хотя я наверно не единственный умный, Вы наверно так уже пробовали. И не работало? Не, вы наверное единственный умный. Я с С работаю всего неделю, так что я  не совсем догоняю как это сделать. Если вас не затруднит строчечку  чиркануть про declaration of the pointer... , то я был бы неимоверно  и вам большой Спасибо!
|
|
|
|
|
May 21 2007, 09:22
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(-=Vitaly=- @ May 18 2007, 13:34)  Не, вы наверное единственный умный. Я с С работаю всего неделю, С этого и надо было начинать У Вас направильно определен этот самый InstancePtr, надо делать так: Код XSpi MY_Spi;
void InitSPI (void) { XSpi_Initialize(&MY_Spi,XPAR_OPB_SPI_0_DEVICE_ID); XSpi_Start(&MY_Spi);
...
}
|
|
|
|
|
May 21 2007, 12:57
|

Местный
  
Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991

|
Цитата(XVR @ May 21 2007, 12:22)  С этого и надо было начинать У Вас направильно определен этот самый InstancePtr, надо делать так: Код XSpi MY_Spi;
void InitSPI (void) { XSpi_Initialize(&MY_Spi,XPAR_OPB_SPI_0_DEVICE_ID); XSpi_Start(&MY_Spi);
...
} Действительно Код // Welcome to Xilinx Platform Studio SDK ! // // This is an automatically created source file to help you get started. // To add more files, navigate to File -> New -> File // You may delete this file if you want to use only other files for your project. // #include "xparameters.h" #include "xspi_l.h" //#include "xspi_i.h" #include "xspi.h" #include "stdio.h" //------------------------- Variable declarations----------------------------------- Xuint32 SPI_REG_STATUS; XSpi MY_Spi; //-------------------------Function prototypes------------------------------------ void InitSPI (void); //Initial SPI function void InitSPI (void) { Xuint32 status; XSpi_Initialize(&MY_Spi,XPAR_OPB_SPI_0_DEVICE_ID); XSpi_Start(&MY_Spi); status= XSpi_SelfTest(&MY_Spi); if(status== XST_SUCCESS){ xil_printf("Spi selftest succesful /r/n"); } if(status ==XST_REGISTER_ERROR) { xil_printf("SPI register didn't read or write correctly"); } if(status==XST_LOOPBACK_ERROR){ xil_printf("SPI loopback error has occured"); }
XSpi_SetOptions(&MY_Spi,(XSP_CR_MASTER_MODE_MASK | XSP_CR_MANUAL_SS_MASK)); } Xuint32 k,tmp_data; //--------------------------------------Main Function----------------------------------------- void main(void) { while(TRUE) { InitSPI(); xil_printf("SUCCESS"); } } //--------------------------------------------------------------------------------------------- Вроде завелось таким макаром, но надо еще по-тестировать Интересно, а почему тогда в документации везде не & a *, или я чего-то не доганяю???
|
|
|
|
|
May 22 2007, 07:30
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(-=Vitaly=- @ May 21 2007, 16:57)  Действительно
Вроде завелось таким макаром, но надо еще по-тестировать Интересно, а почему тогда в документации везде не & a *, или я чего-то не доганяю??? Все просто, функции XSpi_* хотят УКАЗАТЕЛЬ на ЭКЗЕМПЛЯР структуры XSpi, если вы создаете только указатель (XSpi* InstancePtr), то функции получают указатель, указывающий неизвестно куда (точнее указывающий на 0 адрес), поэтому вы должны создать ЭКЗЕМПЛЯР структуры (XSpi My_SPI) и передать УКАЗАТЕЛЬ на него в функции работы с SPI. Оператор '&' берет адрес от переменной (того самого ЭКЗЕМПЛЯРА структуры), который как раз и является УКАЗАТЕЛЕМ, с которым хотят работать XSpi_* функции. Что касается совета CodeWarrior1241 использовать меньше глобальных переменных, то тут он прав, а что касается идеи передавать MySpi по ЗНАЧЕНИЮ в функцию InitSPI - то тут он не прав, такая передача во первых сожрет дополнительную память (на копию структуры параметра), а во вторых не позволит работать с ней за пределами InitSPI, так как вся инициализация этой структуры останется в локальной копии - параметре и не попадет в место вызова InitSPI. В данном случае нужно или передавать указатель, объявив экземпляр структуры в месте вызова InitSPI, либо сделать эту переменную локальной в самой функции InitSPI не передавая вообще ничего (но в таком случае ВСЯ работа с MySpi должна содержаться ВНУТРИ InitSPI)
|
|
|
|
|
May 22 2007, 12:34
|
Местный
  
Группа: Свой
Сообщений: 496
Регистрация: 14-03-07
Из: In The District
Пользователь №: 26 165

|
Цитата(XVR @ May 22 2007, 03:30)  Что касается идеи передавать MySpi по ЗНАЧЕНИЮ в функцию InitSPI, такая передача во первых сожрет дополнительную память (на копию структуры параметра), а во вторых не позволит работать с ней за пределами InitSPI, так как вся инициализация этой структуры останется в локальной копии - параметре и не попадет в место вызова InitSPI. В данном случае нужно или передавать указатель, объявив экземпляр структуры в месте вызова InitSPI, либо сделать эту переменную локальной в самой функции InitSPI не передавая вообще ничего (но в таком случае ВСЯ работа с MySpi должна содержаться ВНУТРИ InitSPI) Согласен... Но предполагалось что пока -=Vitaly=- отлажевает код, работать с MySpi ему придется только внутри его отладочной функции. А потом он бы разобрался  . 2 -=Vitaly=-:
Пришлите Вашу xspi_i.h файл (?), моя приложена к этому post. Может diff сделайте с Вашим?
--------------------
In Mozilla, you keep tabs on your browser. In the USSR, your browser keeps tabs on you.
|
|
|
|
Сообщений в этой теме
-=Vitaly=- Microblaze InstancePtr May 17 2007, 03:59 -=Vitaly=- Здравствуйте, где для Микроблейзового софта взять ... May 17 2007, 11:18 CodeWarrior1241 Цитата(-=Vitaly=- @ May 17 2007, 07... May 17 2007, 12:22  -=Vitaly=- Спасибо.
Я хочу банально вручную выставлять SS си... May 17 2007, 12:41 CodeWarrior1241 Вы пользуетесь low-level function XSpi_mSetControl... May 17 2007, 16:13 -=Vitaly=- Цитата(CodeWarrior1241 @ May 17 2007, 19... May 18 2007, 05:43  CodeWarrior1241 Я возможно перестал понимать суть вопроса... point... May 18 2007, 11:38   -=Vitaly=- Хе, хе бой продолжается. Перестало компилиться нах... May 21 2007, 07:54     -=Vitaly=- Спасибо, но у меня при включении xspi_i.h отказыва... May 22 2007, 11:21      -=Vitaly=- Пока сделал так, проверил работает, правда приходи... May 22 2007, 14:32   CodeWarrior1241 ЦитатаУ Вас направильно определен этот самый Insta... May 21 2007, 12:59 CodeWarrior1241 2 -=Vitaly=-:
Я попробовал зделать EDK8.2 проект и... May 23 2007, 05:56 -=Vitaly=- Цитата(CodeWarrior1241 @ May 23 2007, 08... May 23 2007, 09:09  -=Vitaly=- Работает так как сказал CodeWarrior, но я не инклу... May 23 2007, 13:20   CodeWarrior1241 Цитата(-=Vitaly=- @ May 23 2007, 09... May 23 2007, 14:10    -=Vitaly=- Подскажите есть ли стандартная функция в EDK типа ... May 24 2007, 09:52     CodeWarrior1241 Цитата(-=Vitaly=- @ May 24 2007, 05... May 25 2007, 12:07      -=Vitaly=- Ау Jun 7 2007, 11:33       CodeWarrior1241 Цитата(-=Vitaly=- @ Jun 7 2007, 07... Jun 7 2007, 14:55 CodeWarrior1241 Цитатапочему в функцию
Код#define SLAVE_STARTING... May 24 2007, 12:40 -=Vitaly=- Цитата(CodeWarrior1241 @ May 24 2007, 15... May 24 2007, 13:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|