0
点赞
收藏
分享

微信扫一扫

Uart

include "config.h"

include "task.h"

include "io.h"

include "tim.h"

include "usart.h"

char *USER_DEVICEDESC = NULL;

char *USER_PRODUCTDESC = NULL;

char *USER_STCISPCMD = "@STCISP#";

void Delay3000ms(void) //@24.000MHz

{

unsigned long edata i;

_nop_();

_nop_();

i = 17999998UL;

while (i) i--;

}

void main(void)

{

Sys_init(); //系统初始化

usb_init(); //USB CDC 接口配置

IE2 |= 0x80; //使能USB中断

Timer0_Init(); //定时器初始化

// Init_595();

// INT1_Init(); //外部中断1初始化

// P3_IO_Init(); //IO中断初始化

// P4_IO_Init();

// TIM1_Count_Init();

Timer1_Init();

Uart2_Init; //串口2初始化

EA = 1; //IE |= 0X80;

P40 = 0;

while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置

// WDT_CONTR = 0X24;

while(1)

{

if (bUsbOutReady) //如果接收到了数据

{

//USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)

usb_OUT_done(); //

}

Task_Pro_Handler_Callback(); //执行功能函数

}

}

void Timer0_Isr(void) interrupt 1 //1MS执行一次

{

Task_Marks_Handler_Callback(); //系统计时

}

挑错

在你提供的代码中,有几个潜在的问题和改进建议:

  1. 未定义的符号
  • Sys_init(), usb_init(), Timer0_Init(), Timer1_Init(), Uart2_Init, usb_OUT_done(), Task_Pro_Handler_Callback(), Task_Marks_Handler_Callback() 这些函数在代码中被调用,但没有提供它们的定义或声明。确保这些函数在其他地方正确定义。
  1. 未初始化的变量
  • DeviceStatebUsbOutReady 在使用前没有被初始化。确保在使用这些变量之前给它们赋初值。
  1. 注释掉的代码
  • 代码中有很多被注释掉的行。如果这些代码不再需要,最好将其删除以提高代码的可读性。如果将来可能需要,可以使用版本控制系统来管理代码的变化。
  1. 宏定义
  • #define 没有在代码中显示,但是使用了如 DEVSTATE_CONFIGURED 这样的宏。确保所有使用的宏都已经正确定义。
  1. 中断服务例程
  • Timer0_Isr 被声明为中断服务例程,但是没有使用正确的属性来标记它。在某些编译器中,你可能需要使用特定的关键字或属性来声明中断服务例程。
  1. 串口初始化
  • Uart2_Init; 这行代码看起来像是函数调用,但是缺少了括号。应该是 Uart2_Init();
  1. 全局变量
  • USER_DEVICEDESC, USER_PRODUCTDESC 被声明为全局变量,但是没有初始化。如果这些变量需要在程序中使用,应该给它们分配内存并初始化。
  1. 延时函数
  • Delay3000ms 函数使用了硬编码的延时值,这可能不是最佳实践。考虑使用定时器来实现更精确的延时。
  1. 注释
  • 注释 //@24.000MHz 应该更详细地解释为什么选择这个特定的延时值。
  1. 代码风格
  • 代码中的注释和代码风格不一致。保持一致的代码风格可以提高代码的可读性。

修改后的代码示例(仅针对上述提到的一些问题):

#include "config.h"
#include "task.h"
#include "io.h"
#include "tim.h"
#include "usart.h"

// ... 其他包含和声明 ...

void Delay3000ms(void) {
    // 实现延时功能,考虑使用定时器替代硬编码延时
}

void main(void) {
    // 初始化所有必要的系统和外设
    Sys_init();
    usb_init();
    Timer0_Init();
    Timer1_Init();
    Uart2_Init(); // 添加了括号

    // ... 其他初始化代码 ...

    while (1) {
        if (bUsbOutReady) {
            usb_OUT_done();
        }
        Task_Pro_Handler_Callback();
    }
}

// 确保中断服务例程使用正确的属性声明
void Timer0_Isr(void) interrupt 1 using 1 { // 使用了using子句指定使用的中断向量表
    Task_Marks_Handler_Callback();
}

// ... 其他函数定义 ...

请注意,这只是一个示例,你需要根据实际的硬件平台和编译器来调整代码。

举报

相关推荐

0 条评论