- 打卡等级:偶尔看看II
- 打卡总天数:22
- 最近打卡:2026-01-02 14:48:10
已绑定手机
中级会员
- 积分
- 221
|
发表于 2025-12-24 15:32:24
|
显示全部楼层
求助帖KEY_Task为什么不能用,是溢出了吗?
关于多任务调度当中,为什么最后一点,多任务调度按键按下打印输出的版块,无法实现呢?
下面是我的代码部分,
io.h文件:
#ifndef __IO_h //只能用特定的格式
#define __IO_h
#include "task.h"
/*
C 语言编译器是按文件独立编译的(每个.c文件是一个 “编译单元”),
编译器处理 A.c 时,根本不知道 B.c 里定义了哪些函数 —— 除非你明确 “告诉它”(也就是函数声明)。
你在led.c里实现了void LED0_Blink(void);
想在main.c里调用这个函数;
如果main.c里没有看到LED0_Blink的声明,编译器编译main.c时,会认为 “这个函数未定义”,
直接报undefined reference to 'LED0_Blink'(链接阶段错误),
或implicit declaration of function 'LED0_Blink'(编译阶段警告 / 错误)。
所有的.h文件都在main.c文件里面使用
*/
//调用头文件
void LED0_Blink(void);
void LED1_Blink(void);
void LED2_Blink(void);
void KEY_Task(void); //函数声明,在主函数中调用
//声明文件
#endif
io.c文件:
#include "io.h"
#include "config.h"
u8 state1 = 0; //1 初始状态
u8 state2 = 0; //2 初始状态
u8 state3 = 0; //LED3初始状态
u16 Key_Vol = 0;
void LED0_Blink(void)
{
state1 =! state1;
P20 = state1;
}
void LED1_Blink(void)
{
state2 =! state2;
P21 = state2;
}
void LED2_Blink(void)
{
state3 =! state3;
P22 = state3;
}
void KEY_Task(void)
{
if( P32 == 0)
{
Key_Vol++;
if( Key_Vol == 5)
{
//按键按下的任务;
printf("按键单击\r\n");
}
else
{
Key_Vol = 0;
}
}
}
task.c:
static TASK_COMPONENTS Task_Comps[]=
{
////状态 计数 周期 函数
{0, 300, 300, LED0_Blink}, /* task 1 Period: 300ms */
{0, 600, 600, LED1_Blink}, /* task 1 Period: 600ms */
{0, 900, 900, LED2_Blink}, /* task 1 Period: 900ms */
{0, 10, 10, KEY_Task}, /* task 1 Period: 900ms */
/* Add new task here */
};
u8 Tasks_Max = sizeof(Task_Comps)/sizeof(Task_Comps[0]); |
|