- #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话 执行下面的数据
& s |3 p K& c - #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式5 E$ t' T: S, x2 L1 h
- struct __FILE+ b3 V, H! K* q7 c" H5 H" G
- {8 E I( o# n# A$ S- B% I3 s' |- P4 Z
- int handle;
' [# n7 j7 m- n# Z' }2 P, H( Z - };
3 M# H' L4 {( R, z# D2 L - FILE __stdout;$ u6 L2 l* y: [0 v4 D- `9 J; w& O, r
- _sys_exit(int x)//避免使用半主机模式
5 \- N8 [/ ]( L8 P& n4 G - {' W7 _! k2 \7 L: F7 ^/ E
- x = x;2 S5 Z5 P! y3 |( G
- }
0 E+ G* z. Z5 o7 d; |# f - int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上
3 `, Y8 b- e8 R7 S - {
4 H. h8 l4 H4 \ - while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET)//等待发送成功
2 s+ I5 `. W1 i( ` - {}) b* L- k! N! r$ f/ V! G6 ^. |
- USART_SendData(USART1,(uint8_t) ch);//发送数据
6 X/ {6 ~4 n9 s, v: _2 ?* Q - return ch;
9 p1 {3 x, H$ `" p; R" I9 O - }* x+ `1 T* n" R6 b) i9 ~4 A) L1 K- Q
- 8 Z q- g0 v( X0 G7 t* m
- 7 a0 s& j- U+ D
- 在这里希望大神能想详细讲解一下#ifndef 到 #endif之间的东西,谢谢。; r* h( u" J: {# z, k9 C+ L8 _
- int ferror(FILE *f)
9 T" h) V9 f: h: w y ]0 V5 n - {0 m5 e7 S4 |( Z8 S( A( C
- return EOF;5 o9 B, m/ Y7 V: C4 ]! ~- N$ l; o2 \
- }
9 |) j" S5 w" J - #endif
" c' U; X5 L3 I% I0 g" @2 d - #ifdef USE_FULL_ASSERT5 o8 S1 y$ E9 Q C+ g3 w+ P
- /*************' w) [% ?7 `$ [# \
- 如果你定义了USE_FULL_ASSERT
& n9 G& z+ r& [* b6 F" e5 Q - 8 P+ }. o2 q9 q7 D) i2 A# ~
- 就可以在assert_failed,加入:
# B* P, ?1 Q9 {9 H, K" Q) b - printf("Wrong parameters value: file %s on line %d\r\n", file, line);
$ t' X( n8 k# x0 B0 W s - 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。
+ ]+ Y& @7 b4 m! } - 这样就可以方面调试信息了。
+ D# f% m# [" X2 f - *********/
2 l/ _) d1 _" P% Q7 A8 K - void assert_failed(uint8_t* file,uint32_t line)//输出错误信息. U r. X3 e r! {) l
- {1 k5 ~& G& [. _2 m- V
- printf("Wrong parameters value: file %s on line %d\r\n",file,line);) ?. p" H- l% m6 D* u! x( @, i
- while(1)
k& C, H( S$ B - {
: e* \: @! L* L/ K0 x- Q4 M% T) r5 y - }1 [3 ^# x# y" s, T2 W$ V
- }
' | b$ G, }* b1 G - #endif
- ]$ \# a) d$ T6 C* q' ]
复制代码
}/ [0 a4 ]0 s+ {2 @6 b7 ^2 p/ e# s3 R
|