This repository has been archived on 2025-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
torsion/User/app_flow.c

84 lines
2.7 KiB
C

#include "main.h"
#include "app.h"
#include "flow.h"
#include "sys.h"
#include "delay.h"
#include "board.h"
extern __IO app_t app;
extern motor_t *motor;
extern uint8_t detect_result;
static struct flow fl_adc_inspection; // ADC
static struct flow fl_systom_inspection; // 系统
static struct flow idle_tm; // 空闲任务
static uint8_t adc_inspection(struct flow *fl)
{
FL_HEAD(fl);
for (;;)
{
detect_result = ST_DEV_NORMAL;
// 扭力
app.adc.torsion_in13.original_value = get_sensor_adc(GET_TORSION_VALUE);
app.adc.torsion_in13.calibration_value = torsion_detect();
sensor_adc[GET_TORSION_VALUE] = S2B_UINT16(app.adc.torsion_in13.original_value);
// 输入压力
app.adc.ipressure_in7.original_value = get_sensor_adc(GET_INPUT_PRESS_VALUE);
app.adc.ipressure_in7.calibration_value = pressure_detect(GET_INPUT_PRESS_VALUE);
sensor_adc[GET_INPUT_PRESS_VALUE] = S2B_UINT16(app.adc.ipressure_in7.original_value);
// 输出压力
app.adc.opressure_in9.original_value = get_sensor_adc(GET_OUTPUT_PRESS_VALUE);
app.adc.opressure_in9.calibration_value = pressure_detect(GET_OUTPUT_PRESS_VALUE);
sensor_adc[GET_OUTPUT_PRESS_VALUE] = S2B_UINT16(app.adc.opressure_in9.original_value);
// 输入流量
app.adc.iflow_in8.original_value = get_sensor_adc(GET_INPUT_FLOW_VALUE);
app.adc.iflow_in8.calibration_value = flow_detect(GET_INPUT_FLOW_VALUE);
sensor_adc[GET_INPUT_FLOW_VALUE] = S2B_UINT16(app.adc.iflow_in8.original_value);
// 输出流量
app.adc.oflow_in10.original_value = get_sensor_adc(GET_OUTPUT_FLOW_VALUE);
app.adc.oflow_in10.calibration_value = flow_detect(GET_OUTPUT_FLOW_VALUE);
sensor_adc[GET_OUTPUT_FLOW_VALUE] = S2B_UINT16(app.adc.oflow_in10.original_value);
FL_LOCK_DELAY(fl, FL_CLOCK_10MSEC); /* 延时10毫秒 */
}
FL_TAIL(fl);
}
static uint8_t systom_inspection(struct flow *fl)
{
FL_HEAD(fl);
for (;;)
{
host_rx_msg_deal();
FL_LOCK_DELAY(fl, FL_CLOCK_10MSEC); /* 延时10毫秒 */
}
FL_TAIL(fl);
}
static uint8_t idle_inspection(struct flow *fl)
{
FL_HEAD(fl);
for (;;)
{
test_process();
cpu_percent = scheduler_time_occupancy_get(1000);
FL_LOCK_DELAY(fl, FL_CLOCK_10MSEC);
}
FL_TAIL(fl);
}
void flow_start(void)
{
adc_inspection(&fl_adc_inspection); // adc检测
systom_inspection(&fl_systom_inspection); // 系统检测
idle_inspection(&idle_tm); // 空闲任务用来计算CPU占用率
}
void flow_init(void)
{
FL_INIT(&fl_adc_inspection);
FL_INIT(&fl_systom_inspection);
FL_INIT(&idle_tm);
}