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

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

[复制链接]
freeelectron 发布时间:2018-10-26 10:04
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑 * y/ q+ C) R7 F4 N

3 p* {# _4 w$ v0 a3 r6 ^0 ?8 u
   
& T0 }. x: o$ A- x( L. R/ F
    最近在开发LoRaWAN的其他频段(EU868US915AU915AS923RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png + F; S) l) b& o& |% b* _
   
9 S7 s5 P2 `/ s' u9 D& L
自己尝试了一下,分享出来3 g- W% |' E4 q  w6 j% d, w" s
1、打开,Mange Project Items…
2.png
8 |& R3 [: F) _
; [4 f' S+ C: g! b+ h* Q( A
# R9 ], @0 R+ ^7 p- F5 m9 H
2、增加不同的Project Targets
3.png
% B# o4 a, B/ T9 y8 U! o7 Q
0 d  e4 J. p3 A) P) ?
3、打开“options for TargetLoRaMac-RU864”针对不同的target,可以设置不同的参数- M5 P9 M5 I+ o6 m9 Z
4.png $ ~6 L7 x. ]+ e/ m9 h

" @( o- i4 H$ L$ P7 E+ [. R
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png 6 H; o; X4 }. D
5 p/ I; F9 j6 N5 R

7 Z+ g  M! u% ~: o! \) h5 I
5obj文件夹分不同的target
6.png   
- d  K) `# L+ J1 F2 b( q
6lst文件夹分不同的target9 I$ d8 r+ Q8 |- x9 M- s
7.png
2 T$ F6 p' M  z6 k
7、单个工程下多个target共存                                                                              
8.png

* ^9 k' k6 |7 B# A$ m. \! g
部分代码示例:
代码段1
  1. #if defined( REGION_AS923 )
    - ?+ j/ Z# o9 g8 a7 y9 B: s
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );
    6 g& {0 r2 J: x- g
  3. #elif defined( REGION_AU915 )
    $ J, s3 ^% l8 {4 g' J6 }9 Z, ?
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );2 v4 b: z3 ^2 h1 [
  5. #elif defined( REGION_CN470 ). \1 M2 Z6 X7 N8 U, \  c
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );9 M% ?6 c! C% ^7 h( [
  7. #elif defined( REGION_EU868 )& [: _) w: s8 B: k5 F) {2 G# h  h
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );
    0 s, n* N0 W7 p
  9. #elif defined( REGION_US915 )9 n5 n; A0 ~' }7 d
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );# j, W' Z8 w2 }# q6 s
  11. #elif defined( REGION_RU864 ), ]# ^, k* ]; D& a; U
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );
    5 C& A' Q, ?. K
  13. #else
    4 T) K9 v: _2 `' _% N# W
  14.     #error "Please define a region in the compiler options."* m4 d' y8 h7 q$ F- p# ]4 T
  15. #endif
    " V2 T$ B' E! q4 g) t% {' S+ q
复制代码
代码段2
  1. #if defined( REGION_EU868 )- |6 ]% O4 E" t+ _  o, V
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );
    , G/ P1 N3 |, Q# L% {; A/ h3 }5 y
  3. #endif
    2 @& ?9 N4 n0 ^! }
复制代码
代码段3
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)0 [. A. c) T% z+ G- ?
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
    : r- t. T2 C# D8 o# w
  3. #elif defined (REGION_CN470)
    5 ]' I3 I  ^# F1 S; ?
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};
    5 ?. o& Q4 [# H
  5. #else5 z( i  K# Q8 [' `1 q. ^# z" u6 u" r
  6.     #error "Please define a region in the compiler options."
    , @8 o; M' s) W6 E* _; @
  7. #endif$ f; V5 C6 v' Y* W# o! Z
复制代码

: W( f# E1 _8 |2 c6 J( m% |2 A/ }) e& R7 l/ k( P) O
最后欢迎大家加入,stm32/LoRa物联网:304350312
! S' s6 Y& e6 N  A! A9 P8 H, V% r, b- \$ ?9 _
收藏 评论1 发布时间:2018-10-26 10:04

举报

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

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版