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(); //系统计时
}
挑错
在你提供的代码中,有几个潜在的问题和改进建议:
- 未定义的符号:
Sys_init()
,usb_init()
,Timer0_Init()
,Timer1_Init()
,Uart2_Init
,usb_OUT_done()
,Task_Pro_Handler_Callback()
,Task_Marks_Handler_Callback()
这些函数在代码中被调用,但没有提供它们的定义或声明。确保这些函数在其他地方正确定义。
- 未初始化的变量:
DeviceState
和bUsbOutReady
在使用前没有被初始化。确保在使用这些变量之前给它们赋初值。
- 注释掉的代码:
- 代码中有很多被注释掉的行。如果这些代码不再需要,最好将其删除以提高代码的可读性。如果将来可能需要,可以使用版本控制系统来管理代码的变化。
- 宏定义:
#define
没有在代码中显示,但是使用了如DEVSTATE_CONFIGURED
这样的宏。确保所有使用的宏都已经正确定义。
- 中断服务例程:
Timer0_Isr
被声明为中断服务例程,但是没有使用正确的属性来标记它。在某些编译器中,你可能需要使用特定的关键字或属性来声明中断服务例程。
- 串口初始化:
Uart2_Init;
这行代码看起来像是函数调用,但是缺少了括号。应该是Uart2_Init();
。
- 全局变量:
USER_DEVICEDESC
,USER_PRODUCTDESC
被声明为全局变量,但是没有初始化。如果这些变量需要在程序中使用,应该给它们分配内存并初始化。
- 延时函数:
Delay3000ms
函数使用了硬编码的延时值,这可能不是最佳实践。考虑使用定时器来实现更精确的延时。
- 注释:
- 注释
//@24.000MHz
应该更详细地解释为什么选择这个特定的延时值。
- 代码风格:
- 代码中的注释和代码风格不一致。保持一致的代码风格可以提高代码的可读性。
修改后的代码示例(仅针对上述提到的一些问题):
#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();
}
// ... 其他函数定义 ...
请注意,这只是一个示例,你需要根据实际的硬件平台和编译器来调整代码。