簡體   English   中英

C中的數組asm函數

[英]Array asm function in C

如何在C中返回此數組asm函數的值? 我不確定在這種情況下如何使用sprintf。

我需要在顯示中顯示數組函數之前和之后的一些值。

//*****************************************************************************
//FUNCTION: InitXa
//DESCRIPTION: array X of size N with a constant value V, using pointers:
//PARAMETERS: r0 = *X
//            r1 = Size N
//            r2 = Value V
//RETURN: None
//*****************************************************************************

// local register definitions
#define        rXA        r0        // register to hold address of X
#define        rN    r1    // register to hold value of N
#define        rV    r2    // register to hold value of V

__asm void InitXa (uint32 *X, uint32 N, uint32 V)
{
    STR rN, [rXA]     ; Store the value at first address of array.
    SUBS rV, #1       ; decrement the count 
loop
    STR rN,[rXA],#4   ; Store the value and increment the pointer
    SUBS rV,rV,#1     ; decrement the count
    BNE loop          ; branch until the count is 0
    BX lr             ; return to caller
}

C部分代碼:

uint32 X = {10, 2, 3};
uint32 N = 10;
uint32 V = 3;
uint32 result32;

sprintf (str, "%d", result32);    //  **display the first few values of the array before     initialization on the top line of the OLED.**

InitXa (X, N, V); 

sprintf (str, "%d", result32); //**Use the second line to display values after** initialization.

您似乎不熟悉如何訪問數組元素。 另外,由於沒有使用result32值,因此無需打印它。 我認為這就是您的意圖:

printf("Before calling asm function: %d, %d, %d \n", X[0], X[1], X[2]);

InitXa (X, N, V); 

printf("After calling asm function: %d, %d, %d \n", X[0], X[1], X[2]);

附注-我建議閱讀這本書: http : //www.amazon.com/The-Programming-Language-Brian-Kernighan/dp/0131101633/ref=sr_1_2? ie=UTF8&qid=1391790669&sr=8-2&keywords=k% 26r + C語言+編程+語言

寫作風格相當枯燥,但是它在30年前幫助我理解了C,並且在今天仍然有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM