- #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话 执行下面的数据
- h4 z8 Z# m, B - #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式5 _0 ?0 m& v4 C( K$ \ p' ^2 w, k* B
- struct __FILE
5 P7 N+ v9 R( S$ |8 ], I - {! F4 E/ X$ x5 W( ]9 u9 h, P) g \
- int handle;
: H" q, f9 j* y+ Q' A - };
& X, H. |: k. y5 K, k% Y - FILE __stdout;/ B+ K( D4 L' s: W7 q
- _sys_exit(int x)//避免使用半主机模式+ Y% ?7 N" u d7 [. b0 S; W
- {: K6 ~5 _0 h) p% G
- x = x;9 Q, L* A, t! D, L: h
- }8 N, o2 A! b3 a' G4 Y% I6 H
- int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上4 P) S, E- p5 V
- {
: X/ o* o, A% t$ m - while(USART_GetFlagStatus(USART1,USART_FLAG_TC) == RESET)//等待发送成功9 ~ \1 O$ r/ B& ^1 Q- a
- {}
8 b- s3 O6 c0 v. x! @) [ - USART_SendData(USART1,(uint8_t) ch);//发送数据8 L, d& }. u, F8 G% F
- return ch;# v$ ^$ w/ z8 n9 U( L1 R$ H1 I
- }! W$ K$ ` j& Q6 ?- r
0 R" k- P2 Z) H0 f1 k2 b
$ \8 q: u a. Q' O4 H0 g. e0 C- 在这里希望大神能想详细讲解一下#ifndef 到 #endif之间的东西,谢谢。
$ q" e* w1 Z( V& E4 ~( \3 U - int ferror(FILE *f)2 Y( m4 J8 D v/ N( y$ u
- {
/ t* }* E* ^' a% j1 | - return EOF;
; L3 ?* _) I2 G$ W( ^ - }7 r, a! L6 Y8 f& k
- #endif1 N6 O7 j, Q& [0 I
- #ifdef USE_FULL_ASSERT
8 Y0 h7 j7 o+ I& N8 c4 p4 t/ [ - /*************
$ g2 f8 G3 H2 r A* Q' ^ U - 如果你定义了USE_FULL_ASSERT
% u) D" F* E$ i5 s3 b: {; [& D
2 i8 h! s' B( E* ^- 就可以在assert_failed,加入:
+ |' v/ S+ K% y+ b- F( W - printf("Wrong parameters value: file %s on line %d\r\n", file, line);% o t( [* M! C& X& T& p* F
- 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。4 T* Z3 l* P p# S% p& U
- 这样就可以方面调试信息了。
7 K6 l; l( Y/ y) [7 M - *********/! g, d, u5 x+ X' I& U
- void assert_failed(uint8_t* file,uint32_t line)//输出错误信息
' D- p9 n5 V$ R - {
; g3 `, F( u/ K" ^" m" | - printf("Wrong parameters value: file %s on line %d\r\n",file,line);+ B) g# e9 s+ L- r- v
- while(1)
" R& m* [3 o; ^% L: P* v6 { - {
# I# d% t' V# d( K - }
" I$ S, d: n4 ` - }% u& z! I$ m0 d8 X; |8 b' c
- #endif; k8 ~* t7 [ ]
复制代码
4 r* d5 \' a e! b/ w* Q' `* Y2 ^+ b* O1 _; M) ]1 o* [- e1 G
|