簡體   English   中英

返回步進電機C中的Struct中的數組值

[英]Returning array values in a Struct in C for stepper motor

我試圖用兔子4000處理器旋轉步進電機。 我有一個隊列,它將保存結構,並創建了一個函數來創建需要運行4繞組步進電機的二進制位序列。 我試圖將序列從結構中的函數傳遞給生成器,生成器將使用它填充隊列。 問題是我沒有得到隊列中的預期值。 我誤解了如何從函數返回結構,或者我是否需要單獨分配數組值? 相關的代碼塊是:

typedef struct {
    char d[4];
    int  delayUs;
} mQueueEntry_t;


mQueueEntry_t setDirStep(int count0, int count1, int count2, int count3){

 mQueueEntry_t entry;

        entry.d[0] = (!((count0+1)%4));                 //1a
        entry.d[1] = (!((count1+1)%4));                 //1b
        entry.d[2] = (!((count2+1)%4));                 //2a
        entry.d[3] = (!((count3+1)%4));                 //2b

        entry.delayUs =10;
        printf("Breaking Funct with: %d,%d,%d,%d\n",entry.d[0], entry.d[1], entry.d[2], entry.d[3]);
}

// continually stuff a queue with a dedicated structure
void Producer(void* pdata){
    mQueueEntry_t entry;

    int count0 = 3;
    int count1=1;
    int count2=2;
    int count3=0;

    labQueue_t * q = (labQueue_t *) pdata;  // Note use of task data..
    printf("Hola Producer\n");
    while (1)
    {
        entry = setDirStep(count0, count1, count2, count3);
        printf("Values after funct call: %d,%d,%d,%d\n",entry.d[0], entry.d[1], entry.d[2], entry.d[3]);

        count0++;
        count1++;
        count2++;
        count3++;

        // send a copy of the element and
        switch ( labQueuePut( q, &entry) ){
        case LABQ_OK:
            printf("put %d,%d,%d,%d\n",entry.d[0], entry.d[1], entry.d[2], entry.d[3]);
            break;
        case LABQ_TIMEOUT:
            OSTimeDly(OS_TICKS_PER_SEC/10);
            break;
        case LABQ_FULL:
            OSTimeDly(OS_TICKS_PER_SEC/10);
            break;
        default:
            assert(0);
            break;
        }
        OSTimeDly(1);
      }

}

程序的屏幕輸出:

Hola消費者
Hola制片人
打破功能:1,0,0,0
函數調用后的值:235,0,24,23
收到(1a = 0:1b = 1:2a = 0:2b = 0)0
放235,0,24,23
打破功能:0,0,1,0
函數調用后的值:236,41,237,0
收到(1a = 0:1b = 0:2a = 0:2b = 1)1
放236,41,237,0

我的問題是在函數調用預期相同之后,從函數break到values的值。

你的setDirStep()沒有返回值,但是你聲明它返回mQueueEntry_t 您在此作業中閱讀的值將無效:

entry = setDirStep(count0, count1, count2, count3);

這應該顯示編譯器警告,我很驚訝它沒有。

要修復錯誤,請在setDirStep()添加必要的return語句:

return entry;

將來,請務必在打開警告的情況下進行編譯。 如果你正在使用gcc,你只需要-Wall

其余的代碼看起來還不錯

暫無
暫無

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

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