Merge branch 'master' of http://172.30.0.1:8418/cbb/Robot_v2
This commit is contained in:
+73
-43
@@ -11,7 +11,7 @@
|
||||
|
||||
volatile u32 total_us100_counter = 0; // 总计数器,每 100 微秒增加 1
|
||||
extern u16 adc_value[7];
|
||||
extern FOC_Controller FOC;
|
||||
extern FOC_Controlroller FOC;
|
||||
extern TaskScheduler scheduler;
|
||||
extern CAN_transmiter CAN0_transmiter;
|
||||
// 添加系统运行时间计数器
|
||||
@@ -131,49 +131,79 @@ void TIMER2_IRQHandler(void) {
|
||||
}
|
||||
timer_interrupt_flag_clear(TIMER2, TIMER_INT_UP);
|
||||
|
||||
// 固定任务:每 50us 执行电机控制
|
||||
scheduler.taskFlags |= (1u << TASK_ANGLE_UPDATE) |
|
||||
(1u << TASK_VELOCITY_UPDATE) |
|
||||
(1u << TASK_MOTOR_CONTROL);
|
||||
// 每50us执行一次的操作 - 电机控制
|
||||
scheduler.taskFlags |= (1 << TASK_MOTOR_CONTROL);
|
||||
scheduler.taskFlags |=
|
||||
(1 << TASK_ANGLE_UPDATE) | (1 << TASK_VELOCITY_UPDATE);
|
||||
|
||||
// 每 100us 执行一次的任务(使用位运算替代布尔变量)
|
||||
static u32 call_counter = 0;
|
||||
call_counter++;
|
||||
|
||||
if ((call_counter & 1u) == 0u) { // 偶数次调用(每 100us)
|
||||
// 使用查找表设置 1ms 周期内的任务
|
||||
scheduler.taskFlags |= task_schedule_100us[total_us100_counter];
|
||||
|
||||
total_us100_counter++;
|
||||
if (total_us100_counter >= 10u) {
|
||||
total_us100_counter = 0;
|
||||
|
||||
// 每 1ms 执行的任务
|
||||
static u32 ms1_counter = 0;
|
||||
ms1_counter++;
|
||||
if (ms1_counter >= 10u) {
|
||||
ms1_counter = 0;
|
||||
|
||||
// 每 10ms 执行的任务
|
||||
static u32 ms10_counter = 0;
|
||||
ms10_counter++;
|
||||
if (ms10_counter >= 10u) {
|
||||
ms10_counter = 0;
|
||||
|
||||
// 每 100ms 执行的任务
|
||||
static u32 ms100_counter = 0;
|
||||
ms100_counter++;
|
||||
if (ms100_counter >= 10u) {
|
||||
ms100_counter = 0;
|
||||
// 每 1s 任务预留位置
|
||||
}
|
||||
scheduler.taskFlags |= task_schedule_100ms[ms100_counter];
|
||||
}
|
||||
scheduler.taskFlags |= task_schedule_10ms[ms10_counter];
|
||||
}
|
||||
scheduler.taskFlags |= task_schedule_1ms[ms1_counter];
|
||||
}
|
||||
}
|
||||
// 使用标志位控制,每100us执行一次其他任务
|
||||
static bool isEvenCall = false;
|
||||
isEvenCall = !isEvenCall;
|
||||
|
||||
if (isEvenCall) {
|
||||
// 每100us执行一次的操作 - 保持原有频率
|
||||
|
||||
switch (total_us100_counter) { // 每1ms执行的代码,负载均衡
|
||||
case 0: {
|
||||
scheduler.taskFlags |= (1 << TASK_MCU_TEMP_UPDATE);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
scheduler.taskFlags |= (1 << TASK_DRV_TEMP_UPDATE);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
scheduler.taskFlags |= (1 << TASK_VBUS_UPDATE);
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
scheduler.taskFlags |= (1 << TASK_CAN_TRANSMIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
total_us100_counter++;
|
||||
if (total_us100_counter > 9) {
|
||||
total_us100_counter = 0;
|
||||
// 可以添加每1ms执行的代码,无负载均衡
|
||||
static u8 ms1_counter = 0;
|
||||
|
||||
switch (ms1_counter) { // 每10ms执行的代码,负载均衡
|
||||
case 0: {
|
||||
scheduler.taskFlags |= (1 << TASK_THERMAL_CONTROL);
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
scheduler.taskFlags |= (1 << TASK_MAGNETIC_CHECK);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
ms1_counter++;
|
||||
if (ms1_counter > 9) {
|
||||
ms1_counter = 0;
|
||||
// 可以添加每10ms执行的代码,无负载均衡
|
||||
static u8 ms10_counter = 0;
|
||||
ms10_counter++;
|
||||
if (ms10_counter > 9) {
|
||||
ms10_counter = 0;
|
||||
// 可以添加每100ms执行的代码
|
||||
static u8 sec_counter = 0;
|
||||
sec_counter++;
|
||||
if (sec_counter > 9) {
|
||||
sec_counter = 0;
|
||||
// 可以添加每1s执行的代码
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user