5 Commits

Author SHA1 Message Date
YuanHongbin 314ff67f26 chore(ide): 提交Keil调试器配置与Boot A/B分区升级方案文档 2026-09-23 11:22:02 +08:00
YuanHongbin 6d4aad164b chore(version): 软件版本小版本迭代 V1.3 -> V1.4 2026-09-23 11:22:02 +08:00
YuanHongbin b1cba74aa7 feat(app): 配合Boot A/B分区升级, 链接区限定A区232KB
bsp.h分区宏改A区29扇区+新增B区宏(FLASH_BINFO_BASE仍=0x7C000); GateWay_app.sct IROM 0x74000→0x3A000;
Update()增加AppSize<=FLASH_APPB_SIZE校验, 超限拒绝不置标志不复位
2026-09-23 11:16:55 +08:00
YuanHongbin 2cf17c4387 fix(stack): 增大Lora/LoraIRQ线程栈至2048并启用栈溢出检测
0x0020类型设备数据含float字段,DebugDisplaySensorData中%06f格式
触发ARMCC完整FP printf路径(vsprintf->_printf_fp_dec->btod),仅此调用链
需~1252B栈空间,而Lora线程栈仅1024B导致栈溢出踩踏堆中定时器链表节点,
rt_list_remove在_rt_timer_remove中崩溃.增大栈至2048并启用
RT_USING_OVERFLOW_CHECK提前检测溢出.
2026-09-18 17:39:04 +08:00
YuanHongbin e23a0d01ae feat(lora): 宽频信道表扩展为120信道(433.1MHz~492.6MHz)
- sx127x.h: 信道宏CH0~CH119, 基准433100000ul+500kHz步进(CH0=433.1MHz, CH119=492.6MHz)
- sx127x.h: SX1276_CHANNEL_MAX 46 -> 120, LoraSetChannel范围检查自动跟随
- sx127x.c: gdwSx1276ChannelTbl信道表扩为120项
- sx127x.c: LoraSetFreqCent频率校验范围改为433.1MHz~492.6MHz(原470.1下限会拒绝CH0~CH73)
- main.c: 频率校验失败回退默认值改为CH0(433.1MHz)
- 注意: 信道号与窄频版(develop)语义不同, 同编号对应不同频率, 两种固件设备互不相通
- 默认信道CH8在宽频下为437.1MHz
2026-09-08 10:21:32 +08:00
12 changed files with 270 additions and 69 deletions
+112
View File
@@ -0,0 +1,112 @@
# Boot A/B 分区升级改造计划
## 背景
当前 Boot 升级流程:收到 0x81 升级请求后复位 → **先整片擦除 App 区(0x8000\~0x7C000, 58扇区)** → 逐包(200字节)边收边写 → 收完才做 CRC32 整包校验 → 失败/超时仅清标志,但 App 区已被擦除,**设备变砖只剩 Boot**。
改造目标:App 区分 A/B 两区。新固件先下载到 B 区暂存,**整包 CRC 校验成功后才搬运到 A 区**;任何失败(CRC 错/下载超时/断电)都能回到 A 区原有 App,彻底消除变砖风险。RS485 协议(0x81/0x82/0x01/0x02 帧)不变,主机升级工具无需修改。
## 新 Flash 分区(512KB = 64 扇区 × 8KB)
| 分区 | 地址范围 | 扇区数 | 说明 |
| ---------- | ---------------- | -------------- | --------------------------- |
| Boot | 0x00000\~0x07FFF | 4 (32KB) | 不变,MAC 常量 0x4000 不受影响 |
| **A区(运行)** | 0x08000\~0x41FFF | **29 (232KB)** | App 链接基址仍为 0x8000 |
| **B区(暂存)** | 0x42000\~0x7BFFF | **29 (232KB)** | 升级包下载区 |
| 参数区 | 0x7C000\~0x7DFFF | 1 | 不变,boot\_para\_t 结构**完全不变** |
| 备用 | 0x7E000\~0x7FFFF | 1 | 不变 |
App 当前实际 113KB,A/B 各 232KB 有约一倍余量。断电状态全部由 `UpdateFlag + AppSize + Crc32Check + B区CRC实测` 推导,**无需新增参数字段**。
## 新升级状态机
```
main() 决策(不变): AppFlag==START/BOOT_UPGRADE→跳A | UpdateFlag==UPDATE→BL_ERASE_FLASH | 其他→BL_IDLE
BL_ERASE_FLASH(改):
AppSize非法(==0 或 >232KB) → AppFlag=START_FLAG/UpdateFlag=0 → BL_RESET(回老App)
GetCrc32(B区, AppSize)==Crc32Check ? ──是(断电续传:已下载完/搬运中断电)──→ BL_COPY_TO_A
└─否→ 仅擦B区29扇区 → BL_GET_DATA(逐包写B区) → 收完 ↓
0x82 收完全部包(改):
CRC32(B区,AppSize)==Crc32Check ?
├─是→ UpDateFlag=false → BL_COPY_TO_A
└─否→ AppFlag=APP_START_FLAG / UpdateFlag=0 → 写参数 → BL_RESET (回老App, 原来是BL_IDLE变砖)
BL_COPY_TO_A(新增):
按 ceil(AppSize/8K) 扇区数逐扇区: FeedDog → 擦A扇区 → 从B读8KB到RAM缓冲 → FlashWrite写A
→ CRC32(A区,AppSize)==Crc32Check ?
├─是→ AppFlag=APP_BOOT_UPGRADE_FLAG / UpdateFlag=0 → 写参数 → BL_RESET → 跳A
└─否→ CopyRetryCnt<1 重试搬运; 仍失败→ AppFlag=0/UpdateFlag=0 → BL_IDLE
BL_GET_DATA_TIMEOUT(改): 重试3次耗尽 → AppFlag=APP_START_FLAG / UpdateFlag=0 → BL_RESET(回老App, 原来是BL_IDLE)
```
断电自愈覆盖:①下载中断电→重启 B 校验失败→重新下载;②搬运中断电→A 残缺但 B 仍有效→重启自动重搬;③擦 A 前提是 AppFlag=0 且 Boot 不会在 UpdateFlag 置位时跳转,无跳半擦区风险;④0x81 写参数中断电→参数区 0xFF→走 FirstRunFlag 分支跳 A,老 App 完好。
## Boot 工程改动(d:\keilProject\hc32f460\git\hc32f460bootloader)
**bsp.h**(分区宏,L194-206):
* `APP_A_ADDRESS = FLASH_BASE + BOOT_SIZE` (0x8000)、`APP_BANK_SECTORS 29u`、`APP_BANK_SIZE = 29*8K` (232KB)、`APP_B_ADDRESS = APP_A_ADDRESS + APP_BANK_SIZE` (0x42000)、`APP_ADDRESS` 保留别名指向 A 区、`BOOT_PARA_ADDRESS = APP_B_ADDRESS + APP_BANK_SIZE` (0x7C000 不变)
**main.h**:
* 枚举加 `BL_COPY_TO_A`;`BootLoader_t` 加 `uint32_t CopyRetryCnt`
**bsp.c**:
* `FlashWrite`/`FlashRead` 长度参数 `uint8_t` → `int`(8KB 整扇区 2048 字超出 uint8\_t,评审发现 P2)
* `FlashWrite` 尾部不足 4 字节时按 0xFF 补齐组字写入(防 AppSize 非 4 对齐时丢尾字节导致 CRC 永败)
* `EraseFlash()` 参数化为擦指定起始地址+扇区数(现仅用于擦 B 区 29 扇区,不再碰 A 区)
**main.c**:
* `GetCrc32(int dwLen)` → `GetCrc32(uint32_t BaseAddr, int dwLen)`(现有 L50 固定读 APP\_ADDRESS)
* `AppWriteFlash` 加基址参数,下载包写入 `APP_B_ADDRESS + offset`
* `AnalyzeData`:
* 0x81 分支:加 AppSize 合法性拒绝(>232KB 或 0 时忽略)
* 0x82 分支:加状态守卫 `Status 必须为 BL_GET_DATA/BL_WAIT_REV`(评审发现 P1:防迟到包破坏搬运期 B 区);收完 CRC 改算 B 区,成功→`BL_COPY_TO_A`,失败→恢复 START\_FLAG→BL\_RESET
* `BootLoaderLoopHandler`:`BL_ERASE_FLASH` 改为先校验 B 区(断电续传入口);新增 `BL_COPY_TO_A` case(调 CopyAppBtoA);`BL_GET_DATA_TIMEOUT` 耗尽改恢复 START\_FLAG+BL\_RESET
* 新增 `CopyAppBtoA()`:main.c 内实现,`static uint32_t s_CopyBuf[2048]`(8KB),逐扇区 EFM\_SectorErase(A)+读 B 缓冲+FlashWrite(A),每扇区 FeedDog,结尾 CRC32(A) 校验返回 bool
## App 工程改动(d:\keilProject\HC32F460\Git\GateWay)
**Project/GateWay/source/User/Inc/bsp.h**(L19-29,评审 P0 关键):
* `FLASH_APP_SIZE` 58→29 扇区后 `FLASH_BINFO_BASE` 会错算成 0x42000,**必须**改为:
`FLASH_APP_A_SIZE(29*8K)` + `FLASH_APPB_BASE = FLASH_APP_BASE + FLASH_APP_A_SIZE`(0x42000) + `FLASH_APPB_SIZE(29*8K)` + `FLASH_BINFO_BASE = FLASH_APPB_BASE + FLASH_APPB_SIZE`(**仍=0x7C000**)、FLASH\_CFG\_BASE 连带仍=0x7E000
**MDK/GateWay\_app.sct**:`LR_IROM1/ER_IROM1` 尺寸 `0x74000` → `0x3A000`(两个 target 共用此 sct,sct 优先于 uvprojx IROM)
**MDK/GateWay.uvprojx**:app\_boot target(L1168) IROM Size `0x6c000`→`0x3a000`(一致性,app\_dubeg 的 0x0/0x80000 本就与 sct 不一致,不动)
**source/User/Src/Update.c** `Update()`:加 `AppSize==0 || AppSize>FLASH_APPB_SIZE` 时报错返回,不置标志不复位
其余 App 代码(VTOR 动态基址、UpdateInit、升级异常检测、JumpToApp)均无需改动。
## 实施注意事项
1. **编码**:所有源文件含中文注释,一律 UTF-8。用 .NET 脚本(`UTF8Encoding(false)`)做替换修改(本会话已验证 Edit 工具会把 GBK 污染写入),改后校验 git diff 行数与编码
2. boot\_para\_t 结构、BOOT\_PARA\_ADDRESS、协议帧均不变 → 新旧 Boot/App 交叉兼容
3. 编译验证:Boot(Keil MDK)+ App(app\_boot target)分别编译通过,App 镜像 113KB < 232KB
## 验证清单
1. 正常升级全流程:新固件运行、外部参数分区按 APP\_BOOT\_UPGRADE\_FLAG 清理、传感器重新注册
2. 下载中断电 → 重启回老 App → 可再次升级
3. 下载超时(主机停发)→ 3 次重试后自动回老 App
4. CRC 注入失败 → 回老 App
5. 搬运中断电 → 重启自愈重搬 → 升级成功
6. B 区残留旧镜像 + 新 0x81(不同 AppSize/CRC)→ 不误判、重新下载
7. COPY 阶段发 0x81/0x82 → 均被拒绝,搬运不被干扰
8. AppSize=0 / >232KB → 拒绝
+1 -1
View File
@@ -1165,7 +1165,7 @@
<OCR_RVCT4>
<Type>1</Type>
<StartAddress>0x8000</StartAddress>
<Size>0x6c000</Size>
<Size>0x3a000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>1</Type>
+3 -3
View File
@@ -1,10 +1,10 @@
; *************************************************************
; *** Scatter-Loading Description File for GateWay APP ***
; *** Flash: APP区 0x8000起 (Boot 32KB), 到参数区0x7C000前 ***
; *** Flash: A区 0x8000~0x41FFF(232KB, 运行) + B区 0x42000~0x7BFFF(232KB, 升级暂存), 参数区0x7C000 ***
; *************************************************************
LR_IROM1 0x00008000 0x00074000 {
ER_IROM1 0x00008000 0x00074000 {
LR_IROM1 0x00008000 0x0003A000 {
ER_IROM1 0x00008000 0x0003A000 {
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
+1 -1
View File
@@ -41,7 +41,7 @@
#define RT_DEBUG_INIT 0
// <c1>thread stack over flow detect
// <i> Diable Thread stack over flow detect
//#define RT_USING_OVERFLOW_CHECK
#define RT_USING_OVERFLOW_CHECK
// </c>
// </h>
+2 -2
View File
@@ -2,8 +2,8 @@
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x00008000 0x0006C000 { ; load region size_region
ER_IROM1 0x00008000 0x0006C000 { ; load address = execution address
LR_IROM1 0x00008000 0x0003A000 { ; load region size_region
ER_IROM1 0x00008000 0x0003A000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
+13 -6
View File
@@ -474,11 +474,18 @@ void Sx1276LoRaWakeup(void)
//配置本层参数的函数
//频道表
const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={
CH0, CH1, CH2, CH3, CH4, CH5, CH6, CH7, CH8, CH9,
CH10, CH11, CH12, CH13, CH14, CH15, CH16, CH17, CH18, CH19,
CH20, CH21, CH22, CH23, CH24, CH25, CH26, CH27, CH28, CH29,
CH30, CH31, CH32, CH33, CH34, CH35, CH36, CH37, CH38, CH39,
CH40, CH41, CH42, CH43, CH44, CH45
CH0, CH1, CH2, CH3, CH4, CH5, CH6, CH7, CH8, CH9,
CH10, CH11, CH12, CH13, CH14, CH15, CH16, CH17, CH18, CH19,
CH20, CH21, CH22, CH23, CH24, CH25, CH26, CH27, CH28, CH29,
CH30, CH31, CH32, CH33, CH34, CH35, CH36, CH37, CH38, CH39,
CH40, CH41, CH42, CH43, CH44, CH45, CH46, CH47, CH48, CH49,
CH50, CH51, CH52, CH53, CH54, CH55, CH56, CH57, CH58, CH59,
CH60, CH61, CH62, CH63, CH64, CH65, CH66, CH67, CH68, CH69,
CH70, CH71, CH72, CH73, CH74, CH75, CH76, CH77, CH78, CH79,
CH80, CH81, CH82, CH83, CH84, CH85, CH86, CH87, CH88, CH89,
CH90, CH91, CH92, CH93, CH94, CH95, CH96, CH97, CH98, CH99,
CH100, CH101, CH102, CH103, CH104, CH105, CH106, CH107, CH108, CH109,
CH110, CH111, CH112, CH113, CH114, CH115, CH116, CH117, CH118, CH119
};
//LORAPT_CHANNEL
@@ -666,7 +673,7 @@ bool LoraSetRegPreamble(uint8_t RegPreamble)
}
bool LoraSetFreqCent(uint32_t FreqCent)
{
if(FreqCent < 470100000 || FreqCent > 492600000)
if(FreqCent < 433100000 || FreqCent > 492600000) //lora-wide: 433.1MHz~492.6MHz(与信道表匹配)
return false;
LoRaPara.dwFreqHz = FreqCent;
return true;
+122 -48
View File
@@ -660,7 +660,7 @@ typedef enum{
LORAPT_MAX
}Sx1276LoraParaType;
#define SX1276_CHANNEL_MAX 46
#define SX1276_CHANNEL_MAX 120
#define LORA_SPI_NSS_SET() SPI2_NSS_SET()
#define LORA_SPI_NSS_CLR() SPI2_NSS_CLR()
@@ -758,54 +758,128 @@ typedef struct {
#endif
/*
Lora频率:470100000ul + 500000*N, N=0~45, 共46个信道(470.1MHz~492.6MHz)
Lora频率:433100000ul + 500000*N, N=0~119, 共120个信道(433.1MHz~492.6MHz) [lora-wide宽频版]
*/
#define CH0 (470100000ul + 0) //470.1MHz
#define CH1 (470100000ul + 500000)
#define CH2 (470100000ul + 1000000)
#define CH3 (470100000ul + 1500000)
#define CH4 (470100000ul + 2000000)
#define CH5 (470100000ul + 2500000)
#define CH6 (470100000ul + 3000000)
#define CH7 (470100000ul + 3500000)
#define CH8 (470100000ul + 4000000)
#define CH9 (470100000ul + 4500000)
#define CH10 (470100000ul + 5000000)
#define CH11 (470100000ul + 5500000)
#define CH12 (470100000ul + 6000000)
#define CH13 (470100000ul + 6500000)
#define CH14 (470100000ul + 7000000)
#define CH15 (470100000ul + 7500000)
#define CH16 (470100000ul + 8000000)
#define CH17 (470100000ul + 8500000)
#define CH18 (470100000ul + 9000000)
#define CH19 (470100000ul + 9500000)
#define CH20 (470100000ul + 10000000)
#define CH21 (470100000ul + 10500000)
#define CH22 (470100000ul + 11000000)
#define CH23 (470100000ul + 11500000)
#define CH24 (470100000ul + 12000000)
#define CH25 (470100000ul + 12500000)
#define CH26 (470100000ul + 13000000)
#define CH27 (470100000ul + 13500000)
#define CH28 (470100000ul + 14000000)
#define CH29 (470100000ul + 14500000)
#define CH30 (470100000ul + 15000000)
#define CH31 (470100000ul + 15500000)
#define CH32 (470100000ul + 16000000)
#define CH33 (470100000ul + 16500000)
#define CH34 (470100000ul + 17000000)
#define CH35 (470100000ul + 17500000)
#define CH36 (470100000ul + 18000000)
#define CH37 (470100000ul + 18500000)
#define CH38 (470100000ul + 19000000)
#define CH39 (470100000ul + 19500000)
#define CH40 (470100000ul + 20000000)
#define CH41 (470100000ul + 20500000)
#define CH42 (470100000ul + 21000000)
#define CH43 (470100000ul + 21500000)
#define CH44 (470100000ul + 22000000)
#define CH45 (470100000ul + 22500000) //492.6MHz
#define CH0 (433100000ul + 0) //433.1MHz
#define CH1 (433100000ul + 500000)
#define CH2 (433100000ul + 1000000)
#define CH3 (433100000ul + 1500000)
#define CH4 (433100000ul + 2000000)
#define CH5 (433100000ul + 2500000)
#define CH6 (433100000ul + 3000000)
#define CH7 (433100000ul + 3500000)
#define CH8 (433100000ul + 4000000)
#define CH9 (433100000ul + 4500000)
#define CH10 (433100000ul + 5000000)
#define CH11 (433100000ul + 5500000)
#define CH12 (433100000ul + 6000000)
#define CH13 (433100000ul + 6500000)
#define CH14 (433100000ul + 7000000)
#define CH15 (433100000ul + 7500000)
#define CH16 (433100000ul + 8000000)
#define CH17 (433100000ul + 8500000)
#define CH18 (433100000ul + 9000000)
#define CH19 (433100000ul + 9500000)
#define CH20 (433100000ul + 10000000)
#define CH21 (433100000ul + 10500000)
#define CH22 (433100000ul + 11000000)
#define CH23 (433100000ul + 11500000)
#define CH24 (433100000ul + 12000000)
#define CH25 (433100000ul + 12500000)
#define CH26 (433100000ul + 13000000)
#define CH27 (433100000ul + 13500000)
#define CH28 (433100000ul + 14000000)
#define CH29 (433100000ul + 14500000)
#define CH30 (433100000ul + 15000000)
#define CH31 (433100000ul + 15500000)
#define CH32 (433100000ul + 16000000)
#define CH33 (433100000ul + 16500000)
#define CH34 (433100000ul + 17000000)
#define CH35 (433100000ul + 17500000)
#define CH36 (433100000ul + 18000000)
#define CH37 (433100000ul + 18500000)
#define CH38 (433100000ul + 19000000)
#define CH39 (433100000ul + 19500000)
#define CH40 (433100000ul + 20000000)
#define CH41 (433100000ul + 20500000)
#define CH42 (433100000ul + 21000000)
#define CH43 (433100000ul + 21500000)
#define CH44 (433100000ul + 22000000)
#define CH45 (433100000ul + 22500000)
#define CH46 (433100000ul + 23000000)
#define CH47 (433100000ul + 23500000)
#define CH48 (433100000ul + 24000000)
#define CH49 (433100000ul + 24500000)
#define CH50 (433100000ul + 25000000)
#define CH51 (433100000ul + 25500000)
#define CH52 (433100000ul + 26000000)
#define CH53 (433100000ul + 26500000)
#define CH54 (433100000ul + 27000000)
#define CH55 (433100000ul + 27500000)
#define CH56 (433100000ul + 28000000)
#define CH57 (433100000ul + 28500000)
#define CH58 (433100000ul + 29000000)
#define CH59 (433100000ul + 29500000)
#define CH60 (433100000ul + 30000000)
#define CH61 (433100000ul + 30500000)
#define CH62 (433100000ul + 31000000)
#define CH63 (433100000ul + 31500000)
#define CH64 (433100000ul + 32000000)
#define CH65 (433100000ul + 32500000)
#define CH66 (433100000ul + 33000000)
#define CH67 (433100000ul + 33500000)
#define CH68 (433100000ul + 34000000)
#define CH69 (433100000ul + 34500000)
#define CH70 (433100000ul + 35000000)
#define CH71 (433100000ul + 35500000)
#define CH72 (433100000ul + 36000000)
#define CH73 (433100000ul + 36500000)
#define CH74 (433100000ul + 37000000)
#define CH75 (433100000ul + 37500000)
#define CH76 (433100000ul + 38000000)
#define CH77 (433100000ul + 38500000)
#define CH78 (433100000ul + 39000000)
#define CH79 (433100000ul + 39500000)
#define CH80 (433100000ul + 40000000)
#define CH81 (433100000ul + 40500000)
#define CH82 (433100000ul + 41000000)
#define CH83 (433100000ul + 41500000)
#define CH84 (433100000ul + 42000000)
#define CH85 (433100000ul + 42500000)
#define CH86 (433100000ul + 43000000)
#define CH87 (433100000ul + 43500000)
#define CH88 (433100000ul + 44000000)
#define CH89 (433100000ul + 44500000)
#define CH90 (433100000ul + 45000000)
#define CH91 (433100000ul + 45500000)
#define CH92 (433100000ul + 46000000)
#define CH93 (433100000ul + 46500000)
#define CH94 (433100000ul + 47000000)
#define CH95 (433100000ul + 47500000)
#define CH96 (433100000ul + 48000000)
#define CH97 (433100000ul + 48500000)
#define CH98 (433100000ul + 49000000)
#define CH99 (433100000ul + 49500000)
#define CH100 (433100000ul + 50000000)
#define CH101 (433100000ul + 50500000)
#define CH102 (433100000ul + 51000000)
#define CH103 (433100000ul + 51500000)
#define CH104 (433100000ul + 52000000)
#define CH105 (433100000ul + 52500000)
#define CH106 (433100000ul + 53000000)
#define CH107 (433100000ul + 53500000)
#define CH108 (433100000ul + 54000000)
#define CH109 (433100000ul + 54500000)
#define CH110 (433100000ul + 55000000)
#define CH111 (433100000ul + 55500000)
#define CH112 (433100000ul + 56000000)
#define CH113 (433100000ul + 56500000)
#define CH114 (433100000ul + 57000000)
#define CH115 (433100000ul + 57500000)
#define CH116 (433100000ul + 58000000)
#define CH117 (433100000ul + 58500000)
#define CH118 (433100000ul + 59000000)
#define CH119 (433100000ul + 59500000) //492.6MHz
/*Lora中心频率默认值(编译期用于频道表等)
实际运行频率由Boot参数区(BootPara_t.LoraFreq)配置, APP启动时覆盖ConfigPara.Lora.FreqCent*/
+6 -4
View File
@@ -16,12 +16,14 @@
#define FLASH_BOOT_BASE (FLASH_BASE)
#define FLASH_BOOT_SIZE (4*FLASH_SECTOR_SIZE)
//app
//app A区(运行, 0x8000起, 232KB) + B区(升级暂存, 0x42000起, 232KB) - 与Boot A/B分区一致
#define FLASH_APP_BASE (FLASH_BOOT_BASE+ FLASH_BOOT_SIZE)
#define FLASH_APP_SIZE (58*FLASH_SECTOR_SIZE)
#define FLASH_APP_SIZE (29*FLASH_SECTOR_SIZE)
#define FLASH_APPB_BASE (FLASH_APP_BASE + FLASH_APP_SIZE)
#define FLASH_APPB_SIZE (29*FLASH_SECTOR_SIZE)
//boot info
#define FLASH_BINFO_BASE (FLASH_APP_BASE + FLASH_APP_SIZE)
//boot info (0x7C000, 位置不变)
#define FLASH_BINFO_BASE (FLASH_APPB_BASE + FLASH_APPB_SIZE)
#define FLASH_BINFO_SIZE (1*FLASH_SECTOR_SIZE)
//user config
+1 -1
View File
@@ -4,7 +4,7 @@
#include "Public.h"
#include "DebugCmd.h"
#define SOFTWARE_VERSION 13
#define SOFTWARE_VERSION 14
#define HARDWARE_VERSION 12
extern bool MainDispEn;
+1 -1
View File
@@ -92,7 +92,7 @@ void Lora_Thread_Entry(void *parameter)
Debug_Printf("CatOneIRQ Sem Create Failed!\r\n");
}
LoraIRQ_Thread = rt_thread_create("LoraIRQ", LoraIRQ_Thread_Entry, NULL, 1024, 3, 20);
LoraIRQ_Thread = rt_thread_create("LoraIRQ", LoraIRQ_Thread_Entry, NULL, 2048, 3, 20);
if (LoraIRQ_Thread != RT_NULL)
rt_thread_startup(LoraIRQ_Thread);
+6
View File
@@ -19,6 +19,12 @@ void Update(uint8_t *PayLoad)
memcpy(&Req, PayLoad, sizeof(UpDataRequset_t));
/*固件大小校验: 为0或超出B区容量时拒绝升级, 不置标志不复位*/
if(Req.AppSize == 0 || Req.AppSize > FLASH_APPB_SIZE) {
U_DBG_LOG("AppSize invalid: %d (max %d)\r\n", (int)Req.AppSize, (int)FLASH_APPB_SIZE);
return;
}
/*读回现有boot参数,保留FirstRunFlag等字段*/
dev_boot_read_param(&cfg);
cfg.AppSize = Req.AppSize;
+2 -2
View File
@@ -235,7 +235,7 @@ void GateWayInit(void)
}
if(LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent) == false)
{
GateWay.ConfigPara.Lora.FreqCent = 470100000;
GateWay.ConfigPara.Lora.FreqCent = 433100000; //lora-wide: 回退到CH0
LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent);
}
if(LoraSetPower(GateWay.ConfigPara.Lora.ucPower) == false) {
@@ -397,7 +397,7 @@ int main(void)
else
return -1;
Lora_Thread = rt_thread_create("Lora", Lora_Thread_Entry, &GateWay, 1024, 3, 20);
Lora_Thread = rt_thread_create("Lora", Lora_Thread_Entry, &GateWay, 2048, 3, 20);
if (Lora_Thread != RT_NULL)
rt_thread_startup(Lora_Thread);
else