1

ヘッダー ファイルに次のコードがあります。

#ifndef BUFFER_H
#define BUFFER_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct c_buff
{
    void *buffer;     // data buffer
    void *buffer_end; // end of data buffer
    size_t capacity;  // maximum number of items in the buffer
    size_t count;     // number of items in the buffer
    size_t sz;        // size of each item in the buffer
    void *head;       // pointer to head
    void *tail;       // pointer to tail
};

void cb_init(c_buff *cb, size_t capacity, size_t sz)
{
    cb->buffer = malloc(capacity * sz);
    if(cb->buffer == NULL) {
        // handle error
    }
    cb->buffer_end = (char *)cb->buffer + capacity * sz;
    cb->capacity = capacity;
    cb->count = 0;
    cb->sz = sz;
    cb->head = cb->buffer;
    cb->tail = cb->buffer;
}
#endif

そして、次のcファイル

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <common.h>
#include <usart.h>
#include <buffer.h>

struct c_buff usart_buffer;
struct c_buff *usart_buffer_ptr;

cb_init(usart_buffer_ptr, USART_BUFFER_SIZE, sizeof(char));

void initUSART(void) {
    SETBIT(UCSR0A, UDRE0);
    //SETBIT(UCSR0A, U2X0);
    SETBIT(UCSR0C, UCSZ01);
    SETBIT(UCSR0C, UCSZ00);

    UBRR0 = 25;

    SETBIT(UCSR0B, RXCIE0);
    SETBIT(UCSR0B, TXCIE0);
    SETBIT(UCSR0B, RXEN0);
    SETBIT(UCSR0B, TXEN0);
}

ISR(USART_RX_vect) {
    char data;
    data = UDR0;
    UDR0 = data;
}

ISR(USART_TX_vect) {

}

これをコンパイルしようとすると、次の行を指すエラーが発生します。

cb_init(usart_buffer_ptr, USART_BUFFER_SIZE, sizeof(char));

そして、「エラー:数値定数の前に ')' が必要です」とだけ表示されます。

Google によると、これはある種のプリプロセッサ エラーです。しかし、どうしてそうなるのかわかりません。

私はCに慣れていないので、それがまったく明白なことであれば申し訳ありません。

4

3 に答える 3

4

最上位でネイキッド関数呼び出しを行うことはできません。

cb_init(usart_buffer_ptr, USART_BUFFER_SIZE, sizeof(char));

ネイキッド関数呼び出しです。それを内側に移動しますmain()

于 2012-04-27T18:07:13.097 に答える
3

関数をグローバル スコープで実行することはできません。メインで行う必要があります:

int main(int argc, char *argv[] {
cb_init(usart_buffer_ptr, USART_BUFFER_SIZE, sizeof(char));
}
于 2012-04-27T18:07:18.780 に答える
2

問題は、ファイル レベルでメソッドを実行しようとしていることです。

cb_init(usart_buffer_ptr, USART_BUFFER_SIZE, sizeof(char));

C 言語では、実際に実行されるステートメントではなく、このレベルでの宣言/定義のみが許可されます。この呼び出しは、関数定義に移動する必要があります。

于 2012-04-27T18:07:51.807 に答える