## 开箱
两个板载ST-LINK demo板,两根天线,两个USB线,东西齐全
这里放个demo板连接好的图
## 例程
官方提供了几个例程,我用的是rt-thread的那个
### 简单描述
PingPong例程烧录后,demo板就会不断地在发送“PING"和接收”PONG“两种状态来回切换
未连接时,两机黄绿led闪烁,持续发送"ping",第一个收到"ping"的变为从机并回复"pong",主机收到"pong"后回复"ping",循环往复,持续下去
- 主机:发ping 绿灯(led2)闪烁
- 从机:发pong 黄灯(led3)闪烁
主要初始化和任务创建在 `SubghzApp_Init (subghz_phy_app.c)`
- 线程1 `Radio.Init(&RadioEvents) -> lora_radio_thread_entry(radio.c)`
- 线程2 `lora_ping_pong_thread_entry` --> 一个状态机,不断切换收发状态
### 双机PING-PONG运行结果
主机发PING,绿灯闪
从机回PONG,黄灯闪
## 双内存使用
折腾过程中用发现在RT-Thread跑起PING-PONG后可分配的堆就剩几百字节了,
创建例程前剩余9KB堆左右可用
PING-PONG开始仅剩980字节
我就想着能不能利用双内存把堆改大点,最后也顺利实现,过程如下
首先MDK工程添加IRAM2,具体地址与大小参考数据手册
勾选使用MDK链接脚本,不用自定义的
修改drv_common.c
增加rt_heap数组用作堆
```c
#define RT_HEAP_SIZE 8192
ALIGN(RT_ALIGN_SIZE)
static uint32_t rt_heap[RT_HEAP_SIZE]; /* 32K V5/V6编译器*/
//static uint32_t rt_heap[RT_HEAP_SIZE] RT_SECTION(".ARM.__at_0x20008000"); /* 32K V6编译器*/
//static uint32_t rt_heap[RT_HEAP_SIZE] __attribute__((at(0x20008000))); /* 32K V5编译器*/
```
修改rt_hw_board_init下的rt_system_heap_init
```c
/*rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);*/
rt_system_heap_init((void *)rt_heap, (void *)(rt_heap+RT_HEAP_SIZE));
```
最终结果
## 题外话
本来是想做个温湿度采集上传云端的,从设备采集数据,主机+ESP32充当网关转发数据发送阿里云,简单模拟一下工厂分布式状态采集的情况。但最近事情实在太多,只能跑个简单的demo了,给rt-thread易智联仓库提了个
PR稍作弥补,惭愧万分,见谅。
文章评论(0条评论)
登录后参与讨论