你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

keil下单工程多target(复用相同代码)

[复制链接]
freeelectron 发布时间:2018-10-26 10:04
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑
* g( F5 I4 u5 @, O; l7 C4 P" _+ X' ^- E" C
   - s+ \' q( g# c
    最近在开发LoRaWAN的其他频段(EU868、US915、AU915、AS923、RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png , F$ t  }8 l% o6 L, K0 N5 D+ a
    ( H8 [* \! ~! j2 @2 S# A
自己尝试了一下,分享出来。
* _% S& T+ z- w" Y
1、打开,Mange Project Items…
2.png
) j7 }, L4 [4 w, Z- E2 A: J
0 F5 W9 ?( q* U
  J& u; `1 k( t" c7 a: ?5 Y
2、增加不同的Project Targets
3.png 1 @7 g1 Y1 X, x
; L& Q2 D( n( z/ ~! e( U- F8 Y
3、打开“options for Target‘LoRaMac-RU864’…”针对不同的target,可以设置不同的参数% J* Q( p  i  ^' P' L! z, `
4.png
# |; L& P) ]0 x6 Z9 s, D

' ]" W/ X- e; K
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png
+ U3 L, {4 V. u
4 a9 I4 j$ h* v/ T2 ^$ t

: Y9 t8 p- x. z2 S  S- N
5、obj文件夹分不同的target
6.png   
/ s- y( D& N  `" w4 @3 f6 I" I
6、lst文件夹分不同的target% B& t) |5 z3 `5 ]
7.png
2 w* B: g, Y  w7 [, t7 v
7、单个工程下多个target共存                                                                              
8.png

1 T1 `. y1 Y0 I7 B
部分代码示例:
代码段1:
  1. #if defined( REGION_AS923 )
    . ]2 }) \& j5 T( a. k5 q/ ]
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );
    7 w" t" ?: X7 h! Q0 b
  3. #elif defined( REGION_AU915 )
    , e8 i$ I9 A4 Q5 P& P3 S
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );* `- _* w/ S% r9 O" o
  5. #elif defined( REGION_CN470 )
    $ W3 \7 ?0 D8 a1 C2 `
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );) f* Z% Y0 D/ W- u& v
  7. #elif defined( REGION_EU868 )
    ; ?- I- I4 f2 @! `0 O
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );$ n' D/ e6 a8 N% _
  9. #elif defined( REGION_US915 )$ ]0 d, ?/ j& H
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );. ~& \7 K, u1 R/ x/ o& U! d' Q- r
  11. #elif defined( REGION_RU864 )
    + ^( y' c+ H7 t- V& U- P9 k
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );" I  ]1 f+ x/ ~3 ^7 v  z
  13. #else/ G5 J/ F9 h8 l4 t5 T, }4 I' \
  14.     #error "Please define a region in the compiler options."
    % I- \. g1 r& Q: R  f! N
  15. #endif
    ; J7 ^# a, c: o, D5 W6 E0 B5 E  l8 a
复制代码
代码段2:
  1. #if defined( REGION_EU868 )
    ) W& ?) ^! V$ G4 a1 u" k
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );
    9 G& P, b) C1 b% m6 b* p0 i" j
  3. #endif* d1 d& K2 ]; Y
复制代码
代码段3:
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)( Q5 g2 ~, @5 ]* K4 y
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
    5 s) K$ s" g6 ^$ U4 A1 O
  3. #elif defined (REGION_CN470)  ]0 D1 W' D) F. T; a0 Q
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};" g# B* v2 ^2 t
  5. #else6 d2 F' I6 y# F# `
  6.     #error "Please define a region in the compiler options."
    " F; p( K- d- h6 e4 M0 P7 r7 T$ h
  7. #endif
    - ?' g  B' ~  P2 _& A
复制代码

, i  d4 V1 d1 D0 _9 }4 H6 r
& ?4 f9 A* d  `6 i5 i$ M最后欢迎大家加入,stm32/LoRa物联网:304350312# K* O$ V5 e' r% D2 Y9 e

# b# v& S  n+ u/ B, T
赞 收藏 评论1 发布时间:2018-10-26 10:04

举报

1个回答
harvardx 回答时间:2019-6-12 22:08:05
有没有办法 可以让这几个target同时出现在左边的project列表里面 ,按下rebuild键的时候 ,可以一次性批量产生多个hex文件
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版