英飞凌
直播中

卢表镜

7年用户 1019经验值
私信 关注

CYW920829M2EVK-02中的文件处理命令不起作用是怎么回事?

我尝试使用 ModusToolbox 的 Eclipse IDE 在 CYW920829M2EVK-02 板上实现文件处理功能。 问题在于,即使命令没有错误且已编程。 文件处理功能未启动。 无法调试问题。 在主文件下方共享。


/*******************************************************************************
* Header Files
*******************************************************************************/
#include"cyhal.h"
#include"rtc.h"#include"cy_retarget_io.h"
#include
#include
#include
#include
#include
/*******************************************************************************
* Macros
*******************************************************************************/
// 输入数据比特大小
#define UART_BUFFER_SIZE 8
// 中断优先级
#define INT_PRIORITY 3
//最大字符长度
#define MAX_COMMAND_LENGTH 8

/*******************************************************************************
* 全局变量
*******************************************************************************/
FILE *file;
char filename[] ="ss.txt" ;
char buffer[100];

/*******************************************************************************
* Function Prototypes
*******************************************************************************/
volatile uint8_t uart_buffer[UART_BUFFER_SIZE];
/*******************************************************************************
* 函数定义
*******************************************************************************/
void file_test()
{
// 创建一个新文件
if (strncmp((const char*)uart_buffer,"filecrte", UART_BUFFER_SIZE) == 0)
{
file = fopen("D:SRIJAN_2023-24TESTkaynes.txt" 、 "w");
if (file == NULL) {
printf("Error creating file!n");
return ;
}
fprintf(file,"This is a new file.n");
fclose(file);
}
else if (strncmp((const char*)uart_buffer,"fileread", UART_BUFFER_SIZE) == 0)
{
// 打开现有文件
file = fopen(filename,"r");
if (file == NULL) {
printf("Error opening file!n");
return ;
}
// 从文件中读取
fscanf(file,"%s", buffer); // 读取一个单词
printf("Read from file: %sn", buffer);
// 移动到文件中的特定位置
fseek(file, 0, SEEK_SET); // 移动到文件的开头
// 写入文件
fprintf(file,"This text will overwrite the previous content.n");
fclose(file);
}
else if (strncmp((const char*)uart_buffer,"fileedit", UART_BUFFER_SIZE) == 0)
{
// 再次打开文件进行追加
file = fopen(filename,"a");
if (file == NULL) {
printf("Error opening file!n");
return ;
}
fputs("This text will be appended.n" 、 file);
fclose(file);
// 打开文件供读取
file = fopen(filename,"r");
if (file == NULL) {
printf("Error opening file!n");
return ;
}
// 读取文件并打印每一行
printf("Contents of the file:n");
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
fclose(file);
}
else
{
printf("Error process!rn");
}
}

void uart_event_handler(void* handler_arg, cyhal_uart_event_t event)
{
(void)handler_arg;
if ((event  CYHAL_UART_IRQ_RX_DONE) == CYHAL_UART_IRQ_RX_DONE)
{
cyhal_uart_read_async( cy_retarget_io_uart_obj, uart_buffer, UART_BUFFER_SIZE);
file_test();

return ;
}
}

/*******************************************************************************
* 函数名称:main
********************************************************************************
* 摘要:
* 这是 CPU 的主函数。
它...
* 1.
* 2.
*
* 参数:
* void
*
* 返回:
* int
* *******************************************************************************/
int main(void)
{
cy_rslt_t result;
#if defined (CY_DEVICE_SECURE)
cyhal_wdt_t wdt_obj;
/* 清除看门狗定时器,使其不会触发重置 */
result = cyhal_wdt_init( wdt_obj, cyhal_wdt_get_max_timeout_ms());
CY_ASSERT(CY_RSLT_SUCCESS == result);
cyhal_wdt_free( wdt_obj);
#endif
/* 初始化设备和电路板外设 */
result = cybsp_init();
/* 电路板启动失败。 停止程序执行 */
if (result != CY_RSLT_SUCCESS)
{
CY_ASSERT(0);
}
/* 启用全局中断 */
__enable_irq();

/* 初始化 retarget-io 以使用调试 UART 端口 */
result = cy_retarget_io_init_fc(CYBSP_DEBUG_UART_TX,
CYBSP_DEBUG_UART_RX,
CYBSP_DEBUG_UART_CTS,
CYBSP_DEBUG_UART_RTS,
CY_RETARGET_IO_BAUDRATE);
/* retarget-io 启动失败。 停止程序执行 */
if (result != CY_RSLT_SUCCESS) {
CY_ASSERT(0);
}
// UART 回调处理程序注册
if (CY_RSLT_SUCCESS == result)
{
cyhal_uart_register_callback( cy_retarget_io_uart_obj, uart_event_handler, NULL);
// 启用所需的 UART 事件
cyhal_uart_enable_event( cy_retarget_io_uart_obj,
(cyhal_uart_event_t)(CYHAL_UART_IRQ_TX_DONE |
CYHAL_UART_IRQ_TX_ERROR |
CYHAL_UART_IRQ_RX_DONE),
INT_PRIORITY, true);

// 开始异步 RX 传输
result = cyhal_uart_read_async( cy_retarget_io_uart_obj, (void*)uart_buffer, UART_BUFFER_SIZE);

}
返回结果;

for (;;)
{
}
}
/* [] 文件结尾 */

                                                                                                                                                                                                                                                                                                                                                                                                        
                                                        

回帖(1)

张波

2024-5-29 16:53:23

1. 确保文件包含正确:首先,检查您的代码中的文件包含是否正确。从您提供的代码片段来看,有一些重复和不完整的包含语句。请确保您的代码中包含正确的头文件,例如:

```c
#include "cyhal.h"
#include "rtc.h"
#include "cy_retarget_io.h"
```

2. 检查文件处理函数:确保您已经实现了文件处理功能的相关函数,例如打开、读取、写入和关闭文件等。检查这些函数是否正确编写并被正确调用。

3. 检查错误处理:在文件处理过程中,确保您已经处理了可能发生的错误。例如,当打开文件失败时,您应该检查错误代码并采取相应的措施。

4. 检查硬件连接:确保您的 CYW920829M2EVK-02 开发板已正确连接到计算机,并且所有必要的驱动程序和软件都已安装。

5. 检查调试器设置:在 Eclipse IDE 中,检查您的调试器设置是否正确。确保您选择了正确的调试器配置,并正确连接到了开发板。

6. 设置断点和单步调试:在文件处理相关的代码行上设置断点,然后使用单步调试功能逐步执行代码。这将帮助您找到可能导致问题的具体代码行。

7. 查看调试输出:在 Eclipse IDE 的调试视图中,查看调试输出以获取有关程序执行的详细信息。这可能会帮助您找到问题所在。

8. 检查 ModusToolbox 版本:确保您使用的 ModusToolbox 版本与您的开发板和项目设置兼容。如果有更新,请尝试更新 ModusToolbox。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分