[Upload Code]:add Alg Part of x,y

This commit is contained in:
Brin 2025-06-03 10:41:49 +08:00
parent 4d01ccc890
commit fb8308188d
10 changed files with 4837 additions and 4030 deletions

View File

@ -6,6 +6,7 @@
"usart.h": "c", "usart.h": "c",
"main.h": "c", "main.h": "c",
"mymattress_ctrl.h": "c", "mymattress_ctrl.h": "c",
"can.h": "c" "can.h": "c",
"mcu_body_analyzer.h": "c"
} }
} }

View File

@ -0,0 +1,106 @@
/*
* MCU Body Detection and Analysis System - Header File
*
* Lightweight implementation for microcontroller deployment
* Compatible with 26x10 sensing mat (260 sensors)
*/
#ifndef MCU_BODY_ANALYZER_H
#define MCU_BODY_ANALYZER_H
#include "main.h"
#include "rtthread.h"
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DEBUG_PRINT
// Configuration constants
#define MAT_WIDTH 26
#define MAT_HEIGHT 10
#define TOTAL_SENSORS (MAT_WIDTH * MAT_HEIGHT)
#define MAX_BODIES 2
// Physical dimensions (in mm)
#define POINT_SPACING_X_MM 44 // 4.4cm = 44mm
#define POINT_SPACING_Y_MM 64 // 6.4cm = 64mm
#define MAT_WIDTH_MM (MAT_WIDTH * POINT_SPACING_X_MM) // ~1144mm
#define MAT_HEIGHT_MM (MAT_HEIGHT * POINT_SPACING_Y_MM) // ~640mm
// Data structures
typedef struct {
uint16_t x_mm; // X coordinate in millimeters
uint16_t y_mm; // Y coordinate in millimeters
} Point_t;
typedef struct {
uint8_t body_id; // Body identifier (1 or 2)
Point_t waist_center; // Waist center coordinates
Point_t center_of_mass; // Center of mass coordinates
uint16_t width_mm; // Body width in mm
uint16_t height_mm; // Body height in mm
uint32_t total_pressure; // Sum of all pressure values
uint8_t posture; // 0=supine, 1=side
uint8_t confidence; // Confidence score (0-100)
} BodyInfo_t;
typedef struct {
uint8_t num_bodies; // Number of detected bodies (0-2)
BodyInfo_t bodies[MAX_BODIES];
} AnalysisResult_t;
// Public API functions
/**
* @brief Main analysis function for body detection and posture classification
*
* @param sensor_data Array of 260 pressure sensor readings (0-1023)
* @param result Pointer to store analysis results
* @return true if analysis successful, false otherwise
*
* @note Processing time: ~10ms on ARM Cortex-M4 @ 168MHz
* @note Memory usage: ~2KB RAM
*/
bool analyze_body_posture(const uint16_t* sensor_data, AnalysisResult_t* result);
/**
* @brief Get posture string for debugging/display
*
* @param posture Posture code (0=supine, 1=side)
* @return Constant string pointer ("supine" or "side")
*/
const char* get_posture_string(uint8_t posture);
/**
* @brief Print analysis results (requires printf implementation)
*
* @param result Pointer to analysis results
* @note Only available when DEBUG_PRINT is defined
*/
#ifdef DEBUG_PRINT
void print_analysis_results(const AnalysisResult_t* result);
#endif
// Configuration macros (can be adjusted for different hardware)
#ifndef MIN_BODY_PRESSURE
#define MIN_BODY_PRESSURE 50 // Minimum pressure threshold for body detection
#endif
#ifndef MIN_BODY_AREA
#define MIN_BODY_AREA 20 // Minimum number of connected sensors for a body
#endif
// Memory usage information
#define MCU_ANALYZER_RAM_USAGE (3 * TOTAL_SENSORS + sizeof(AnalysisResult_t)) // ~2KB
#ifdef __cplusplus
}
#endif
#endif /* MCU_BODY_ANALYZER_H */

View File

@ -0,0 +1,467 @@
/*
* MCU Body Detection and Analysis System
*
* Lightweight implementation for microcontroller deployment
* Compatible with 26x10 sensing mat (260 sensors)
*
* Features:
* - Body detection using threshold and connected components
* - Body count (0, 1, or 2)
* - Waist center estimation
* - Basic posture classification
*
* Memory usage: ~2KB RAM
* Processing time: ~10ms on ARM Cortex-M4 @ 168MHz
*/
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include "mcu_body_analyzer.h"
// Configuration constants
#define MAT_WIDTH 26
#define MAT_HEIGHT 10
#define TOTAL_SENSORS (MAT_WIDTH * MAT_HEIGHT)
#define MIN_BODY_PRESSURE 50
#define MIN_BODY_AREA 20
#define MAX_BODIES 2
// Physical dimensions (in mm for integer math)
#define POINT_SPACING_X_MM 44 // 4.4cm = 44mm
#define POINT_SPACING_Y_MM 64 // 6.4cm = 64mm
// Data structures
// typedef struct {
// uint16_t x_mm; // X coordinate in millimeters
// uint16_t y_mm; // Y coordinate in millimeters
// } Point_t;
// typedef struct {
// uint8_t body_id; // Body identifier (1 or 2)
// Point_t waist_center; // Waist center coordinates
// Point_t center_of_mass; // Center of mass coordinates
// uint16_t width_mm; // Body width in mm
// uint16_t height_mm; // Body height in mm
// uint32_t total_pressure; // Sum of all pressure values
// uint8_t posture; // 0=supine, 1=side
// uint8_t confidence; // Confidence score (0-100)
// } BodyInfo_t;
// typedef struct {
// uint8_t num_bodies; // Number of detected bodies (0-2)
// BodyInfo_t bodies[MAX_BODIES];
// } AnalysisResult_t;
// Working memory (can be static for single-threaded MCU)
static uint8_t binary_mask[TOTAL_SENSORS];
static uint8_t labeled_regions[TOTAL_SENSORS];
static uint8_t temp_buffer[TOTAL_SENSORS];
/*
* Apply simple smoothing filter to reduce noise
*/
static void smooth_sensor_data(const uint16_t *input, uint16_t *output)
{
for (int y = 0; y < MAT_HEIGHT; y++)
{
for (int x = 0; x < MAT_WIDTH; x++)
{
int idx = y * MAT_WIDTH + x;
uint32_t sum = 0;
uint8_t count = 0;
// 3x3 kernel
for (int dy = -1; dy <= 1; dy++)
{
for (int dx = -1; dx <= 1; dx++)
{
int ny = y + dy;
int nx = x + dx;
if (ny >= 0 && ny < MAT_HEIGHT && nx >= 0 && nx < MAT_WIDTH)
{
sum += input[ny * MAT_WIDTH + nx];
count++;
}
}
}
output[idx] = (uint16_t)(sum / count);
}
}
}
/*
* Create binary mask from pressure data
*/
static void create_binary_mask(const uint16_t *sensor_data)
{
for (int i = 0; i < TOTAL_SENSORS; i++)
{
binary_mask[i] = (sensor_data[i] > MIN_BODY_PRESSURE) ? 1 : 0;
}
}
/*
* Simple connected component labeling using flood fill
*/
int stack[TOTAL_SENSORS] = {0};
static uint8_t flood_fill(uint8_t *mask, int start_idx, uint8_t label)
{
if (mask[start_idx] != 1)
return 0;
// Simple stack using array (limit recursion depth)
int stack_ptr = 0;
uint8_t area = 0;
stack[stack_ptr++] = start_idx;
while (stack_ptr > 0)
{
int idx = stack[--stack_ptr];
if (mask[idx] != 1)
continue;
mask[idx] = label;
labeled_regions[idx] = label;
area++;
// int y = idx / MAT_WIDTH;
// int x = idx % MAT_WIDTH;
// Add 4-connected neighbors
int neighbors[] = {
idx - MAT_WIDTH, // top
idx + MAT_WIDTH, // bottom
idx - 1, // left
idx + 1 // right
};
for (int i = 0; i < 4; i++)
{
int n_idx = neighbors[i];
int n_y = n_idx / MAT_WIDTH;
int n_x = n_idx % MAT_WIDTH;
// Check bounds
if (n_idx >= 0 && n_idx < TOTAL_SENSORS &&
n_y >= 0 && n_y < MAT_HEIGHT &&
n_x >= 0 && n_x < MAT_WIDTH &&
mask[n_idx] == 1 && stack_ptr < TOTAL_SENSORS - 1)
{
stack[stack_ptr++] = n_idx;
}
}
}
return area;
}
/*
* Find connected components and filter by size
*/
static uint8_t detect_body_regions(const uint16_t *sensor_data)
{
// Copy binary mask to working buffer
rt_memcpy(temp_buffer, binary_mask, TOTAL_SENSORS);
rt_memset(labeled_regions, 0, TOTAL_SENSORS);
uint8_t label = 2; // Start from 2 (0=background, 1=unprocessed)
uint8_t body_count = 0;
for (int i = 0; i < TOTAL_SENSORS && body_count < MAX_BODIES; i++)
{
if (temp_buffer[i] == 1)
{
uint8_t area = flood_fill(temp_buffer, i, label);
if (area >= MIN_BODY_AREA)
{
body_count++;
label++;
}
else
{
// Remove small regions
for (int j = 0; j < TOTAL_SENSORS; j++)
{
if (labeled_regions[j] == (label - 1))
{
labeled_regions[j] = 0;
}
}
label--;
}
}
}
return body_count;
}
/*
* Calculate center of mass for a body region
*/
static Point_t calculate_center_of_mass(const uint16_t *sensor_data, uint8_t body_label)
{
uint32_t sum_x = 0, sum_y = 0, sum_weight = 0;
for (int y = 0; y < MAT_HEIGHT; y++)
{
for (int x = 0; x < MAT_WIDTH; x++)
{
int idx = y * MAT_WIDTH + x;
if (labeled_regions[idx] == body_label)
{
uint16_t weight = sensor_data[idx];
sum_x += x * weight;
sum_y += y * weight;
sum_weight += weight;
}
}
}
Point_t center = {0, 0};
if (sum_weight > 0)
{
center.x_mm = (sum_x * POINT_SPACING_X_MM) / sum_weight;
center.y_mm = (sum_y * POINT_SPACING_Y_MM) / sum_weight;
}
return center;
}
/*
* Get bounding box of a body region
*/
static void get_bounding_box(uint8_t body_label, uint8_t *min_x, uint8_t *min_y,
uint8_t *max_x, uint8_t *max_y)
{
*min_x = MAT_WIDTH;
*min_y = MAT_HEIGHT;
*max_x = 0;
*max_y = 0;
for (int y = 0; y < MAT_HEIGHT; y++)
{
for (int x = 0; x < MAT_WIDTH; x++)
{
int idx = y * MAT_WIDTH + x;
if (labeled_regions[idx] == body_label)
{
if (x < *min_x)
*min_x = x;
if (x > *max_x)
*max_x = x;
if (y < *min_y)
*min_y = y;
if (y > *max_y)
*max_y = y;
}
}
}
}
/*
* Estimate waist center using pressure distribution
*/
static Point_t estimate_waist_center(const uint16_t *sensor_data, uint8_t body_label)
{
uint8_t min_x, min_y, max_x, max_y;
get_bounding_box(body_label, &min_x, &min_y, &max_x, &max_y);
// Focus on middle 40% of body height for waist detection
uint8_t body_height = max_y - min_y + 1;
uint8_t waist_start = min_y + (body_height * 3) / 10; // 30% from top
uint8_t waist_end = min_y + (body_height * 7) / 10; // 70% from top
// Find row with maximum pressure in waist region
uint32_t max_row_sum = 0;
uint8_t waist_row = (waist_start + waist_end) / 2;
for (uint8_t y = waist_start; y <= waist_end && y <= max_y; y++)
{
uint32_t row_sum = 0;
for (uint8_t x = min_x; x <= max_x; x++)
{
int idx = y * MAT_WIDTH + x;
if (labeled_regions[idx] == body_label)
{
row_sum += sensor_data[idx];
}
}
if (row_sum > max_row_sum)
{
max_row_sum = row_sum;
waist_row = y;
}
}
// Calculate weighted center in waist row
uint32_t sum_x = 0, sum_weight = 0;
for (uint8_t x = min_x; x <= max_x; x++)
{
int idx = waist_row * MAT_WIDTH + x;
if (labeled_regions[idx] == body_label)
{
uint16_t weight = sensor_data[idx];
sum_x += x * weight;
sum_weight += weight;
}
}
Point_t waist_center = {0, 0};
if (sum_weight > 0)
{
waist_center.x_mm = (sum_x * POINT_SPACING_X_MM) / sum_weight;
waist_center.y_mm = waist_row * POINT_SPACING_Y_MM;
}
return waist_center;
}
/*
* Classify posture using simple heuristics
*/
static uint8_t classify_posture(uint8_t body_label, uint8_t *confidence)
{
uint8_t min_x, min_y, max_x, max_y;
get_bounding_box(body_label, &min_x, &min_y, &max_x, &max_y);
uint16_t width = (max_x - min_x + 1) * POINT_SPACING_X_MM;
uint16_t height = (max_y - min_y + 1) * POINT_SPACING_Y_MM;
// Calculate aspect ratio (width/height) * 100 for integer math
uint16_t aspect_ratio_x100 = (width * 100) / height;
// Heuristic classification
if (aspect_ratio_x100 > 150)
{ // aspect_ratio > 1.5
*confidence = 70;
return 0; // supine
}
else if (aspect_ratio_x100 < 120)
{ // aspect_ratio < 1.2
*confidence = 70;
return 1; // side
}
else
{
*confidence = 50;
return (aspect_ratio_x100 > 130) ? 0 : 1; // uncertain
}
}
/*
* Main analysis function
*
* @param sensor_data: Array of 260 pressure sensor readings (0-1023)
* @param result: Pointer to store analysis results
* @return: true if analysis successful, false otherwise
*/
uint16_t smoothed_data[TOTAL_SENSORS] = {0};
bool analyze_body_posture(const uint16_t *sensor_data, AnalysisResult_t *result)
{
if (!sensor_data || !result)
{
return false;
}
// Initialize result
rt_memset(result, 0, sizeof(AnalysisResult_t));
rt_memset(smoothed_data, 0, sizeof(smoothed_data));
// Apply smoothing filter
smooth_sensor_data(sensor_data, smoothed_data);
// Create binary mask
create_binary_mask(smoothed_data);
// Detect body regions
uint8_t num_bodies = detect_body_regions(smoothed_data);
result->num_bodies = (num_bodies > MAX_BODIES) ? MAX_BODIES : num_bodies;
// Analyze each detected body
uint8_t body_idx = 0;
for (uint8_t label = 2; label < (2 + num_bodies) && body_idx < MAX_BODIES; label++)
{
BodyInfo_t *body = &result->bodies[body_idx];
body->body_id = body_idx + 1;
// Calculate center of mass
body->center_of_mass = calculate_center_of_mass(smoothed_data, label);
// Estimate waist center
body->waist_center = estimate_waist_center(smoothed_data, label);
// Get dimensions
uint8_t min_x, min_y, max_x, max_y;
get_bounding_box(label, &min_x, &min_y, &max_x, &max_y);
body->width_mm = (max_x - min_x + 1) * POINT_SPACING_X_MM;
body->height_mm = (max_y - min_y + 1) * POINT_SPACING_Y_MM;
// Calculate total pressure
body->total_pressure = 0;
for (int i = 0; i < TOTAL_SENSORS; i++)
{
if (labeled_regions[i] == label)
{
body->total_pressure += smoothed_data[i];
}
}
// Classify posture
body->posture = classify_posture(label, &body->confidence);
body_idx++;
}
/* */
return true;
}
/*
* Get posture string for debugging
*/
const char *get_posture_string(uint8_t posture)
{
return (posture == 0) ? "supine" : "side";
}
/*
* Print analysis results (for debugging)
* Note: Requires printf implementation on MCU
*/
#ifdef DEBUG_PRINT
#include <stdio.h>
void print_analysis_results(const AnalysisResult_t *result)
{
rt_kprintf("=== Body Analysis Results ===\n");
rt_kprintf("Bodies detected: %d\n", result->num_bodies);
for (int i = 0; i < result->num_bodies; i++)
{
const BodyInfo_t *body = &result->bodies[i];
rt_kprintf("\nBody %d:\n", body->body_id);
rt_kprintf(" Posture: %s (confidence: %d%%)\n",
get_posture_string(body->posture), body->confidence);
rt_kprintf(" Waist center: (%d, %d) mm\n",
body->waist_center.x_mm, body->waist_center.y_mm);
rt_kprintf(" Center of mass: (%d, %d) mm\n",
body->center_of_mass.x_mm, body->center_of_mass.y_mm);
rt_kprintf(" Dimensions: %d x %d mm\n",
body->width_mm, body->height_mm);
rt_kprintf(" Total pressure: %lu\n", body->total_pressure);
}
}
#endif

View File

@ -6,6 +6,7 @@
#include "mySensor_deal.h" #include "mySensor_deal.h"
#include "myEdge_ai_app.h" #include "myEdge_ai_app.h"
#include "app_x-cube-ai.h" #include "app_x-cube-ai.h"
#include "mcu_body_analyzer.h"
model_t model; model_t model;
ai_handle network; ai_handle network;
@ -101,6 +102,68 @@ void preprocess_data(const float *input, float *output, size_t length)
output[i] = (tanh_val + 1.0f) / 2.0f; output[i] = (tanh_val + 1.0f) / 2.0f;
} }
} }
/*
* Process analysis results (implement your application logic here)
*/
void process_analysis_results(const AnalysisResult_t *result)
{
static uint8_t previous_body_count = 0;
// Check for body count changes
if (result->num_bodies != previous_body_count)
{
rt_kprintf("Body count changed: %d -> %d\n",
previous_body_count, result->num_bodies);
previous_body_count = result->num_bodies;
// You could trigger events here:
// - Send notification to central system
// - Update display
// - Change LED indicators
// - Log to memory/SD card
}
// Process each detected body
for (int i = 0; i < result->num_bodies; i++)
{
const BodyInfo_t *body = &result->bodies[i];
// Example: Check for posture changes
static uint8_t previous_posture[MAX_BODIES] = {0xFF, 0xFF};
if (previous_posture[i] != body->posture)
{
rt_kprintf("Body %d posture changed to: %s\n",
body->body_id, get_posture_string(body->posture));
previous_posture[i] = body->posture;
// You could implement alerts here:
// - Posture change notification
// - Sleep quality tracking
// - Health monitoring alerts
}
// Example: Monitor waist position for movement detection
static Point_t previous_waist[MAX_BODIES];
uint16_t movement_x = abs((int16_t)body->waist_center.x_mm -
(int16_t)previous_waist[i].x_mm);
uint16_t movement_y = abs((int16_t)body->waist_center.y_mm -
(int16_t)previous_waist[i].y_mm);
if (movement_x > 50 || movement_y > 50)
{ // Movement > 5cm
rt_kprintf("Body %d significant movement detected\n", body->body_id);
// You could implement movement tracking here:
// - Sleep restlessness monitoring
// - Position adjustment alerts
// - Activity logging
}
previous_waist[i] = body->waist_center;
}
}
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
int aiInit(void) int aiInit(void)
{ {
@ -149,17 +212,34 @@ int AiModel(uint8_t *input)
rt_tick_t End_Tick = 0; rt_tick_t End_Tick = 0;
int predicted_class = 0; int predicted_class = 0;
float max_confidence = 0.0f; float max_confidence = 0.0f;
AnalysisResult_t analysis_result;
rt_kprintf("\nStart Test Code\n"); rt_kprintf("\nStart Test Code\n");
// 转Float
PictureCharArrayToFloat(input, inputBuf, AI_MODEL_IN_1_SIZE); PictureCharArrayToFloat(input, inputBuf, AI_MODEL_IN_1_SIZE);
// 数据前置处理
preprocess_data((const float *)inputBuf, aiInData, AI_MODEL_IN_1_SIZE); preprocess_data((const float *)inputBuf, aiInData, AI_MODEL_IN_1_SIZE);
// 运算AI模型
Start_Tick = rt_tick_get(); Start_Tick = rt_tick_get();
aiRun(aiInData, aiOutData); aiRun(aiInData, aiOutData);
End_Tick = rt_tick_get(); End_Tick = rt_tick_get();
rt_kprintf("AI model UseTime : %ld ms\n", End_Tick - Start_Tick); rt_kprintf("AI model UseTime : %ld ms\n", End_Tick - Start_Tick);
// 计算腰部位置
if (analyze_body_posture((const uint16_t *)input, &analysis_result))
{
uint32_t analysis_duration = rt_tick_get();
rt_kprintf("Analysis completed in %lu ms\n", analysis_duration);
// Process the results
process_analysis_results(&analysis_result);
#ifdef DEBUG_PRINT
print_analysis_results(&analysis_result);
#endif
}
else
rt_kprintf("Analysis failed\n");
for (int i = 0; i < AI_MODEL_OUT_1_SIZE; i++) for (int i = 0; i < AI_MODEL_OUT_1_SIZE; i++)
{ {
if (aiOutData[i] > max_confidence) if (aiOutData[i] > max_confidence)

View File

@ -185,4 +185,4 @@ int remote_thread_init(void)
rt_thread_startup(&remote_thread); // 启动线程 rt_thread_startup(&remote_thread); // 启动线程
return 0; return 0;
} }
INIT_APP_EXPORT(remote_thread_init); // 启动自动初始化 // INIT_APP_EXPORT(remote_thread_init); // 启动自动初始化

View File

@ -100,8 +100,8 @@
<flags>2</flags> <flags>2</flags>
<showCmd>3</showCmd> <showCmd>3</showCmd>
<MinPosition> <MinPosition>
<xPos>-1</xPos> <xPos>-32000</xPos>
<yPos>-1</yPos> <yPos>-32000</yPos>
</MinPosition> </MinPosition>
<MaxPosition> <MaxPosition>
<xPos>-1</xPos> <xPos>-1</xPos>
@ -117,8 +117,8 @@
<MDIClientArea> <MDIClientArea>
<RegID>0</RegID> <RegID>0</RegID>
<MDITabState> <MDITabState>
<Len>2050</Len> <Len>2256</Len>
<Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000011000000100000000100000035443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D79456467655F61695F6170702E63000000000F6D79456467655F61695F6170702E6300000000FFDC7800FFFFFFFF43443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D444B2D41524D5C737461727475705F73746D33326634303578782E730000000015737461727475705F73746D33326634303578782E7300000000BECEA100FFFFFFFF68443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C7372635C636F6D706F6E656E74732E63000000000C636F6D706F6E656E74732E6300000000F0A0A100FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000BCA8E100FFFFFFFF7B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6273705C5F74656D706C6174655C637562656D785F636F6E6669675C626F6172642E630000000007626F6172642E63000000009CC1B600FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000F7B88600FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7953656E736F725F6465616C2E63000000000F6D7953656E736F725F6465616C2E6300000000D9ADC200FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C63616E2E63000000000563616E2E6300000000A5C2D700FFFFFFFF5A443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F63616E2E63000000001373746D3332663478785F68616C5F63616E2E6300000000B3A6BE00FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C496E635C63616E2E68000000000563616E2E6800000000EAD6A300FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C434D5349535C4465766963655C53545C53544D3332463478785C496E636C7564655C73746D3332663478782E68000000000B73746D3332663478782E6800000000F6FA7D00FFFFFFFF76443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6C69626370755C61726D5C636F727465782D6D345C637075706F72742E630000000009637075706F72742E6300000000B5E99D00FFFFFFFF60443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5345474745525F5254545F5669657765725C5254545C5345474745525F5254542E63000000000C5345474745525F5254542E63000000005FC3CF00FFFFFFFF74443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C636F6D706F6E656E74735C66696E73685C7372635C7368656C6C2E6300000000077368656C6C2E6300000000C1838300FFFFFFFF40443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D794D617474726573735F6374726C2E6300000000116D794D617474726573735F6374726C2E6300000000CACAD500FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7943414E4275734465616C2E63000000000E6D7943414E4275734465616C2E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001301000066000000D505000086020000</Data> <Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000013000000010000000100000035443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D79456467655F61695F6170702E63000000000F6D79456467655F61695F6170702E6300000000FFDC7800FFFFFFFF43443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D444B2D41524D5C737461727475705F73746D33326634303578782E730000000015737461727475705F73746D33326634303578782E7300000000BECEA100FFFFFFFF68443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C7372635C636F6D706F6E656E74732E63000000000C636F6D706F6E656E74732E6300000000F0A0A100FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F756172742E63000000001473746D3332663478785F68616C5F756172742E6300000000BCA8E100FFFFFFFF7B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6273705C5F74656D706C6174655C637562656D785F636F6E6669675C626F6172642E630000000007626F6172642E63000000009CC1B600FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000F7B88600FFFFFFFF3E443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7953656E736F725F6465616C2E63000000000F6D7953656E736F725F6465616C2E6300000000D9ADC200FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C63616E2E63000000000563616E2E6300000000A5C2D700FFFFFFFF5A443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C53544D3332463478785F48414C5F4472697665725C5372635C73746D3332663478785F68616C5F63616E2E63000000001373746D3332663478785F68616C5F63616E2E6300000000B3A6BE00FFFFFFFF34443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C496E635C63616E2E68000000000563616E2E6800000000EAD6A300FFFFFFFF5B443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C447269766572735C434D5349535C4465766963655C53545C53544D3332463478785C496E636C7564655C73746D3332663478782E68000000000B73746D3332663478782E6800000000F6FA7D00FFFFFFFF76443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C6C69626370755C61726D5C636F727465782D6D345C637075706F72742E630000000009637075706F72742E6300000000B5E99D00FFFFFFFF60443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5345474745525F5254545F5669657765725C5254545C5345474745525F5254542E63000000000C5345474745525F5254542E63000000005FC3CF00FFFFFFFF74443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C4D6964646C6577617265735C54686972645F50617274795C5265616C5468726561645F52544F535F52542D5468726561645C636F6D706F6E656E74735C66696E73685C7372635C7368656C6C2E6300000000077368656C6C2E6300000000C1838300FFFFFFFF40443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D794D617474726573735F6374726C2E6300000000116D794D617474726573735F6374726C2E6300000000CACAD500FFFFFFFF3D443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D7943414E4275734465616C2E63000000000E6D7943414E4275734465616C2E6300000000C5D4F200FFFFFFFF42443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C5372635C6D63755F626F64795F616E616C797A65722E6300000000136D63755F626F64795F616E616C797A65722E6300000000FFDC7800FFFFFFFF42443A5C4A6F625F576F726B5C436F64655C315F584D5C584D2D30315C43414E5C584D2D30315C436F72655C496E635C6D63755F626F64795F616E616C797A65722E6800000000136D63755F626F64795F616E616C797A65722E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000001301000066000000D505000086020000</Data>
</MDITabState> </MDITabState>
</MDIClientArea> </MDIClientArea>
<ViewEx> <ViewEx>
@ -1845,7 +1845,7 @@
<Name>Debug</Name> <Name>Debug</Name>
<Buttons> <Buttons>
<Len>2373</Len> <Len>2373</Len>
<Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
</Buttons> </Buttons>
<OriginalItems> <OriginalItems>
<Len>898</Len> <Len>898</Len>
@ -3610,7 +3610,7 @@
<ActiveMDIGroup>0</ActiveMDIGroup> <ActiveMDIGroup>0</ActiveMDIGroup>
<MDIGroup> <MDIGroup>
<Size>100</Size> <Size>100</Size>
<ActiveTab>16</ActiveTab> <ActiveTab>1</ActiveTab>
<Doc> <Doc>
<Name>../Core/Src/main.c</Name> <Name>../Core/Src/main.c</Name>
<ColumnNumber>2</ColumnNumber> <ColumnNumber>2</ColumnNumber>
@ -3622,9 +3622,9 @@
</Doc> </Doc>
<Doc> <Doc>
<Name>..\Core\Src\myEdge_ai_app.c</Name> <Name>..\Core\Src\myEdge_ai_app.c</Name>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>1</ColumnNumber>
<TopLine>189</TopLine> <TopLine>283</TopLine>
<CurrentLine>196</CurrentLine> <CurrentLine>293</CurrentLine>
<Folding>1</Folding> <Folding>1</Folding>
<ContractedFolders></ContractedFolders> <ContractedFolders></ContractedFolders>
<PaneID>0</PaneID> <PaneID>0</PaneID>
@ -3757,9 +3757,27 @@
</Doc> </Doc>
<Doc> <Doc>
<Name>..\Core\Src\myCANBusDeal.c</Name> <Name>..\Core\Src\myCANBusDeal.c</Name>
<ColumnNumber>0</ColumnNumber> <ColumnNumber>5</ColumnNumber>
<TopLine>4</TopLine> <TopLine>4</TopLine>
<CurrentLine>17</CurrentLine> <CurrentLine>22</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>
</Doc>
<Doc>
<Name>..\Core\Src\mcu_body_analyzer.c</Name>
<ColumnNumber>9</ColumnNumber>
<TopLine>32</TopLine>
<CurrentLine>38</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>
</Doc>
<Doc>
<Name>../Core/Inc/mcu_body_analyzer.h</Name>
<ColumnNumber>7</ColumnNumber>
<TopLine>80</TopLine>
<CurrentLine>97</CurrentLine>
<Folding>1</Folding> <Folding>1</Folding>
<ContractedFolders></ContractedFolders> <ContractedFolders></ContractedFolders>
<PaneID>0</PaneID> <PaneID>0</PaneID>

View File

@ -377,6 +377,18 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\Src\mcu_body_analyzer.c</PathWithFileName>
<FilenameWithoutPath>mcu_body_analyzer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
@ -387,7 +399,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber> <FileNumber>14</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -399,7 +411,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber> <FileNumber>15</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -411,7 +423,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber> <FileNumber>16</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -423,7 +435,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber> <FileNumber>17</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -435,7 +447,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber> <FileNumber>18</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -447,7 +459,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber> <FileNumber>19</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -459,7 +471,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber> <FileNumber>20</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -471,7 +483,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber> <FileNumber>21</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -483,7 +495,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber> <FileNumber>22</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -495,7 +507,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>22</FileNumber> <FileNumber>23</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -507,7 +519,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>23</FileNumber> <FileNumber>24</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -519,7 +531,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>24</FileNumber> <FileNumber>25</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -531,7 +543,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>25</FileNumber> <FileNumber>26</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -543,7 +555,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>26</FileNumber> <FileNumber>27</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -555,7 +567,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>27</FileNumber> <FileNumber>28</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -575,7 +587,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>28</FileNumber> <FileNumber>29</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -595,7 +607,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber> <FileNumber>30</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -607,7 +619,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>30</FileNumber> <FileNumber>31</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -627,7 +639,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>31</FileNumber> <FileNumber>32</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -639,7 +651,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber> <FileNumber>33</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -651,7 +663,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>33</FileNumber> <FileNumber>34</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -663,7 +675,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>34</FileNumber> <FileNumber>35</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -675,7 +687,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>35</FileNumber> <FileNumber>36</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -687,7 +699,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>36</FileNumber> <FileNumber>37</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -699,7 +711,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>37</FileNumber> <FileNumber>38</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -711,7 +723,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>38</FileNumber> <FileNumber>39</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -723,7 +735,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>39</FileNumber> <FileNumber>40</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -735,7 +747,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>40</FileNumber> <FileNumber>41</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -755,7 +767,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>7</GroupNumber> <GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber> <FileNumber>42</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -775,7 +787,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>8</GroupNumber> <GroupNumber>8</GroupNumber>
<FileNumber>42</FileNumber> <FileNumber>43</FileNumber>
<FileType>4</FileType> <FileType>4</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -795,7 +807,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>9</GroupNumber> <GroupNumber>9</GroupNumber>
<FileNumber>43</FileNumber> <FileNumber>44</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -807,7 +819,7 @@
</File> </File>
<File> <File>
<GroupNumber>9</GroupNumber> <GroupNumber>9</GroupNumber>
<FileNumber>44</FileNumber> <FileNumber>45</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -819,7 +831,7 @@
</File> </File>
<File> <File>
<GroupNumber>9</GroupNumber> <GroupNumber>9</GroupNumber>
<FileNumber>45</FileNumber> <FileNumber>46</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -831,7 +843,7 @@
</File> </File>
<File> <File>
<GroupNumber>9</GroupNumber> <GroupNumber>9</GroupNumber>
<FileNumber>46</FileNumber> <FileNumber>47</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -843,7 +855,7 @@
</File> </File>
<File> <File>
<GroupNumber>9</GroupNumber> <GroupNumber>9</GroupNumber>
<FileNumber>47</FileNumber> <FileNumber>48</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -863,7 +875,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>48</FileNumber> <FileNumber>49</FileNumber>
<FileType>2</FileType> <FileType>2</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -875,7 +887,7 @@
</File> </File>
<File> <File>
<GroupNumber>10</GroupNumber> <GroupNumber>10</GroupNumber>
<FileNumber>49</FileNumber> <FileNumber>50</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -895,7 +907,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>50</FileNumber> <FileNumber>51</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -907,7 +919,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>51</FileNumber> <FileNumber>52</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -919,7 +931,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>52</FileNumber> <FileNumber>53</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -931,7 +943,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>53</FileNumber> <FileNumber>54</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -943,7 +955,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>54</FileNumber> <FileNumber>55</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -955,7 +967,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>55</FileNumber> <FileNumber>56</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -967,7 +979,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>56</FileNumber> <FileNumber>57</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -979,7 +991,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>57</FileNumber> <FileNumber>58</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -991,7 +1003,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>58</FileNumber> <FileNumber>59</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1003,7 +1015,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>59</FileNumber> <FileNumber>60</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1015,7 +1027,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>60</FileNumber> <FileNumber>61</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1027,7 +1039,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>61</FileNumber> <FileNumber>62</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1039,7 +1051,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>62</FileNumber> <FileNumber>63</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1051,7 +1063,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>63</FileNumber> <FileNumber>64</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1063,7 +1075,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>64</FileNumber> <FileNumber>65</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1075,7 +1087,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>65</FileNumber> <FileNumber>66</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -1087,7 +1099,7 @@
</File> </File>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>66</FileNumber> <FileNumber>67</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>

View File

@ -600,6 +600,11 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>../Core/Src/stm32f4xx_hal_msp.c</FilePath> <FilePath>../Core/Src/stm32f4xx_hal_msp.c</FilePath>
</File> </File>
<File>
<FileName>mcu_body_analyzer.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\Src\mcu_body_analyzer.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

File diff suppressed because it is too large Load Diff

View File

@ -65,6 +65,7 @@
| 2025-05-26 | CAN版本260点增加模型完成 | | | 2025-05-26 | CAN版本260点增加模型完成 | |
| 2025-05-27 | 串口部分处理增加完成,未验证 | | | 2025-05-27 | 串口部分处理增加完成,未验证 | |
| | CAN总线调试完成 可以通讯 完成线程 | | | | CAN总线调试完成 可以通讯 完成线程 | |
| 2025-06-03 | 完成算法计算腰部位置代码移植 | 后续还需要更改 |
--- ---