公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

我正在开发一款基于 PSoC 3 的 PCB,我对遇到的错误感到非常困惑,因为从我所能看到的一切来看,我做对了——也许我错过了一些不起眼的东西?

错误:

ith_not_juith_0-1697559735486.png

我还附上了我收到的警告,因为两者涉及同一件事。 据我所知,在 main () 之前需要有一个函数原型,特别是 " CY_ISR_PROTO (UART_ISR);,但它肯定在那里。" 我不明白自己错过了什么。

完整代码粘贴在下面:


#include
p#include
#include

#define MAX_LENGT
H 20 #define START_CHAR 'A '// 将其更改为要检查的特定字符

char received_string [MAX_LENGTH];
char buffer [20];//用于保存字符串格式整数的缓冲区
int string_index = 0;int start_flag = 0;

CY_ISR (UART_ISR)
{while (uart_getrxBufferSiz
e () > 0 & & string_index MAX_LENGTH-1) {char received_char = uart_g < etChar ();if (!


start_flag 已收到_ch & & ar!= START_CHAR) {
continue; // Ignore data if the first character does not match the specific character
}
start_flag = 1;//在收到特定字符后设置 start_flag

received_string [string_index] = received_char;i
f (received_string [string_index] == '\ r')//在'\ r' 处停止接收
{received_string [string_index] = '\ 0';//null 终止字符串 start
_flag = 0;//重置下一个字符串的起始
标志 uart_putString(接收的字符串:);uart_putString 字符串(received_string);uart_putString (\ r\ n);
""

""

//解码接收到的十六进制字符串 i
f (received_string [0] == START_CHAR) {
long int decoded_value = strtol(received_string + 1, NULL, 16); // Skip the first character
UART_PutString("Decoded value: ");
sprintf(buffer, "%ld", decoded_value);
UART_PutString(buffer);
UART_PutString("\r\n");
}

string_index = 0;//重置下一次接收的字符串索引
}
else
{
string_index++;
}
}}

CY_ISR_PROTO (UART_ISR);

int main (void)
{
cyGlobalIntenable; /* 启用全局中断。 */

/* 启动 UART 组件 */ uart_Start ();u
art_c
learrxBuffer ();/* 启动 ISR */ isr_uart_Startex (UART_ISR);


for (;;)
{
//Paste system code here
}
}

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 Len,

很抱歉让你感到困惑,当我配置 UART 区块时,我在我的顶级设计中犯了一个菜鸟错误。 我忘记了 RX Interrupt 上的 ISR 组件,当我查看你提供的文件时,我没有注意到这个组件。 你的 ISR 组件是 v1.71,我的是 v1.70,所以你的 ISR 本来应该在 Top Design 中的位置,我所看到的只是一个错误对话框。 由于你的 UART 区块的其余部分与我的 UART 区块基本相同,所以 RX 上缺少的 ISR 组件甚至没有向我注册。

我真的很感激你花时间努力帮助我。

在原帖中查看解决方案

0 点赞
6 回复数
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

@ith_not_juith

我对你上面列出的代码没有问题。 未引发任何错误。

实际上,我删除了 CY_ISR_PROTO () 语句。 不需要。

附上我的项目。我选了一台 PSoC3。 您可以将其更改为其他设备。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 Len,

好的,谢谢你帮我检查一下。 我会尝试将你的项目文件加载到 Creator 中,看看我发现了什么。 我明天会回复的。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 Len,

我猜你的 PSoC Creator 版本比 4.4 高,因为我尝试了你提供的文件包,而这基本上就是所有文件加载时我得到的信息。

我尝试创建一个全新的工作空间和设计,但我遇到了一个我没想到的错误,但这让我想知道这是否可能是我遇到问题的原因。

ith_not_juith_0-1697748797617.png

你看,我最近不得不更新我的 KEIL 编译器许可证,现在找到这一小块,我真的不知道如何填写它,但我有一种奇怪的预感,如果我这样做,我的问题就会消失,我的设计会正确构建。 这是一个合理的假设,还是我离这里还有很长的路要走?

另外,我应该在哪里寻找它想要的刀具链路径?

感谢您抽出时间!

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@ith_not_juith

很抱歉延迟了。我刚刚注意到你回复了我的帖子。

当我选择"选项/项目管理/8051 工具链时,我会得到这样的结果:"

Len_CONSULTRON_1-1697974988417.png

尝试使用“DP8051 KEIL 9.51(赛普拉斯提供)”作为“默认工具链:”选择。

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

我按照你的建议做了,但我仍然收到工具链错误,这使我无法成功地在新项目上执行构建。 改用 Cypress 提供的工具链也不会影响我在处理原始项目文件时遇到的问题。

有什么想法吗? 我无法为这个项目构建和测试程序,这开始造成一些严重的延迟。 此时,直接卸载然后全新安装重试会更有意义吗?

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 Len,

很抱歉让你感到困惑,当我配置 UART 区块时,我在我的顶级设计中犯了一个菜鸟错误。 我忘记了 RX Interrupt 上的 ISR 组件,当我查看你提供的文件时,我没有注意到这个组件。 你的 ISR 组件是 v1.71,我的是 v1.70,所以你的 ISR 本来应该在 Top Design 中的位置,我所看到的只是一个错误对话框。 由于你的 UART 区块的其余部分与我的 UART 区块基本相同,所以 RX 上缺少的 ISR 组件甚至没有向我注册。

我真的很感激你花时间努力帮助我。

0 点赞