ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
614485 Топик полностью
__ЕВГЕНИЙ (17.08.2015 16:57, просмотров: 223) ответил aoreh на Как одно из решений, можно попытаться хранить не указатели, а целочисленное и приводить в нужном месте к указателю на ф-ию, коряво, уродски, но, может, поможет, я помню у нас были попытки такого использования, но вот результат не помню уже.
Да, почитал, механизм, конечно, описан, но все сводится к тому, что это очень сложно и компилятор сам придумывает, где и какой указатель использовать. :-) Но, все равно, дело не в указателях. Ладно, если б я просто попадал в неожиданное место при переходе, факт в том, что этого перехода просто не создается. На ассемблере это выглядит после компиляции вот так: ! if (SO->Free) 0x1538: MOVLW 0xD 0x153A: ADDWF SO, W, ACCESS 0x153C: MOVWF HParam, ACCESS 0x153E: MOVLW 0x0 0x1540: ADDWFC Result, W, ACCESS 0x1542: MOVWF 0x8, ACCESS 0x1544: MOVFF HParam, TBLPTR 0x1546: NOP 0x1548: MOVFF 0x8, TBLPTRH 0x154A: NOP 0x154C: CLRF TBLPTRU, ACCESS ! SO->Free(Handle); ! } 0x154E: BRA 0x1558 ! else ! Result = scNoMemory; 0x1550: MOVLW 0x7 0x1552: BRA 0x1556 ! } ! else ! Result = scInvalidHandle; 0x1554: MOVLW 0x2 0x1556: MOVWF Param, ACCESS ! BinarySemaphoreGive(ObjectListSemaphore); 0x1558: MOVLW 0x5 0x155A: MOVWF TBLPTR, ACCESS