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

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

[复制链接]
freeelectron 发布时间:2018-10-26 10:04
本帖最后由 freeelectron 于 2018-10-26 11:00 编辑 $ j% m# {& h3 v2 N: a- M) w9 a1 H3 F2 }

  }2 {; f" z1 Q& M' z# k: W) O# S
   / I# K) u+ N4 o1 a
    最近在开发LoRaWAN的其他频段(EU868US915AU915AS923RU864),这些和CN470频段在MAC层都是一样的,在PHY层是不一样的(如:频点、占空比、发射功率等)。在开发的时候大部分文件都是共用的,只有少数文件不同。
  当然,我们可以把这些文件在复制一遍重新建一个工程也可以,但这样就显得有些冗余。看到LoRaWAN官方的节点代码里面,一个工程下有多个target,不同的target用到不同的文件用宏定义的方式来区别。
1.png * L# V. F: C( Y$ ?) s4 g
   
- K. U- S6 P8 x) ^
自己尝试了一下,分享出来7 g' n( L! F3 d% R  f6 {2 G3 C
1、打开,Mange Project Items…
2.png
0 E1 z4 K3 y; ^$ L6 _* h! G$ Q
$ `. w/ ^0 @, t& r: \) m
6 {9 O$ O6 i( a- f, Z! |
2、增加不同的Project Targets
3.png 0 B, w0 x, Z0 i0 p. V
/ l+ Y. E. I! A) v# W4 a. R4 g
3、打开“options for TargetLoRaMac-RU864”针对不同的target,可以设置不同的参数
: y+ c0 }- o: o9 j% q, u
4.png , @; l0 X9 Q. `; i) d: q% h

) F, H0 i' l' E$ @( ~
4、设置不同的宏定义,生成的hex文件的名称、obj以及lst文件的路径等
5.png % a8 f1 F, d$ T1 x

8 F& v4 i0 r! t% V
6 ?, I* c" F+ |9 a3 `
5obj文件夹分不同的target
6.png   ( C! [  b. s) U1 H! N0 o
6lst文件夹分不同的target
9 c6 U8 P  I) U; ^- R
7.png - t7 J0 [/ g  Y
7、单个工程下多个target共存                                                                              
8.png
; \5 M& |" U3 {! ]" w) D% s
部分代码示例:
代码段1
  1. #if defined( REGION_AS923 )& n" T3 H# ^5 r# L8 Z) \
  2.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AS923 );+ i0 e: `! k8 Y# l$ f
  3. #elif defined( REGION_AU915 )
    - A0 m6 F3 N1 a( h9 r) [# [
  4.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_AU915 );% [& x$ l2 t* H1 ]; B- I
  5. #elif defined( REGION_CN470 )
    - T+ W! @/ Y: t& r1 B" r8 f) [
  6.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_CN470 );
    7 H# ?; j$ N! {2 {' u4 \
  7. #elif defined( REGION_EU868 ): Y3 n) u# d# C3 [
  8.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_EU868 );/ p: B& a6 `/ |- `( b
  9. #elif defined( REGION_US915 )
    : e2 P. F. \8 j
  10.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_US915 );! i8 {7 x' Q& q) o( k, c- D2 _
  11. #elif defined( REGION_RU864 ), r2 U) S5 q9 D! d! [
  12.                 LoRaMacInitialization( &LoRaMacPrimitives, &LoRaMacCallbacks, LORAMAC_REGION_RU864 );
    ( p% N/ ~3 ?' e" m3 u# E
  13. #else- D# |+ [5 M  g5 x8 X: `: l
  14.     #error "Please define a region in the compiler options."
    : J. ]2 l# w" x; m
  15. #endif6 Q+ A2 x( n, Q# }- b
复制代码
代码段2
  1. #if defined( REGION_EU868 )
    - T' B: e$ i* C& M8 Q
  2.     LoRaMacTestSetDutyCycleOn( LORAWAN_DUTYCYCLE_ON );
    * w6 B4 F( H5 H( Q7 b% q3 i
  3. #endif6 Y  ~: c; z2 E2 }" Y5 W
复制代码
代码段3
  1. #if defined (REGION_US915)||(REGION_AU915)||(REGION_AS923)||(REGION_EU868)||(REGION_RU864)
    : [" n( w4 `0 q6 r2 i: {# \
  2.         uint8_t power[] = { 20 ,18, 16, 14, 12, 10, 8, 6};
    1 R/ m- `. H' R" a
  3. #elif defined (REGION_CN470)$ d8 ^- O. O* _+ P( l. i
  4.         uint8_t power[] = { 20 ,19, 17, 15, 13, 11, 9, 7};
    . C5 T, X5 n/ W* A0 D- J
  5. #else2 q9 @( L7 V0 U$ K& @/ \
  6.     #error "Please define a region in the compiler options."
    3 a* {, S# w8 ^! B; G; y* ^  k# S' o
  7. #endif
    9 {3 S3 g  i2 Q$ q; e
复制代码

. \+ `" ]; {7 E$ p
% u. Z8 _0 U; b3 i: |; a最后欢迎大家加入,stm32/LoRa物联网:304350312  p4 [% q: o; u9 y! k  P
* [1 W5 }$ ]+ u; E4 C
收藏 评论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 手机版