|
|
|
@@ -0,0 +1,87 @@
|
|
|
|
|
/*
|
|
|
|
|
* test_sens_mapping.c — 灵敏度映射 gcc 隔离单测 (vd960Loop)
|
|
|
|
|
*
|
|
|
|
|
* 验证对象: storage.c 的 sens_level_from_config() (4级制 0~3 一一对应)
|
|
|
|
|
* 背景: 2026-08-25 修复 "设置不同灵敏度感应高度无区别"
|
|
|
|
|
* - 根因1: 运行中配置命令未同步 loop_SensLevel (main.c unpack_pkg_set_mcjq_param)
|
|
|
|
|
* - 根因2: 9级制映射 &0x03 折叠 (7→3, 8→0 错乱) → 收敛为 4级制
|
|
|
|
|
* 本测试保护: 9级制后续实现时, 0~3 映射不得破坏
|
|
|
|
|
*
|
|
|
|
|
* 编译运行:
|
|
|
|
|
* gcc -I tests/mock -I utilities/at32f421_freertos_demo/inc \
|
|
|
|
|
* tests/test_sens_mapping.c -o /tmp/test_sens_mapping && /tmp/test_sens_mapping
|
|
|
|
|
*/
|
|
|
|
|
#include <assert.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
/* ---- 被测试对象: include storage.c 使 static 逻辑同编译单元可见 ---- */
|
|
|
|
|
/* 硬件 GPIO 宏 mock (storage.c 的 set_flp_level 使用, 空实现) */
|
|
|
|
|
#define FLPA1_HIGH do { } while (0)
|
|
|
|
|
#define FLPA1_LOW do { } while (0)
|
|
|
|
|
#define FLPA2_HIGH do { } while (0)
|
|
|
|
|
#define FLPA2_LOW do { } while (0)
|
|
|
|
|
#define FLPB1_HIGH do { } while (0)
|
|
|
|
|
#define FLPB1_LOW do { } while (0)
|
|
|
|
|
#define FLPB2_HIGH do { } while (0)
|
|
|
|
|
#define FLPB2_LOW do { } while (0)
|
|
|
|
|
#define FLPC1_HIGH do { } while (0)
|
|
|
|
|
#define FLPC1_LOW do { } while (0)
|
|
|
|
|
#define FLPC2_HIGH do { } while (0)
|
|
|
|
|
#define FLPC2_LOW do { } while (0)
|
|
|
|
|
#define FLPD1_HIGH do { } while (0)
|
|
|
|
|
#define FLPD1_LOW do { } while (0)
|
|
|
|
|
#define FLPD2_HIGH do { } while (0)
|
|
|
|
|
#define FLPD2_LOW do { } while (0)
|
|
|
|
|
|
|
|
|
|
/* storage.c 引用的系统函数 (消除隐式声明 warning) */
|
|
|
|
|
void nvic_system_reset(void);
|
|
|
|
|
void delay_ms(uint32_t ms);
|
|
|
|
|
|
|
|
|
|
#include "../utilities/at32f421_freertos_demo/src/storage.c"
|
|
|
|
|
|
|
|
|
|
/* ---- 外部符号 stub ---- */
|
|
|
|
|
#include "flash.h"
|
|
|
|
|
void flash_write(uint32_t addr, uint16_t *buf, uint16_t len) { (void)addr; (void)buf; (void)len; }
|
|
|
|
|
void flash_read(uint32_t addr, uint16_t *buf, uint16_t len) { (void)addr; (void)buf; (void)len; }
|
|
|
|
|
void nvic_system_reset(void) { abort(); }
|
|
|
|
|
void delay_ms(uint32_t ms) { (void)ms; }
|
|
|
|
|
|
|
|
|
|
const uint16_t SensTable[4] = {216, 108, 36, 10};
|
|
|
|
|
const uint16_t SensTable_1[4] = {108, 72, 18, 9};
|
|
|
|
|
Loop154_States g_loop_states; /* TaskLoop.c 的全局, 此处提供定义 */
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
/* 4级制: 0~3 一一对应, 无折叠 */
|
|
|
|
|
assert(sens_level_from_config(0) == 0);
|
|
|
|
|
assert(sens_level_from_config(1) == 1);
|
|
|
|
|
assert(sens_level_from_config(2) == 2);
|
|
|
|
|
assert(sens_level_from_config(3) == 3);
|
|
|
|
|
|
|
|
|
|
/* 配置命令链路: pkg 低4位 & 0x0F 后传入 (main.c unpack 语义) */
|
|
|
|
|
/* 上位机发 0x00~0x03 → 档位 0~3 */
|
|
|
|
|
assert(sens_level_from_config(0x00 & 0x0F) == 0);
|
|
|
|
|
assert(sens_level_from_config(0x01 & 0x0F) == 1);
|
|
|
|
|
assert(sens_level_from_config(0x02 & 0x0F) == 2);
|
|
|
|
|
assert(sens_level_from_config(0x03 & 0x0F) == 3);
|
|
|
|
|
/* 兼容旧默认 7 (旧 9 级制默认): 7&0x0F=7 → &0x03=3 最高档, 行为连续 */
|
|
|
|
|
assert(sens_level_from_config(0x07 & 0x0F) == 3);
|
|
|
|
|
|
|
|
|
|
/* 出厂默认 loops_cng_default[0]=2 → SENS=2 (高灵敏度档) */
|
|
|
|
|
assert(sens_level_from_config(2) == 2);
|
|
|
|
|
|
|
|
|
|
/* 灵敏度表逐档单调: sens_in 递减 = 档位越高阈值越低 (越灵敏) */
|
|
|
|
|
assert(SensTable[0] > SensTable[1]);
|
|
|
|
|
assert(SensTable[1] > SensTable[2]);
|
|
|
|
|
assert(SensTable[2] > SensTable[3]);
|
|
|
|
|
|
|
|
|
|
printf("PASS: sens_level_from_config 4级映射无折叠\n");
|
|
|
|
|
printf(" SENS 0→%d, 1→%d, 2→%d, 3→%d\n",
|
|
|
|
|
sens_level_from_config(0), sens_level_from_config(1),
|
|
|
|
|
sens_level_from_config(2), sens_level_from_config(3));
|
|
|
|
|
printf(" SensTable: {216,108,36,10} 单调递减 ✓\n");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|