c++ - Atmel Studio:返回一个包含数组的寄存器
问题描述
我正在为 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;
}
解决方案
完全断章取义地说它修复了你的整个代码,但如果你这样做:
#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();
}
推荐阅读
- python-3.x - 使用win32.com复制excel工作表抛出Microsoft Excel复制粘贴错误
- javascript - 导入类后如何解决 SyntaxError: Unexpected token =?
- graph-databases - Gremlin:按查询从组中返回 valueMap/projected 属性
- css - 使用符号在 Shiny 中创建中心导航栏
- ionic-framework - 如何更新我的 package.json 以修复对等依赖项及其冲突?
- symfony - 如何使用 JWT symfony 4 为两个类生成令牌?
- javascript - Jest 中是否有一种直接的方法来指定要运行的测试数组/列表?
- javascript - 标题案例与算法的句子错误
- identityserver4 - 使用 .Net Core 中的 IHttpClientFactory 从 IdentityServer4 调用另一个 Web api 端点
- r - 在 R Shiny 中平滑渲染 DT 数据表