devnir 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 (изменено) · Жалоба Собственно проблема с портированием uCOS II на ARM1176, а именно с FPU отталкивался от порта Порт от Micrium for the ARM1176JZ(F)-S Processor Использую IAR. Проблема в том что в вышеописаном порте отсутсвует работа с FPU как таковая. Пробывал брать с другого порта uCOS работу с ФПУ, но похоже что-то забываю. Делал так: 1. дописываю в os_cpu_a.s: EXPORT OS_CPU_FP_Restore OS_CPU_FP_Restore FLDMIAS R0!, {S0-S31} ; Restore the VFP registers from pblk BX LR ; Return to calling function EXPORT OS_CPU_FP_Save OS_CPU_FP_Save FSTMIAS R0!, {S0-S31} ; Save the VFP registers in pblk BX LR ; Return to calling function 2. в добавляю os_cpu_c.c void OSTaskCreateHook (OS_TCB *ptcb) { #if OS_CPU_FPU_EN > 0 INT8U err; void *pblk=(void*)1; #endif #if OS_CPU_FPU_EN > 0 if (ptcb->OSTCBOpt & OS_TASK_OPT_SAVE_FP) { pblk = malloc(33*4); if (pblk != (void *)0) { ptcb->OSTCBExtPtr = pblk; OS_CPU_FP_Save(pblk); } } #endif void OSTaskDelHook (OS_TCB *ptcb) [code]{ #if OS_CPU_FPU_EN > 0 if (ptcb->OSTCBOpt & OS_TASK_OPT_SAVE_FP) { /* See if task had FP support */ if (ptcb->OSTCBExtPtr != (void *)0) { /* Yes, OSTCBExtPtr must not be NULL */ free(ptcb->OSTCBExtPtr);//OSMemPut(OSFPPartPtr, ptcb->OSTCBExtPtr); /* Return memory block to free pool */ } } #endif void OSTaskSwHook (void) { #if OS_CPU_FPU_EN > 0 void *pblk; #endif #if OS_CPU_FPU_EN > 0 if (OSRunning == OS_TRUE) { if (OSTCBCur->OSTCBOpt & OS_TASK_OPT_SAVE_FP) { pblk = OSTCBCur->OSTCBExtPtr; if (pblk != (void *)0) { OS_CPU_FP_Save(pblk); } } } if (OSTCBHighRdy->OSTCBOpt & OS_TASK_OPT_SAVE_FP) { pblk = OSTCBHighRdy->OSTCBExtPtr; if (pblk != (void *)0) { OS_CPU_FP_Restore(pblk); } } #endif но помоему чтото забыл... так как даже простое: com_print("%lf\n", 0.1234); вызваное в любой задаче выводит: 0,00000 зато есл вызвать это же перед инициализацией оси: int main(){ uart_init(); com_print("%lf\n", 0.1234); ... ... } все работает шикарно... Может будут у кого какие идеи, или способы решения данной проблемы, посоветуйте - подскажите. Очень надо. заранее спс Изменено 17 ноября, 2010 пользователем Devnir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться