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

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

[复制链接]
freeelectron 发布时间:2018-10-26 10:04
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑 ; ]7 G( T9 F+ F' b

4 a" _. B+ h% r
   7 w5 l0 ?  S2 b
    最近在开发LoRaWAN的其他频段(EU868US915AU915AS923RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png
* {& W0 b1 ~1 g. k1 L: ~! L& _
    - `1 S  h1 Y4 \9 j
自己尝试了一下,分享出来
( L1 G; \' z& V8 ?: O2 F. n
1、打开,Mange Project Items…
2.png ' Y5 o( i. |: U( c$ W

) a" i+ _6 ~. [7 ]3 k. {- I+ r  G+ H2 q  Z& |2 g
2、增加不同的Project Targets
3.png
3 D1 w4 n+ F& u/ f' D- J$ b; ?, \  K: Y0 {) o6 L
3、打开“options for TargetLoRaMac-RU864”针对不同的target,可以设置不同的参数, o5 ^" r9 G$ S0 p
4.png
8 _7 M1 `7 p6 n* T# J4 G

! h. L, j0 K. h) p$ d9 S
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png 0 H' L" `1 B3 J

2 u6 \7 c8 A& H% R; o
  _' m5 d  \0 R" T- @# g  v# @
5obj文件夹分不同的target
6.png   
1 Z) }  E! I# r1 n7 k: i0 H# D
6lst文件夹分不同的target
8 \+ U& S; F4 C2 B7 R
7.png
  w9 l( z" y6 H/ f2 R) \
7、单个工程下多个target共存                                                                              
8.png

# M3 Q, d: f  g" `( \
部分代码示例:
代码段1
  1. #if defined( REGION_AS923 ). r& l) f& h2 ^9 z( D
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );' p# L. }3 D3 g' h
  3. #elif defined( REGION_AU915 )/ A- ?; L  [* |# R. F6 V
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );* T) }/ N1 e: d7 B
  5. #elif defined( REGION_CN470 )
    , w: P3 Y- ]# L! c4 C, z5 l+ [
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );
    & ~* x3 `' Y* O" z; [3 Q
  7. #elif defined( REGION_EU868 )5 Z/ t" @9 Z7 i9 Q
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );
    " X' W4 z( w' z, p& T
  9. #elif defined( REGION_US915 )" f, D" X# Y2 h$ h
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );4 L4 j+ @! B" f4 O4 f/ v7 K
  11. #elif defined( REGION_RU864 )
    ; c9 m, D) f+ ~* J; O
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );
      U6 ^) [4 J) p0 h
  13. #else$ T; T, y$ e* a  c9 `& E
  14.     #error "Please define a region in the compiler options."& W3 b7 l( F. P7 E9 `: W1 M
  15. #endif! U; O4 w( @: Q& O
复制代码
代码段2
  1. #if defined( REGION_EU868 )
    5 `  H) ~! M. z2 v* Q3 b
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );
    3 C8 x8 Q: w& k* K& Q
  3. #endif
    ' @( e& }* I- `3 V- |
复制代码
代码段3
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)
    ; g6 n/ J5 R; L1 S4 h$ r  q9 O
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
    ) k' T9 z& _% l2 W  G7 N1 y
  3. #elif defined (REGION_CN470)+ L% d" Q4 `, D& v% m
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};
    - L& c1 ?' \& P8 @; m( C3 D
  5. #else+ N7 K4 `( ?  [: D# y7 M" f0 @
  6.     #error "Please define a region in the compiler options."
    + U' v! V' R; ?' J' G
  7. #endif
    " n2 `" J* v- t
复制代码

; k6 V+ V9 s: K0 S$ H: l; B6 l! U- i) Y$ n6 I" J
最后欢迎大家加入,stm32/LoRa物联网:304350312
* v2 O$ T" T1 K0 ]. k7 e" ?' g. u" e; W: f& Q
收藏 评论1 发布时间:2018-10-26 10:04

举报

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

所属标签

相似分享

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