小白关于rt_thread_delay的问题

发表在 网络学习营2019-7-7 12:15 [复制链接] 3 91

1金钱
本人小白,最近工作上要用到跑rtt的stm32板,但我以前没有接触过单片机。对照教程试着移植之后跑了一下led灯,在用到rt_thread_delay 这个函数后发现没有延时效果(直接挂掉了??),现象是两个led点亮后一直常亮。跪求大神帮忙看下  以下main源码:
4 b/ T+ u4 i* f; N$ D0 b3 o# [* x# r" \
" ^4 g# b$ d0 X1 S( c0 Z

# b7 {6 W: L6 Z% Y8 \- ?+ s#include "board.h"5 d. ]9 b! i: q2 P  Z4 h0 c* t
#include "rtthread.h"4 ~# K) E4 Q6 d. F; c

4 F# Q$ h. C5 q" n# X& @

6 n& k3 K1 P4 W static struct  rt_thread  led1_thread;- B# W' k) u2 X; R. Q/ k

6 S; s1 K" l( c4 L/ M

1 ?6 b* M/ y1 z  ~7 Q ALIGN(RT_ALIGN_SIZE)9 h7 C3 [, |; [  @
) b1 O. H% Z! h# v; n
1 \8 Q) U* E( z2 Y+ w8 r
static  rt_uint8_t  rt_led1_thread_stack[1024];
2 C# b  w6 b2 x) D% c% g' P
5 k/ k" @; v! q) W7 Z- O$ n% |1 ~ static void led1_thread_entry(void* parameter);
; q9 B6 F1 R( A" u( P, c! |4 d- F1 g$ C) n% ], W9 C; r
7 l1 V. E8 l  E& |  W4 \+ J, j
       
7 V# O+ Y  i6 mint main(void)
- ^' X* D/ [0 d{( v  ~' s6 W1 k! g) [
       
4 b9 W6 C! j" z' c0 E        rt_thread_init(&led1_thread,                            //线程控制块. Z! \' q2 t$ c% i9 u1 }7 i9 t
                             "led1",                                         //线程名字
- o4 w! h4 T) `2 J5 z" m' B+ D* W                              led1_thread_entry,                     //线程入口函数
% i  W/ q& r0 g1 g. \                              RT_NULL,                                   //线程入口函数参数
5 f1 o/ Z  L; V                              &rt_led1_thread_stack[0],         //线程栈起始地址8 e, r! Y0 Z1 w8 m$ d1 r+ {
                              sizeof(rt_led1_thread_stack),     //线程栈的大小
$ A# y, [) v# e: A! b8 B8 E                              0,                                               //线程的优先级
5 N1 X3 u( B! t  o" o                              20);                                            //线程时间片( q* F5 T2 _9 _  z' Y
                                                                 5 b3 T/ s8 w/ ]$ C% _( ^% b- R
        rt_thread_startup(&led1_thread);                 //启动线程,开启调度- C$ G% ]( _  Z  t- [% ?
}
0 S4 Y3 _- z, M4 q: e  P! D% s1 k0 k4 i

# z4 [  W9 m) L9 H" X) U. V: n2 P  Z& v9 p) _
4 G+ ~6 i- O+ a1 M6 e+ O
static void led1_thread_entry(void* parameter)  |, j2 A, n6 {1 w
{0 N  A. U( Q1 L3 _' ^8 M. T
                while(1)
0 F8 ?/ ?3 }; s0 m8 n                { / s5 R  {$ J8 z3 n" q8 r
                        GPIO_ResetBits(GPIOA, GPIO_Pin_8);    //led0 亮
5 Q8 g5 J3 g8 I, i+ D" _: y                        GPIO_ResetBits(GPIOD, GPIO_Pin_2);     //led1 亮
) [( \( a' _% C1 Y; q4 ^        . j% \+ ^$ F. S2 C
                         rt_thread_delay(500);                            //延时500个tick- [  u6 n  z0 H0 P! |
1 V) Z, G+ Q  t# j. X

8 j) b- T* b$ |* a& J  k                         GPIO_SetBits(GPIOA, GPIO_Pin_8);        //led0 灭2 j( n" \$ D$ f7 S$ p
                        GPIO_SetBits(GPIOD, GPIO_Pin_2);        //led1 灭
3 y5 [- H7 H5 x* w* _# I
* ~- Z. }) j  r4 |

. `9 A2 o! G0 K                         rt_thread_delay(500);                           
$ F  Q( k: r2 j                }
7 @2 `+ j- X! | }
+ C; t/ k  W! E7 A) i' t0 L. p* m* N
2 l  s1 r5 T, A2 J3 Q: M6 _9 |& _4 c+ c5 r' r1 b
, A: c- C+ d( ~. d* m- c1 z  k
: `: l# b$ f% V1 M' k, L

" m' F9 D3 I2 F; x+ f' ^& S, c( F) e& a& K" y& K: C4 N( j
' G' W9 x: F. a1 N# u$ q

使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-7-7 16:22:38 | 显示全部楼层
哪个 BSP,什么板子?( p3 R/ p3 d. e& ?) n& P/ t' |8 n

% O- x' @. H6 q! t% Z% t, S  i- K' g
直接挂掉了?
是什么现象,日志什么样?" f3 |8 x3 r! C' i* H5 h+ H& {
使用道具 举报 回复
发表于 2019-7-7 18:53:41 | 显示全部楼层
MurphyZhao 发表于 2019-7-7 16:22
3 q; X3 |& r( P6 z% c哪个 BSP,什么板子?4 e6 H7 S: E& Z

6 @- O6 I2 e. Q9 l% P- k' e 是什么现象,日志什么样?

1 ~+ [* E! ^* W5 s0 p$ I5 J7 w你好,问题已经解决了。按照教程我加载了nano版本的,板子是正点的f103rc,操作教程用的野火的。这个工程在搭好后运行的时候我发现报如下故障“..\OBJ\LED.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by board.o and stm32f10x_it.o).”, 百度一下发现有网友也存在相同的问题,他们的解决方式是把重复定义的一个屏蔽掉,我当时不理解就直接把board.c中的void SysTick_Handler(void)给屏蔽掉,后来才明白应该屏蔽文件stm32f10x_it.c中的这个函数。闹笑话了,因为我没有这方面的基础。不过还是谢谢你过问了
使用道具 举报 回复
发表于 2019-7-8 09:24:31 | 显示全部楼层
qiudashan 发表于 2019-7-7 18:53
  W* v% {6 \2 M9 H你好,问题已经解决了。按照教程我加载了nano版本的,板子是正点的f103rc,操作教程用的野火的。这个工程 ...
( V- p4 V2 S* j, n* @5 Y

1 G# L" i* V$ q& V9 K% ]/ |+ sSysTick_Handler 是用于系统调度时钟的,需要使用 board.c 中 RT-Thread 定义的
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

快速回复 返回顶部 返回列表