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

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

【经验分享】关于STM32F3标准外设库中的一个语法错误

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:20
错误代码段如下
7 M7 x. f  d; ]% f/ u; [( c( {4 h; E/ P( Y
  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)
    & ^; z; {6 g3 I' M8 L9 ~2 Z
  2. {
      Z" w7 P* A* g
  3.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));
    7 F' o" g6 y  i! F- w- N
  4. : d1 ]+ }1 R* e) w
  5.   FlagStatus bitstatus = RESET;  
    , P- ?0 R5 T. e  V1 c$ \

  6. / o0 X# Z, i" e7 f6 a
  7.   switch(TimerIdx)
    . g5 g) @4 Z8 |7 }3 u0 s
  8.   {) R4 K6 j& ^# B: R+ Z, L1 J- z
  9.     case HRTIM_TIMERINDEX_MASTER:8 @& b( H# I2 B/ T; [
  10.     {& X0 N. k+ T  z* d% L, z( E1 o
  11.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)% M% v6 P4 ?1 o8 D3 ^, M" y
  12.       {/ ?' T9 ~5 \3 f- W7 O  Z* E7 V
  13.         bitstatus = SET;
    # |; t3 N; o$ T+ P9 q
  14.       }" }$ k- G- l! U1 R6 `; {
  15.       else
    6 u# y7 G  Q0 P6 h# @. `
  16.       {% X! t! ?% a2 ^/ |; D+ h9 G/ N( z
  17.         bitstatus = RESET;  b2 t1 m7 ^& y7 w: V! [" V; I7 X
  18.       }
    / o& q. L- ~: z
  19.     }8 P( \5 ^1 @+ s$ r, M
  20.     break;
    ) M1 U( K) I2 c7 [! F$ P# e
  21. 2 Y$ S* u$ ]0 s, ?' ^
  22.     case HRTIM_TIMERINDEX_TIMER_A:1 r9 v- b$ f; Q3 B$ I* b# U- T5 J4 o
  23.     case HRTIM_TIMERINDEX_TIMER_B:' [6 d4 |- I5 l
  24.     case HRTIM_TIMERINDEX_TIMER_C:. d" f! D4 y# _. K6 ~/ ?
  25.     case HRTIM_TIMERINDEX_TIMER_D:& T% H, q' m! j& B5 C, F! v
  26.     case HRTIM_TIMERINDEX_TIMER_E:
    8 v  ~+ G' \$ p6 M7 \2 ^
  27.     {
    7 Q! d$ {8 i  x  @4 i& v
  28.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)
    2 i. {& l8 ?, F2 g, m7 r
  29.       {
    7 G: g5 l* n; G! d1 D
  30.         bitstatus = SET;1 i  ]9 M5 l/ v% I: ~- D
  31.       }
    8 Y* F* _- j! k% t) O- c
  32.       else6 \, ^8 q; v! i0 u( j/ V% x# J
  33.       {' U7 }% Y) K& F- a# Y( D
  34.         bitstatus = RESET;5 r$ C  A; l6 Y1 O5 _5 R
  35.       }9 D  O* E$ J; }+ ]
  36.     }
    8 p3 Q: z7 p, t- W
  37.     break;
    2 d0 Q5 ^: E0 d0 p% m
  38. 8 I. k7 f  o  i& X7 w: [, k4 u
  39.     default:# c1 e# [. \  D, j
  40.     break;  
    1 A! t& [  C; `# Y; m* D' H
  41.   }      U* Q  }8 V+ j% J" s- T: u
  42.   return bitstatus;
    + t+ {# J( b- T) {
  43. }
复制代码
; [0 _+ M# X0 w2 o! v
编译报错如下
* k9 I- I3 P, I- O7 U, l4 s( J
* @! x, ?0 L  D3 D+ h
  1. ..\Libraries\STM32F30x_StdPeriph_Driver\src\stm32f30x_hrtim.c(1139): error:  #268: declaration may not appear after executable statement in block
复制代码

% I  l' W) O* T' A# P5 N! \( Y0 n修改方法:需要将 FlagStatus bitstatus = RESET; 这一段代码移动至 assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));之前。  D7 h9 t7 O9 _+ {- |

5 f1 u* M) Q' p% f即变量的定义要在语句之前。
, b& Q. o; }6 m5 n- h' {* g3 Z2 q- o
) V4 s' K; G. _; C: T/ K修改后的代码如下:
! I2 @6 x- F% A+ Q! I6 M% _  k4 J, U  ^2 B0 b2 d, v+ u
  1. FlagStatus HRTIM_GetFlagStatus(HRTIM_TypeDef * HRTIMx, uint32_t TimerIdx, uint32_t HRTIM_FLAG)" l/ L* _! `9 n3 W
  2. {
    7 ~7 P* ^4 A! ]: D* e7 B
  3.         FlagStatus bitstatus = RESET;
    ) {2 w' X/ r6 J4 f1 ?
  4.         / p8 `' e  ?9 G9 p) X/ ~, f" J8 b
  5.   assert_param(IS_HRTIM_TIMERINDEX(TimerIdx));  
    $ l. A; |: y9 w
  6. 3 W  K! v/ l6 g& k( H( s; L5 X& }1 x
  7.   switch(TimerIdx), X& L. c, x" O  C
  8.   {# x( z' _/ L: x8 F5 N  k
  9.     case HRTIM_TIMERINDEX_MASTER:. n. y" x+ [: V
  10.     {
    ( [; H' b, p6 I4 U7 N8 F& w
  11.       if ((HRTIMx->HRTIM_MASTER.MISR & HRTIM_FLAG) != RESET)7 G* V) \: S- i2 {8 B
  12.       {' _4 u4 Q' ]3 Q7 T
  13.         bitstatus = SET;
    * P# P2 A1 ?' `( h
  14.       }
    & m# v. r8 H; H6 f' \1 [
  15.       else
    : t( L$ o: y. G
  16.       {) _" N* L- }& p
  17.         bitstatus = RESET;
    - ^; J+ T- M4 A0 a" D7 M/ Z
  18.       }$ \- w6 Q, G$ o3 ?( ^" Z
  19.     }
    3 d# T+ a8 S0 ?
  20.     break;
    5 h4 O9 [7 K3 W: U8 B  U
  21. $ _6 I: F4 {9 w' _
  22.     case HRTIM_TIMERINDEX_TIMER_A:4 \6 a. E( }% B# c5 v* s
  23.     case HRTIM_TIMERINDEX_TIMER_B:
    1 q* @* Q: ]6 J/ j9 N
  24.     case HRTIM_TIMERINDEX_TIMER_C:
    2 s  i5 j+ h% |& g9 y2 R5 j7 Q
  25.     case HRTIM_TIMERINDEX_TIMER_D:, d: l3 }; e1 g4 P/ d  s
  26.     case HRTIM_TIMERINDEX_TIMER_E:
    , v/ ]8 U; \# j2 p$ t) f
  27.     {
    / w1 z. d) }( J
  28.       if ((HRTIMx->HRTIM_TIMERx[TimerIdx].TIMxISR & HRTIM_FLAG) != RESET)0 B" A! a& E  ^
  29.       {
    0 b8 N! p# }2 m
  30.         bitstatus = SET;% }+ Q4 ~+ _- p+ ?
  31.       }* r8 r1 H' [4 x" X
  32.       else5 Q' D9 j2 E* n+ s% n1 Z
  33.       {
    . }7 i2 H1 k! i
  34.         bitstatus = RESET;: t- ]5 p5 r3 H  G( Y( b4 W
  35.       }
      O( [, w; p" L% y
  36.     }
    ' k3 y+ x$ r$ T/ U6 P7 {$ F( A
  37.     break;
    4 e+ l- P5 P4 L9 S5 t8 F7 R
  38. 1 R" f3 [+ k8 t" F9 L: F# u7 Q0 r
  39.     default:
    : I) b- e+ W2 S1 J$ O: ]1 M) h
  40.     break;  : }0 X& j( t" y5 `/ ^/ a' b+ X& m$ e
  41.   }      `( J1 S9 r% `: g
  42.   return bitstatus;2 Y( A3 q8 B# ~( x2 h; H. z5 d
  43. }
      s! ^' C' Z* H# t* e! y, h
  44. : @9 O+ S8 O( a. c
复制代码

( H, B) ~' Q8 `
收藏 评论0 发布时间:2021-12-6 10:20

举报

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