diff --git a/User/device/dr16.c b/User/device/dr16.c index 1303171..85f2484 100644 --- a/User/device/dr16.c +++ b/User/device/dr16.c @@ -30,6 +30,7 @@ #define DR16_CH_VALUE_MIN (364u) #define DR16_CH_VALUE_MID (1024u) #define DR16_CH_VALUE_MAX (1684u) +//#define DR16_FRAME_SIZE (18u) // DR16数据帧固定18字节 /* USER DEFINE BEGIN */ @@ -41,25 +42,29 @@ static osThreadId_t thread_alert; static bool inited = false; -static DR16_t *dr16_instance = NULL; /* 用于空闲中断回调中访问实例 */ -static uint8_t sync_buf[32]; /* 帧同步时的丢弃缓冲区 */ /* Private function -------------------------------------------------------- */ static void DR16_RxCpltCallback(void) { osThreadFlagsSet(thread_alert, SIGNAL_DR16_RAW_REDY); } -/** - * @brief 空闲中断回调 - 用于帧同步 - * 空闲中断表示一帧传输结束(总线空闲),此时停止当前DMA接收, - * 丢弃不完整的数据,这样下一次 StartDmaRecv 就能从帧头开始。 - */ -static void DR16_IdleCallback(void) { - /* 停止当前DMA接收(无论收了多少字节) */ - HAL_UART_AbortReceive(BSP_UART_GetHandle(BSP_UART_RC)); - /* 通知任务:可以启动下一次对齐的接收了 */ - osThreadFlagsSet(thread_alert, SIGNAL_DR16_RAW_REDY); -} +//static void DR16_ErrorCallback(void) { +// UART_HandleTypeDef *huart = BSP_UART_GetHandle(BSP_UART_RC); +// +// // 清除所有错误标志(包括FIFO错误) +// __HAL_UART_CLEAR_OREFLAG(huart); +// __HAL_UART_CLEAR_NEFLAG(huart); +// __HAL_UART_CLEAR_FEFLAG(huart); +// __HAL_UART_CLEAR_PEFLAG(huart); +// +// // 清除FIFO超时标志(STM32H7特有) +// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF)) { +// __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF); +// } +// +// // 中止并清除当前DMA传输 +// HAL_UART_AbortReceive(huart); +//} static bool DR16_DataCorrupted(const DR16_t *dr16) { if (dr16 == NULL) return DEVICE_ERR_NULL; @@ -93,57 +98,47 @@ int8_t DR16_Init(DR16_t *dr16) { if (inited) return DEVICE_ERR_INITED; if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL; - dr16_instance = dr16; +// // 清零结构体 +// memset(dr16, 0, sizeof(DR16_t)); - /* 注册 DMA 接收完成回调 */ BSP_UART_RegisterCallback(BSP_UART_RC, BSP_UART_RX_CPLT_CB, DR16_RxCpltCallback); - - /* 注册空闲中断回调并使能空闲中断,用于帧同步 */ - BSP_UART_RegisterCallback(BSP_UART_RC, BSP_UART_IDLE_LINE_CB, - DR16_IdleCallback); - __HAL_UART_ENABLE_IT(BSP_UART_GetHandle(BSP_UART_RC), UART_IT_IDLE); - - /* - * 首次帧同步:启动一次丢弃式DMA接收。 - * 如果遥控器已经在发送,DMA会从帧中间开始收,空闲中断到来时 - * IdleCallback 会 Abort 这次接收并通知任务,下一次 StartDmaRecv - * 就能从完整帧头开始。 - */ - HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_RC), - sync_buf, sizeof(sync_buf)); - /* 等待空闲中断完成首次同步(最多50ms,足够等一帧) */ - osThreadFlagsWait(SIGNAL_DR16_RAW_REDY, osFlagsWaitAll, 50); +// BSP_UART_RegisterCallback(BSP_UART_RC, BSP_UART_ERROR_CB, +// DR16_ErrorCallback); inited = true; return DEVICE_OK; } int8_t DR16_Restart(void) { - UART_HandleTypeDef *huart = BSP_UART_GetHandle(BSP_UART_RC); - - /* 先终止当前DMA接收 */ - HAL_UART_AbortReceive(huart); - - /* 重置串口 */ - __HAL_UART_DISABLE(huart); - __HAL_UART_ENABLE(huart); - - /* 重新使能空闲中断 */ - __HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); - - /* 重新做帧同步:丢弃式接收,等空闲中断对齐 */ - HAL_UART_Receive_DMA(huart, sync_buf, sizeof(sync_buf)); - osThreadFlagsWait(SIGNAL_DR16_RAW_REDY, osFlagsWaitAll, 50); - + __HAL_UART_DISABLE(BSP_UART_GetHandle(BSP_UART_RC)); + __HAL_UART_ENABLE(BSP_UART_GetHandle(BSP_UART_RC)); return DEVICE_OK; } int8_t DR16_StartDmaRecv(DR16_t *dr16) { - if (HAL_UART_Receive_DMA(BSP_UART_GetHandle(BSP_UART_RC), - (uint8_t *)&(dr16->raw_data), + UART_HandleTypeDef *huart = BSP_UART_GetHandle(BSP_UART_RC); + +// // 确保之前的DMA接收已停止 +// if (huart->RxState != HAL_UART_STATE_READY) { +// HAL_UART_AbortReceive(huart); +// } +// +// // 清除所有可能的错误标志和IDLE标志 +// __HAL_UART_CLEAR_OREFLAG(huart); +// __HAL_UART_CLEAR_NEFLAG(huart); +// __HAL_UART_CLEAR_FEFLAG(huart); +// __HAL_UART_CLEAR_PEFLAG(huart); +// __HAL_UART_CLEAR_IDLEFLAG(huart); +// +// // 清除FIFO超时标志 +// if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF)) { +// __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF); +// } + + if (HAL_UART_Receive_DMA(huart, (uint8_t *)&(dr16->raw_data), sizeof(dr16->raw_data)) == HAL_OK) - return DEVICE_OK; + return DEVICE_OK; return DEVICE_ERR; } @@ -155,19 +150,17 @@ bool DR16_WaitDmaCplt(uint32_t timeout) { int8_t DR16_ParseData(DR16_t *dr16){ if (dr16 == NULL) return DEVICE_ERR_NULL; - // STM32H7 D-Cache一致性处理:使DMA接收的数据对CPU可见 - // D-Cache按32字节对齐,需要对齐处理 - uint32_t addr = (uint32_t)&(dr16->raw_data); - uint32_t size = sizeof(dr16->raw_data); - // 向下对齐到32字节边界 - uint32_t aligned_addr = addr & ~0x1FU; - // 计算对齐后的大小 - uint32_t aligned_size = ((size + (addr - aligned_addr) + 31) & ~0x1FU); - SCB_InvalidateDCache_by_Addr((uint32_t *)aligned_addr, aligned_size); +// // STM32H7 D-Cache一致性处理:使DMA接收的数据对CPU可见 +// // D-Cache按32字节对齐,需要对齐处理 +// uint32_t addr = (uint32_t)&(dr16->raw_data); +// uint32_t size = sizeof(dr16->raw_data); +// // 向下对齐到32字节边界 +// uint32_t aligned_addr = addr & ~0x1FU; +// // 计算对齐后的大小 +// uint32_t aligned_size = ((size + (addr - aligned_addr) + 31) & ~0x1FU); +// SCB_InvalidateDCache_by_Addr((uint32_t *)aligned_addr, aligned_size); if (DR16_DataCorrupted(dr16)) { - /* 数据损坏说明帧错位了,重启串口并重新同步 */ - DR16_Restart(); return DEVICE_ERR; } diff --git a/User/module/shoot.c b/User/module/shoot.c index 1c1cbe4..18f0384 100644 --- a/User/module/shoot.c +++ b/User/module/shoot.c @@ -41,7 +41,7 @@ void Task(void *argument) { /* Private typedef ---------------------------------------------------------- */ /* Private define ----------------------------------------------------------- */ #define MAX_FRIC_RPM 7000.0f -#define MAX_TRIG_RPM 4000.0f//这里可能也会影响最高发射频率,待测试 +#define MAX_TRIG_RPM 2500.0f//这里可能也会影响最高发射频率,待测试 /* 发射检测参数 */ #define SHOT_DETECT_RPM_DROP_THRESHOLD 100.0f /* 摩擦轮转速下降阈值,单位rpm */ @@ -52,7 +52,7 @@ void Task(void *argument) { /* Private variables -------------------------------------------------------- */ static bool last_firecmd; -float maxTrigrpm=4000.0f; + /* Private function -------------------------------------------------------- */ /** @@ -201,6 +201,12 @@ static int8_t Shoot_UpdateHeatControl(Shoot_t *s) if (s == NULL) { return SHOOT_ERR_NULL; } + + if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) { + s->heatcontrol.Hres = 0.0f; + s->heatcontrol.ncd = s->param->basic.shot_freq; + return SHOOT_OK; + } /* 使用融合后的热量值计算剩余热量 */ s->heatcontrol.Hres = s->heatcontrol.Hmax - s->heatcontrol.Hnow_fused; @@ -287,6 +293,10 @@ static int8_t Shoot_FuseHeatData(Shoot_t *s) if (s == NULL) { return SHOOT_ERR_NULL; } + + if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) { + return SHOOT_OK; + } /* 如果裁判系统数据有效(Hmax > 0) */ if (s->heatcontrol.Hmax > 0.0f && s->heatcontrol.Hnow >= 0.0f) { @@ -319,6 +329,11 @@ static int8_t Shoot_CalcAvailableShots(Shoot_t *s) if (s == NULL) { return SHOOT_ERR_NULL; } + + if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) { + s->heatcontrol.shots_available = UINT16_MAX; + return SHOOT_OK; + } /* 计算剩余热量 */ float heat_available = s->heatcontrol.Hmax - s->heatcontrol.Hnow_fused; @@ -346,6 +361,12 @@ static int8_t Shoot_HeatDetectionFSM(Shoot_t *s) if (s == NULL) { return SHOOT_ERR_NULL; } + + if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) { + s->heatcontrol.detectState = SHOOT_HEAT_DETECT_IDLE; + s->heatcontrol.shotDetected = false; + return SHOOT_OK; + } switch (s->heatcontrol.detectState) { case SHOOT_HEAT_DETECT_IDLE: @@ -456,7 +477,7 @@ static float Shoot_CaluFreqByHeat(Shoot_t *s) } /* 如果热量控制未启用,返回配置的射频 */ - if (!s->param->heatControl.enable) { + if (!s->param->heatControl.enable || !s->heatcontrol.ref_online) { return s->param->basic.shot_freq; } @@ -502,7 +523,7 @@ static float Shoot_CaluFreqByHeat(Shoot_t *s) */ int8_t Shoot_CaluTargetAngle(Shoot_t *s, Shoot_CMD_t *cmd) { - if (s == NULL || s->var_trig.num_toShoot == 0) { + if (s == NULL || cmd == NULL || s->var_trig.num_toShoot == 0 || s->param->basic.num_trig_tooth == 0) { return SHOOT_ERR_NULL; } @@ -513,16 +534,19 @@ int8_t Shoot_CaluTargetAngle(Shoot_t *s, Shoot_CMD_t *cmd) float actual_freq = Shoot_CaluFreqByHeat(s); /* 检查可发射弹丸数是否满足安全余量 */ - if (s->param->heatControl.enable && s->heatcontrol.shots_available <= s->param->heatControl.safe_shots) { + if (s->param->heatControl.enable && + s->heatcontrol.shots_available <= s->param->heatControl.safe_shots) { actual_freq = 0.0f; /* 禁止发弹 */ } float dt = s->timer.now - s->var_trig.time_lastShoot; float dpos; + float dpos_abs; dpos = CircleError(s->target_variable.trig_angle, s->var_trig.trig_agl, M_2PI); + dpos_abs = fabsf(dpos); /* 使用热量控制计算出的射频,而不是配置的固定射频 */ - if(actual_freq > 0.0f && dt >= 1.0f/actual_freq && cmd->firecmd && dpos<=1.0f) + if(actual_freq > 0.0f && dt >= 1.0f/actual_freq && cmd->firecmd && dpos_abs <= 1.0f) { s->var_trig.time_lastShoot=s->timer.now; CircleAdd(&s->target_variable.trig_angle, M_2PI/s->param->basic.num_trig_tooth, M_2PI); @@ -610,7 +634,7 @@ int8_t Shoot_UpdateFeedback(Shoot_t *s) s->var_trig.trig_agl = M_2PI - s->var_trig.trig_agl; } s->var_trig.fil_trig_rpm = LowPassFilter2p_Apply(&s->filter.trig.in, s->feedback.trig.feedback.rotor_speed); - s->var_trig.trig_rpm = s->feedback.trig.feedback.rotor_speed / maxTrigrpm; + s->var_trig.trig_rpm = s->feedback.trig.feedback.rotor_speed / MAX_TRIG_RPM; if(s->var_trig.trig_rpm>1.0f)s->var_trig.trig_rpm=1.0f; if(s->var_trig.trig_rpm<-1.0f)s->var_trig.trig_rpm=-1.0f; @@ -720,6 +744,7 @@ int8_t Shoot_RunningFSM(Shoot_t *s, Shoot_CMD_t *cmd) else if(last_firecmd==false&&cmd->firecmd==true) { s->running_state=SHOOT_STATE_FIRE; + s->target_variable.trig_angle = s->var_trig.trig_agl; /* 根据模式设置待发射弹数 */ switch(s->mode) { @@ -786,6 +811,7 @@ int8_t Shoot_RunningFSM(Shoot_t *s, Shoot_CMD_t *cmd) { s->running_state=SHOOT_STATE_READY; pos=s->var_trig.trig_agl; + s->target_variable.trig_angle = pos; s->var_trig.num_toShoot=0; } break; @@ -849,7 +875,10 @@ int8_t Shoot_JamDetectionFSM(Shoot_t *s, Shoot_CMD_t *cmd) /* 清空待发射弹 */ s->var_trig.num_toShoot=0; /* 修改拨弹盘目标角度 */ - s->target_variable.trig_angle = s->var_trig.trig_agl-(M_2PI/s->param->basic.num_trig_tooth); + s->target_variable.trig_angle = s->var_trig.trig_agl; + CircleAdd(&s->target_variable.trig_angle, + -(M_2PI / s->param->basic.num_trig_tooth), + M_2PI); /* 切换状态 */ s->jamdetection.fsmState = SHOOT_JAMFSM_STATE_DEAL; /* 记录处理开始时间 */ @@ -900,7 +929,7 @@ int8_t Shoot_Init(Shoot_t *s, Shoot_Params_t *param, float target_freq) KPID_MODE_CALC_D, target_freq, ¶m->pid.fric_follow); - PID_Init(&s->pid.fric_err[i], + PID_Init(&s->pid.fric_err[i], KPID_MODE_CALC_D, target_freq, ¶m->pid.fric_err); diff --git a/User/module/shoot.h b/User/module/shoot.h index c729e9e..03061ad 100644 --- a/User/module/shoot.h +++ b/User/module/shoot.h @@ -102,6 +102,7 @@ typedef struct { }Shoot_JamDetection_t; typedef struct { + bool ref_online; /* 裁判系统在线标志:在线才启用热量限制 */ /* 从裁判系统读取的常量 */ float Hmax; // 热量上限 float Hcd; // 热量冷却速度 diff --git a/User/task/ctrl_shoot.c b/User/task/ctrl_shoot.c index 504f6b2..138185e 100644 --- a/User/task/ctrl_shoot.c +++ b/User/task/ctrl_shoot.c @@ -51,10 +51,16 @@ void Task_ctrl_shoot(void *argument) { /* 消费裁判系统发射数据:在线时更新热量控制参数 */ if (shoot_ref.ref_status == REF_STATUS_RUNNING) { + shoot.heatcontrol.ref_online = true; shoot.heatcontrol.Hmax = (float)shoot_ref.robot_status.shooter_barrel_heat_limit; shoot.heatcontrol.Hcd = (float)shoot_ref.robot_status.shooter_barrel_cooling_value; shoot.heatcontrol.Hnow = (float)shoot_ref.power_heat.shooter_42mm_barrel_heat; shoot.heatcontrol.Hgen = 100.0f; /* 42mm弹丸每发产生热量 */ + } else { + shoot.heatcontrol.ref_online = false; + shoot.heatcontrol.Hmax = 0.0f; + shoot.heatcontrol.Hcd = 0.0f; + shoot.heatcontrol.Hnow = 0.0f; } Shoot_UpdateFeedback(&shoot); diff --git a/ozone/hero.jdebug.user b/ozone/hero.jdebug.user index 2442054..1ddec96 100644 --- a/ozone/hero.jdebug.user +++ b/ozone/hero.jdebug.user @@ -6,9 +6,11 @@ GraphedExpression="((((gimbal).feedback).imu).eulr).pit", Color=#e56a6f, Show=0 GraphedExpression="((((gimbal).feedback).imu).eulr).yaw", Color=#35792b, Show=0 GraphedExpression="(((ai_cmd_from_can).gimbal_t).setpoint).yaw", Color=#769dda, Show=0 GraphedExpression="(((ai_cmd_from_can).gimbal_t).setpoint).pit", Color=#b14f0d, Show=0 -GraphedExpression="((dr16).raw_data).ch_r_x", DisplayFormat=DISPLAY_FORMAT_DEC, Color=#b3c38e +GraphedExpression="((dr16).raw_data).ch_r_x", DisplayFormat=DISPLAY_FORMAT_DEC, Color=#b3c38e, Show=0 GraphedExpression="((dr16).data).ch_r_x", Color=#ab7b05, Show=0 GraphedExpression="((((gimbal).feedback).motor).pit).rotor_abs_angle", Color=#7fd3b7, Show=0 +GraphedExpression="((shoot).heatcontrol).Hnow", Color=#50328f +GraphedExpression="((shoot).heatcontrol).shots_available", DisplayFormat=DISPLAY_FORMAT_DEC, Color=#c587a5, Show=0 OpenDocument="startup_stm32h723xx.s", FilePath="D:/CUBEMX/hero/god-yuan-hero/startup_stm32h723xx.s", Line=47 OpenDocument="port.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c", Line=716 OpenDocument="tasks.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/tasks.c", Line=4104 @@ -24,7 +26,7 @@ OpenDocument="shoot.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/shoot OpenDocument="ref_main.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/ref_main.c", Line=12 OpenDocument="referee.h", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/referee.h", Line=542 OpenDocument="uart.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/bsp/uart.c", Line=108 -OpenDocument="supercap.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/device/supercap.c", Line=0 +OpenDocument="supercap.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/supercap.c", Line=15 OpenDocument="stm32h7xx_it.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Core/Src/stm32h7xx_it.c", Line=83 OpenDocument="cmsis_os2.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/cmsis_os2.c", Line=515 OpenDocument="config.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/module/config.c", Line=455 @@ -55,16 +57,16 @@ OpenDocument="atti_esti.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/task/att OpenDocument="fdcan.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/Core/Src/fdcan.c", Line=0 OpenDocument="time.c", FilePath="D:/CUBEMX/hero/god-yuan-hero/User/bsp/time.c", Line=17 OpenToolbar="Debug", Floating=0, x=0, y=0 -OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=2, w=695, h=338, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1 +OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=2, w=695, h=337, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1 OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=312, h=983, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Disassembly", DockArea=RIGHT, x=0, y=1, w=695, h=322, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Memory 1", DockArea=BOTTOM, x=0, y=0, w=462, h=491, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0xFFFF5088 -OpenWindow="Watched Data 1", DockArea=RIGHT, x=0, y=2, w=695, h=338, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 +OpenWindow="Watched Data 1", DockArea=RIGHT, x=0, y=2, w=695, h=337, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Functions", DockArea=LEFT, x=0, y=0, w=312, h=983, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Data Sampling", DockArea=BOTTOM, x=2, y=0, w=752, h=472, TabPos=0, TopOfStack=1, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0 -OpenWindow="Timeline", DockArea=BOTTOM, x=1, y=0, w=1344, h=491, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=0, CodePaneShown=0, PinCursor="Cursor Movable", TimePerDiv="5 s / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="22;138", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="1122;-69", CodeGraphLegendShown=0, CodeGraphLegendPosition="1138;0" +OpenWindow="Timeline", DockArea=BOTTOM, x=1, y=0, w=1344, h=491, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=0, CodePaneShown=0, PinCursor="Cursor Movable", TimePerDiv="5 s / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="22;108", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="1431;-69", CodeGraphLegendShown=0, CodeGraphLegendPosition="1447;0" OpenWindow="Console", DockArea=BOTTOM, x=2, y=0, w=752, h=472, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 -OpenWindow="RTOS", DockArea=RIGHT, x=0, y=0, w=695, h=321, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, Showing="" +OpenWindow="RTOS", DockArea=RIGHT, x=0, y=0, w=695, h=322, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, Showing="" SmartViewPlugin="", Page="", Toolbar="Hidden", Window="SmartView 1" TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[120;144;405] TableHeader="Functions", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Address";"Size";"#Insts";"Source"], ColWidths=[1594;104;100;100;100] @@ -72,14 +74,14 @@ TableHeader="Power Sampling", SortCol="None", SortOrder="ASCENDING", VisibleCols TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[] TableHeader="Source Files", SortCol="File", SortOrder="ASCENDING", VisibleCols=["File";"Status";"Size";"#Insts";"Path"], ColWidths=[215;100;100;100;1022] TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location";"Refresh"], ColWidths=[298;229;145;100] -TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";" ((((gimbal).feedback).imu).eulr).pit";" ((((gimbal).feedback).imu).eulr).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).pit";" ((dr16).raw_data).ch_r_x";" ((dr16).data).ch_r_x";" ((((gimbal).feedback).motor).pit).rotor_abs_angle"], ColWidths=[100;100;100;100;100;100;100;100;100] -TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[118;214;134;134;124;134;110;154;144] +TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";" ((((gimbal).feedback).imu).eulr).pit";" ((((gimbal).feedback).imu).eulr).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).yaw";" (((ai_cmd_from_can).gimbal_t).setpoint).pit";" ((dr16).raw_data).ch_r_x";" ((dr16).data).ch_r_x";" ((((gimbal).feedback).motor).pit).rotor_abs_angle";" ((shoot).heatcontrol).Hnow";" ((shoot).heatcontrol).shots_available"], ColWidths=[100;100;100;100;100;100;100;100;100;100;100] +TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[118;214;100;100;100;100;110;126;126] TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[200;100;100;340] WatchedExpression="cmd", RefreshRate=5, Window=Watched Data 1 WatchedExpression="bmi088", RefreshRate=5, Window=Watched Data 1 WatchedExpression="chassis", RefreshRate=5, Window=Watched Data 1 WatchedExpression="gimbal", RefreshRate=5, Window=Watched Data 1 -WatchedExpression="shoot", RefreshRate=5, Window=Watched Data 1 +WatchedExpression="shoot ", Window=Watched Data 1 WatchedExpression="track_cmd", RefreshRate=5, Window=Watched Data 1 WatchedExpression="track", RefreshRate=5, Window=Watched Data 1 WatchedExpression="robot_config", RefreshRate=5, Window=Watched Data 1 @@ -97,4 +99,4 @@ WatchedExpression="ai_cmd_from_can", RefreshRate=5, Window=Watched Data 1 WatchedExpression="raw_shoot", RefreshRate=5, Window=Watched Data 1 WatchedExpression="shoot_forai", RefreshRate=5, Window=Watched Data 1 WatchedExpression="dr16", RefreshRate=5, Window=Watched Data 1 -WatchedExpression="ai_cmd_from_can", RefreshRate=5, Window=Watched Data 1 \ No newline at end of file +WatchedExpression=" ", Window=Watched Data 1 \ No newline at end of file