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

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

[复制链接]
freeelectron 发布时间:2018-10-26 10:04
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑
/ e7 T' {4 m# V4 T. R/ h8 H
5 V) E+ D- J9 U+ e8 O0 \0 P6 I
   
8 f1 F$ w& P5 J7 U# S9 {% ?6 f# B
    最近在开发LoRaWAN的其他频段(EU868US915AU915AS923RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png
! Q2 {; E* r! q2 z7 |, Y# J
   
! i1 {+ }0 u* ~0 a# ]$ l) ~
自己尝试了一下,分享出来2 O8 }: t8 G. y6 A! Q/ w$ K
1、打开,Mange Project Items…
2.png ) M. L  p5 n* A# z+ e$ N
+ e8 P! }5 H! W6 u& @

  {+ U0 a; y9 T
2、增加不同的Project Targets
3.png
4 y) T; x) F! ^/ x8 a4 F/ e+ [9 ^9 H. [$ Q" S2 }
3、打开“options for TargetLoRaMac-RU864”针对不同的target,可以设置不同的参数
! J, p$ W* t* x' h
4.png
: O% @) q/ ~% I7 y
& J# B, F& c7 H: M. ^* W8 Q
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png
9 k) _- c8 m0 S, z) K. Y; Y

8 _1 |, w% t) K* R5 T7 O

* F; k& k( C3 w: B1 N7 D7 J
5obj文件夹分不同的target
6.png   
5 U& d( f: o4 [  t) N. v$ R
6lst文件夹分不同的target
7 F& W) n4 D/ a7 J% _+ Y6 U. r
7.png ( M+ j. u4 m3 D$ ~! y" f4 E
7、单个工程下多个target共存                                                                              
8.png

' w! j, m$ F5 |. @
部分代码示例:
代码段1
  1. #if defined( REGION_AS923 )
    % l7 z) C+ C6 L
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );- Z) K9 C3 ~: f" @6 ]
  3. #elif defined( REGION_AU915 )
    ' @) Z* k- }& R. J
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );# _3 w2 ^# Q  D1 n2 e) N
  5. #elif defined( REGION_CN470 )& H7 w  a. u' a
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );/ C. N' m3 X& C9 O/ N" k
  7. #elif defined( REGION_EU868 ); C" T4 K1 Y- i) K% v# S0 u, C
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );
    & ^; f- ~$ P1 ?1 p- X6 o- P
  9. #elif defined( REGION_US915 )" C0 F5 v( q* L2 x$ a
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );" v( {4 }$ ^3 X3 C" M
  11. #elif defined( REGION_RU864 ): e+ Q  S, C3 z- ~* s- V/ K3 n
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );# m, }' h) I$ u7 Z9 b, r7 K, Q
  13. #else
    , b8 F* P: }2 h+ I
  14.     #error "Please define a region in the compiler options."# H$ o8 L8 V) a! e) x" r) B7 u
  15. #endif
    - ]  d" D  u% u: m& {
复制代码
代码段2
  1. #if defined( REGION_EU868 )/ R7 ^8 K- F' E5 [7 s* |  H
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );& z5 r- M- J2 h
  3. #endif% `/ K* v& |) e! u4 B
复制代码
代码段3
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)
    ' }: Z2 s- E) D5 F  j
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
    ( u$ t1 _1 H) ^
  3. #elif defined (REGION_CN470)
    2 [1 A0 h2 @% D
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};
    ( p. {/ s! t3 k0 @$ Q! h% U
  5. #else$ Y: j% N/ T! }3 v2 i
  6.     #error "Please define a region in the compiler options."0 u! a6 s1 T9 [) V7 S# ^
  7. #endif$ j  L$ _' t* P9 p
复制代码
8 n' `: ^# f' V8 U9 W

' |2 X! d; Q- u4 Y5 n( M" `( g: R最后欢迎大家加入,stm32/LoRa物联网:304350312
) d, D2 U$ m4 {/ b' V! b. a& R9 `
/ G# L7 Q% R' B+ O# P# F
收藏 评论1 发布时间:2018-10-26 10:04

举报

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

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版