本帖最后由 freeelectron 于 2018-10-26 11:00 编辑
最近在开发LoRaWAN的其他频段(EU868、US915、AU915、AS923、RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。 当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
自己尝试了一下,分享出来。
1、打开,Mange Project Items…
2、增加不同的Project Targets 3、打开“options for Target‘LoRaMac-RU864’…”针对不同的target,可以设置不同的参数
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等 5、obj文件夹分不同的target 6、lst文件夹分不同的target
7、单个工程下多个target共存
部分代码示例: 代码段1: - #if defined( REGION_AS923 )
- LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );
- #elif defined( REGION_AU915 )
- LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );
- #elif defined( REGION_CN470 )
- LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );
- #elif defined( REGION_EU868 )
- LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );
- #elif defined( REGION_US915 )
- LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );
- #elif defined( REGION_RU864 )
- LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );
- #else
- #error "Please define a region in the compiler options."
- #endif
复制代码代码段2: - #if defined( REGION_EU868 )
- LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );
- #endif
复制代码代码段3: - #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)
- uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
- #elif defined (REGION_CN470)
- uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};
- #else
- #error "Please define a region in the compiler options."
- #endif
复制代码
最后欢迎大家加入,stm32/LoRa物联网:304350312
|