//////////////////////////////////////////////////////////////////////////// ///@copyright Copyright (c) 2022, 传控科技 All rights reserved. ///------------------------------------------------------------------------- /// @file app_save.h /// @brief @ app save ///------------------------------------------------------------------------- /// @version 1.0 /// @author CC /// @date 20220120 /// @note cc_AS_stc02 /********* 写操作1字节, 擦除1扇区 512字节---4-6ms 字节中的0写为1时 擦除扇区 最安全最简单,最逻辑清楚的事,就是 每次擦一个扇区每次写一个扇区, --->每次擦一个扇区每次写一个扇区的前面的有效数据, 1,要求我们尽量小,最好少于512字节 次数限制 30万次 2, 尽量减少写,擦.--->调试的时候要谨慎,最后才可打开写; 背景知识和应用需求决定了存储策略是如何设计的 flash 28k 分出8k EEp 则物理地址位28K的最后8K 物理地址为5000h-6FFFh *******/ /******* app_config 可以调用app_save 偏向应用级别的配置文件 app_save 保存的策略,不同程序可能要求不同 板子有什么外设,这些几乎是纯硬件的东西,另外根据基本的应用,需要板子的外设如何使用的大部分放到bsp中 asp 已经有模式的配置了,app通过参数调用asp,来决定使用外设什么模式. 协议发送,尽量是透明的. app 结果 重量,保存校准参数 asp app support program wifi的模式设置,adc的读取后的处理 bsp board support program 板子上有的外设,wdt,wifi的底层配置函数,sensor msp mcu support program ,cpu自身的外设,uart led cpu *****/ /******* adc采样值 ^ | | o | | | o | | | | | ---|---- |------------0=adc=0 0 | |D_ADC_OFFSET |____|_____|____________>重量 adc + D_ADC_OFFSET 0 40 80 重量点 称重需要保存的东西: 1,传感器正负转换的<偏移量 > 2,传感器找平的偏移量 一般选择四个传感器在0kg的时候的<最小值> 3,<三个重量点的校准> + <零点偏移量> 3.1 极端重量的过滤,超过250kg,或者坐偏的时候出现异常值,无效,维持上次值.<超过250kg,> 4, 上电自动校准零点:零点校准 刚上电的时候如果重量小于某个范围<(+-10kg)>,默认这个重量为此时的<零点> 所以这个范围需要配置,需要存储. 5,手工清零的时候,此时重量<零点>需要修改,产生一个偏移量,同时其他的两个校准点需要程序计算时同步更新. 相当于调用4,但是范围不限. 策略B:4不用保存零点,只有手工清零才保存一下. ---->策略C: 4.5 都不保存,只有用户校准状态才保存 选择c,按键配合,长按按键时重量为0 闪烁(H1sL0.5s)3下 本次称重功能需要保存的东西: 正负转换的<偏移量 > Byte x n=? 出厂才定. 找平的偏移量 Byte x n=? 出厂才定. <三个重量点的校准> Byte x n=? 出厂才定. <零点偏移量> 出厂定,校准清零 极端重量的过滤,超过250kg 出厂定 其他需要保存 版本号,id之类的 写3个扇区,之后判定两个扇区以上相同,并且在合理范围内,此参数才可使用.否则使用程序出厂内置的参数. *****/ ////////////////////////////////////////////////////////////////////////////// #ifndef _APP_SAVE_H #define _APP_SAVE_H #include "TTSS_task.h" #include "c_lib.h" #include "../bsp/bsp_config.h" #include "msp_uart0.h" #include "msp_uartN.h" #include "asp_para.h" #include "app_weight.h" ////#include "asp_adc.h" #define D_rev0x55aa55aa 0x55aa55aa ////需要向eeprom中存储的数据 typedef struct _iap_data { ///40Bytes S16 slaver_id; vU16 sensor[4];//// 4x2与第一个传感器的差值,第一个传感器为偏移量 ts_weight_sheet_ factory_ws[3]; ///4x3=12 出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存 ts_weight_sheet_ zerows[3]; ///4x3=12 手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存 vS16 zerodiff_max; ///2 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准; vS16 zerodiff; ///2零点的差值 零公斤位置和手工的差值 ////此值上电后更改, 顺便保存(区别于实时保存), vU16 zeroout; //2 u8 ADC_shiftaverage_a; ///2 a路移位滤波的参数 由上位机命令更改,实时保存 u8 ADC_shiftaverage_b; /// b路移位滤波的参数 由上位机命令更改,实时保存 U32 rev0x55aa55aa; }TS_IapData_; extern TS_IapData_ iapData; #define D_TS_IapData_SIZE 46/// extern void L4_iap_2_reg(void); void L4_print_iap(TS_IapData_ *s); u8 L4_reg_2_iap(void); #endif // #ifndef _APP_TASK_ADC_H