Я только начал работать с RTSP и смотрел код сборки в примерах RTSP от Microchip. Есть два файла rtsp_api.h
и rtsp_api.s
. Я хотел знать, как возвращаются возвращаемые значения и как это работает.
Например, в rtsp_api.h
есть функция, которая объявлена следующим образом
/******************************************************************************
* Function: int16_t FlashPageRead(uint16_t nvmAdru, uint16_t nvmAdr, int16_t *pageBufPtr);
*
* PreCondition: None
*
* Input: nvmAdru - Selects the upper 8bits of the location to program or erase
in program flash memory
nvmAdr - Selects the location to program or erase in program flash
memory. It must be aligned to 512 instruction boundary,
LSB 10bits of address must be zero
pageBufPtr- Pointer to the data array in which read data will be stored
*
* Output: Function returns ERROREE (or -1), if it is not successful,
Function return ZERO, if successful
*
* Side Effects: None
*
* Overview: This function provides the interface to read the flash.
*****************************************************************************/
int16_t FlashPageRead( uint16_t nvmAdru, uint16_t nvmAdr, int16_t *pageBufPtr );
и его определение в rtsp_api.s
выглядит следующим образом
/******************************************************************************
Flash Page Read
Read EIGHT rows (PAGE) of memory, upper PM byte is discarded
*******************************************************************************/
_FlashPageRead:
push TBLPAG
mov w0, TBLPAG
mov #1024, w3
readNext:
tblrdl [w1],[w2++]
tblrdh [w1++],w6 ; Discard PM upper byte
dec w3, w3
bra nz, readNext
clr w0
pop TBLPAG
return
В документации кода сказано, что функция возвращает -1 при сбое.
Ссылаясь на Руководство пользователя компилятора X16 раздел 13.8.2, я увидел, что возвращаемые значения сохраняются в регистре W0, но приведенный выше код очищает регистр W0 перед возвратом.
Тогда как бы код возвращал -1? Может ли это быть ошибкой или это мои чрезвычайно ограниченные знания по сборке?