搜索
查看: 1724|回复: 1

[原创] keil下单工程多target(复用相同代码)

[复制链接]

该用户从未签到

69

主题

1815

帖子

124

蝴蝶豆

版主

最后登录
2021-3-16
发表于 2018-10-26 10:04:57 | 显示全部楼层 |阅读模式
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑

   
    最近在开发LoRaWAN的其他频段(EU868US915AU915AS923RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png
   
自己尝试了一下,分享出来
1、打开,Mange Project Items…
2.png


2、增加不同的Project Targets
3.png

3、打开“options for TargetLoRaMac-RU864”针对不同的target,可以设置不同的参数
4.png

4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png


5obj文件夹分不同的target
6.png   
6lst文件夹分不同的target
7.png
7、单个工程下多个target共存                                                                              
8.png

部分代码示例:
代码段1
  1. #if defined( REGION_AS923 )
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );
  3. #elif defined( REGION_AU915 )
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );
  5. #elif defined( REGION_CN470 )
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );
  7. #elif defined( REGION_EU868 )
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );
  9. #elif defined( REGION_US915 )
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );
  11. #elif defined( REGION_RU864 )
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );
  13. #else
  14.     #error "Please define a region in the compiler options."
  15. #endif
复制代码
代码段2
  1. #if defined( REGION_EU868 )
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );
  3. #endif
复制代码
代码段3
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
  3. #elif defined (REGION_CN470)
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};
  5. #else
  6.     #error "Please define a region in the compiler options."
  7. #endif
复制代码


最后欢迎大家加入,stm32/LoRa物联网:304350312

回复

使用道具 举报

该用户从未签到

25

主题

1029

帖子

17

蝴蝶豆

论坛元老

最后登录
2021-7-26
发表于 2019-6-12 22:08:05 | 显示全部楼层
有没有办法 可以让这几个target同时出现在左边的project列表里面 ,按下rebuild键的时候 ,可以一次性批量产生多个hex文件
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-25 07:16 , Processed in 1.159499 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表