簡體   English   中英

AVR-G ++使用C ++代碼生成錯誤

[英]avr-g++ generates errors with c++-code

我想使用avr-g ++編譯器和鏈接器來編譯我的一些cpp函數。 我從以前的項目中獲得的經驗告訴我,它肯定與newdelete 但是以某種方式可以編譯此函數而不會出錯:

void usart_controller::send_data(uint32_t * data32, size_t data32_size)
{
    size_t data_size = 4 * data32_size;
    //uint8_t * data = new uint8_t[data_size];
    uint8_t data[data_size];
    uint8_t *data_ptr = &data[0];
    for(unsigned int i = 0; i < data32_size; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            data[i*j+j] = (data32[i] << (j*8));
        }
    }
    /*usart_serial_write_packet(this->usart, *data_ptr, (size_t)(data_size * sizeof(uint8_t)));*/
    size_t len = sizeof(uint8_t)*data_size;
    while (len) {
        usart_serial_putchar(this->usart, *data_ptr);
        len--;
        data_ptr++;
    }
    //delete[] data;//Highly discouraged, because of memory leak!//Works as a charme because of C, but I don't care at the moment
}

但與new相同的功能不起作用:

void usart_controller::send_data(uint32_t * data32, size_t data32_size)
{
    size_t data_size = 4 * data32_size;
    uint8_t * data = new uint8_t[data_size];
    //uint8_t data[data_size];
    //uint8_t *data_ptr = &data[0];
    for(unsigned int i = 0; i < data32_size; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            data[i*j+j] = (data32[i] << (j*8));
        }
    }
    /*usart_serial_write_packet(this->usart, *data_ptr, (size_t)(data_size * sizeof(uint8_t)));*/
    size_t len = sizeof(uint8_t)*data_size;
    while (len) {
        usart_serial_putchar(this->usart, *data);
        len--;
        data++;
    }
    delete[] data;
}

在這里,我得到以下錯誤:

error: undefined reference to `operator new[](unsigned int)'
error: undefined reference to `operator delete[](void*)'

編譯和鏈接命令為(簡稱):

"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-g++.exe" -o PreAmp.elf <...> usart_controller.o <...> -Wl,-Map="PreAmp.map" -Wl,--start-group -Wl,-lm  -Wl,--end-group -Wl,--gc-sections -mmcu=atxmega16a4u

所以我假設我使用的是g ++-compiler而不是gcc-compiler。 但是在cpp中,不可能像上面那樣聲明一個可變長度數組。 我的錯在哪里?

我沒有看到有關所用控制器IDE(如果有)的任何信息。 但是,如果您使用的是atmel的Atmel Studio / AVR工具鏈。

他們清楚地表明,不支持新增和刪除功能,必須由用戶來實現。

這是有道理的,因為這不是桌面應用程序,而是在uC上的實現。

http://www.atmel.com/webdoc/avrlibcreferencemanual/faq_1faq_cplusplus.html

暫無
暫無

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

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