在dsPIC33中从C调用的汇编函数中如何解释返回值?

时间:2019-06-21 10:42:34

标签: c assembly microcontroller microchip dspic

我刚开始使用RTSP,正在查看Microchip的RTSP示例中的汇编代码。有两个文件rtsp_api.hrtsp_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 Compiler User Guide第13.8.2节,我看到返回值保存在W0寄存器中,但是上面的代码在返回之前清除了W0寄存器。

那么代码将如何返回-1?这可能是错误,还是我对汇编的了解非常有限?

0 个答案:

没有答案