【问题标题】:Atmel Studio: Returning a register which contains an arrayAtmel Studio:返回一个包含数组的寄存器
【发布时间】:2020-04-01 18:14:52
【问题描述】:

我正在 Atmel Studio 中为 Arduino 编写一个项目。 在我的代码中,我有两个如下所示的函数:

unsigned char* USART_Receive(void){
    while(!(UCSR0A & (1<<RXC0)) );
    return UDR0;
}

void Transmit(){
        unsigned char *a = USART_Receive();

        unsigned char pckaffe[4] = { 0x0C, 0x0A, 0x0F, 0x0E };
        unsigned char pcpersienner[4] = { 0x0B, 0x0B, 0x0B, 0x0B }; 

        if(a == pckaffe && zeroCrossCounter() == 1){
            sendBurst();
        }
}

如果一切正常,UDR0 寄存器应该包含一个具有 4 个索引的数组 (array[4]),因此要在寄存器中返回数组,我使用了指针。但是,我在return UDR0 收到以下错误:

Error invalid conversion from 'uint8_t {aka unsigned char}' to 'unsigned char*' [-fpermissive]

编辑:

亚当·斯特普尼亚克:

uint8_t varrr = 0;

unsigned char* USART_Receive(void){
    while(!(UCSR0A & (1<<RXC0)) );
    varrr = UDR0;
    return &varrr;
}

【问题讨论】:

  • UDR0的类型是什么?
  • @AdamStepniak 我不确定,因为数据表中没有提及。但是,编译器会在错误行显示'uint8_t {aka unsigned char}'。那么也许它可能是一个无符号字符。

标签: c++ arrays pointers return atmelstudio


【解决方案1】:

说它修复了你的整个代码完全断章取义,但如果你愿意的话:

#include <cstdint>

uint8_t varaible = 0;

unsigned char* USART_Receive(void){
    return varaible;
}

void Transmit(){
        unsigned char *a = USART_Receive();
}

int main(){
    Transmit();
}

将得到:

In function 'unsigned char* USART_Receive()':
6:12: error: invalid conversion from 'uint8_t {aka unsigned char}' to 'unsigned char*' [-fpermissive]
 In function 'void Transmit()':
10:24: warning: unused variable 'a' [-Wunused-variable]

要解决这个问题,只需返回变量的地址:

#include <cstdint>

uint8_t varaible = 0;

unsigned char* USART_Receive(void){
    return &varaible;
}

void Transmit(){
        unsigned char *a = USART_Receive();
}

int main(){
    Transmit();
}

【讨论】:

  • 我改变了主意,我想返回一个字符而不是一个无符号字符。我怎么能做到这一点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多