请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
freeelectron 发布时间:2018-10-26 10:04
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑 ! i, R$ d2 i( h: F* g, _

6 G+ W( k* v  A$ t( `  `9 H
   ' o0 S. t4 c2 V" t
    最近在开发LoRaWAN的其他频段(EU868US915AU915AS923RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png " m7 E1 @9 H/ Q6 M1 `0 B8 [+ T
    ! \% d8 i, F' _9 J0 d
自己尝试了一下,分享出来
, r- N) k0 J" {" j1 G
1、打开,Mange Project Items…
2.png " y4 _7 K8 T' C" W' D5 x6 }2 F4 k
. j7 k7 P1 M6 _$ M; ~- R+ ]9 a

. e& B2 n: S, C
2、增加不同的Project Targets
3.png 5 X2 T6 W; L. k8 _0 B. c. e6 q
) w! t" ]! n+ E, R
3、打开“options for TargetLoRaMac-RU864”针对不同的target,可以设置不同的参数
3 i: ^# y* L4 Q2 L; n% a
4.png ) a/ ^/ Y9 @% T; v
! g: y1 |; N9 r' R  t; e
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png
5 I) z2 _, c/ @) A" L5 w. V: v
" {: I0 D3 _$ p

% e3 f6 {6 k3 B& g3 ?& g7 \1 B: b
5obj文件夹分不同的target
6.png   
  T/ Z( M0 j9 g" a0 y
6lst文件夹分不同的target
; D# f2 }5 z1 X
7.png
. b; S# k' L' E: o4 y" Y
7、单个工程下多个target共存                                                                              
8.png

2 Q( }% S" X6 F  N
部分代码示例:
代码段1
  1. #if defined( REGION_AS923 )6 T4 j8 i1 o8 {) M4 a% [
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );! L  d: l0 T6 l: Q* ^
  3. #elif defined( REGION_AU915 )) M$ I' P4 E: ^8 Z' N1 w6 R
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );
    0 P) q4 }: d  f/ O
  5. #elif defined( REGION_CN470 ); n7 u. X' y9 c6 J: ~/ D
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );
    . l- i; Q6 m7 M; F9 Z/ a
  7. #elif defined( REGION_EU868 )
    / D: O- ~+ T7 r3 e5 u* `7 G% n
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );
    4 s  N8 D( O8 p# h1 \: R
  9. #elif defined( REGION_US915 )3 X8 k) v& O9 ^
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );
    " s$ G% R6 M8 a6 c" s: ~/ M, J  s
  11. #elif defined( REGION_RU864 )
    $ c& G4 d6 l% o6 P( }
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );# }5 h2 f: ~0 a
  13. #else8 @$ g8 [& M4 j; B+ o% C. b0 T
  14.     #error "Please define a region in the compiler options.", K' H4 Q* d& S- d
  15. #endif
    ( i/ m2 i# u# H  P& R9 w" ]
复制代码
代码段2
  1. #if defined( REGION_EU868 )
      e; y. f5 \. b  j0 O1 h
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );" x8 {5 S5 Q& {6 i
  3. #endif7 ~- }( [' Y* L0 d
复制代码
代码段3
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)
    ; a( A0 H* Z( L3 v/ F5 Q
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};; ~- K/ E; m+ p( o1 F
  3. #elif defined (REGION_CN470)  ?0 G5 I# w) L& X+ u9 {) N
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};9 ]0 Q# r1 G- w  z* }5 I3 P
  5. #else
    - d5 o" V2 ~/ o8 M9 M: R
  6.     #error "Please define a region in the compiler options."
    7 W; o1 E4 _0 P7 m8 S& D% f, C: G
  7. #endif
    / \7 P: V( `. z3 K& I
复制代码

! f5 i9 e+ _0 I5 [; E; l8 k- S3 }0 _  D
最后欢迎大家加入,stm32/LoRa物联网:304350312
9 N* ]+ _0 s# m6 C/ j* r
# ^. R$ m" c: ^0 x5 ^  t1 @+ R
收藏 评论1 发布时间:2018-10-26 10:04

举报

1个回答
harvardx 回答时间:2019-6-12 22:08:05
有没有办法 可以让这几个target同时出现在左边的project列表里面 ,按下rebuild键的时候 ,可以一次性批量产生多个hex文件

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版