usb虚拟串口接收数据死机,打印信息为指针为0 异常

发表在 USB2019-12-4 15:50 [复制链接] 5 128

\ | /. G; i( w* W( |, }  l$ u8 e0 ?7 C
- RT -     Thread Operating System
6 T3 e8 H2 y2 Y, r9 w1 u+ d" j, [ / | \     4.0.1 build Dec  4 20193 H4 s: d/ \! ~3 ]! f
2006 - 2019 Copyright by rt-thread team
) @' F5 T/ q/ t! R3 L msh >
- P- H+ n* T% a* v$ N msh >3 O3 Q  M: \$ M! e
msh >  y7 j. ]* [3 v7 W0 w
msh >2 f8 Y6 S; j6 T
msh >
& K0 ?* O/ B/ i msh >(rx_fifo != RT_NULL) assertion failed at function:rt_hw_serial_isr, line number:1154
+ W5 O; i9 ~6 z/ K8 r! W
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-12-4 15:55:01 | 显示全部楼层
怎么解决
使用道具 举报 回复
发表于 2019-12-4 23:23:01 来自手机 | 显示全部楼层
打开设备时打开标志加上收发使用终端就好了
使用道具 举报 回复
发表于 2019-12-5 09:37:42 | 显示全部楼层
找到问题了,把这个rt_device_open(serial, RT_DEVICE_OFLAG_RDWR);
0 k* Y0 R/ z( [9 h! B/ ?改成这个rt_device_open(serial, RT_DEVICE_FLAG_RDWR);/ Y* h4 P$ o) h7 Y
就好了,没弄清区别
使用道具 举报 回复
发表于 2019-12-8 11:39:28 | 显示全部楼层
楼上用的什么芯片,可以发一下demo代码么
使用道具 举报 回复
发表于 6 天前 | 显示全部楼层
Reilly 发表于 2019-12-8 11:39
% A# N; T  `; O- G楼上用的什么芯片,可以发一下demo代码么

/ h' E( l3 \% M1 q! Z! _& Hstm32f103zet6   6 K9 {: q3 [& F5 ^" V

" Q0 F% ?& E9 {; d" `" w, _+ S6 A" k% E  i$ X1 C! H- Q
/* 用于接收消息的信号量 */
) W' q0 H: d4 ]+ O, Ostatic struct rt_semaphore rx_sem;5 g# _  j$ Y8 O1 X& N% t- e9 e
static rt_device_t serial;2 @3 u  d; d$ `: R2 }

0 q5 U. U% G; B4 Y, Z& q4 K6 u/* 接收数据回调函数 */
( o/ h, K) H& _* K- ustatic rt_err_t uart_input(rt_device_t dev, rt_size_t size)' W/ C0 G! w" A8 p. A2 y- v1 d; G5 B
{
3 M; ~- ?# P2 s. Y1 l& V6 v    /* 串口接收到数据后产生中断,调用此回调函数,然后发送接收信号量 */
. P' y$ P% S) C4 i0 E    rt_sem_release(&rx_sem);
, [  A! Y: q2 K+ m0 N
& Y2 X* _4 J6 y9 n2 T. F    return RT_EOK;
. J( u2 [$ v$ N}" j/ g* J; m2 s, }7 i0 ~, w  H. a

2 S% a' X% n  p& G. m2 Sstatic void serial_thread_entry(void *parameter)6 g0 [7 Y8 C) m- }
{
8 R) g/ Y9 x* h; H2 K4 u7 U    char ch;
$ J9 ]' Z' b- K9 A0 ]
* p! ]9 N" z. M, Z9 B; C8 r    while (1)9 V) u6 l' s" L, f
    {
0 Z$ j5 m& J3 R: i( P& K        /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */
$ [% A; `9 S) }, Z1 H        while (rt_device_read(serial, -1, &ch, 1) != 1)
8 }+ ^/ {$ l' c1 p        {! s) k* R5 Q+ L9 @% ]: x3 k
            /* 阻塞等待接收信号量,等到信号量后再次读取数据 */
# \3 ~9 V% I, M; o# H& G            rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
+ G$ n' B( u$ G. d2 g1 w        }
) ^, P( l4 i- p        /* 读取到的数据通过串口错位输出 */" C7 o) n% A. ^  m( d9 _
        rt_device_write(serial, 0, &ch, 1);) V+ K# B" s$ U) d2 X% }) |% @% k, ^
    }
- L/ U) N; b- T1 H, F& Y}6 {( F% V7 \8 r5 q$ c: w5 P1 f$ d

: J" I, a5 Q* n$ a' |0 xint main(void)
! Z' C) E+ c. y: k/ V9 {  X{* K0 y/ h1 g- K3 ^7 r
    int err = 0;% A9 J2 H/ t2 H! a" W; \
    rt_thread_t tid;: D7 E  T! K1 i
    //创建并启动交互任务
( A* O3 q9 F8 _9 p$ J6 y3 v' D    tid = rt_thread_create("led", led_task, RT_NULL, RT_MAIN_THREAD_STACK_SIZE, 25, 20);. R- X5 J9 U5 q" Z3 \
    RT_ASSERT(tid != RT_NULL);
! g8 s% Z5 G1 s7 B/ t0 Q- E9 [" m" d    rt_thread_startup(tid);
4 n& y+ e6 X3 a9 P; s' R' B
8 ~+ o8 [% Z" i9 z6 P    tid = rt_thread_create("iic", iic_task, RT_NULL, RT_MAIN_THREAD_STACK_SIZE, 24, 20);
3 U8 b0 ^% w- ^+ U1 i; z+ V    RT_ASSERT(tid != RT_NULL);
0 s4 m  h2 r# V+ t4 @6 T2 Y6 B    rt_thread_startup(tid);. l3 \( w7 R% s- z
5 U5 s' O% ?9 O3 e  P  R
    serial = rt_device_find("vcom");9 L0 T! A; B7 h+ P" i' z
    if (!serial)
- ~$ E. U  L- t9 H/ C    {
9 `  R! O* R+ r. w9 a5 q& g        rt_kprintf("find failed!\n");3 O* z) C% d6 ]- S# ~) d
        return RT_ERROR;
  v0 I2 i6 q$ c+ E    }
& Y6 y9 T7 }0 d8 c3 C+ g    err = rt_device_init(serial);
8 s- D/ g2 f3 }8 z    if (!serial)& T  d3 t7 k% W  Q) |! [
    {4 x. V- f8 ]- `! }( o, p
        rt_kprintf("find failed!\n");9 P) M5 I9 @1 P5 @/ x  I. f
        return RT_ERROR;) Y: v. N% e& f/ T1 g: ^: t
    }
* s  d. O2 T" A; o    err = rt_device_open(serial, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
$ w7 P% E& ?2 e' M, U, q' y) Y. E  m& U( E$ K8 y9 u) I
    //初始化信号量
) C3 ~$ S4 i2 ^2 X; \    rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);1 w- n& S7 a1 \3 Y4 O0 @

. v# y. @! N7 B8 c' m) @    // 设置接收回调函数, E, w* N+ A2 X$ M
    rt_device_set_rx_indicate(serial, uart_input);1 X: x" x$ ?' y8 r( O( O  q
9 q: L6 F5 K+ n5 m$ X/ a$ E% o  V' j  F" F
    rt_thread_t thread = rt_thread_create("serial", serial_thread_entry, RT_NULL, 1024, 25, 10);
7 V' d8 t  e0 Y" t6 J3 a$ \    if (thread != RT_NULL)& j5 l( P" I0 d& `: e1 Q
    {/ o9 M  J  Y6 h; S
        rt_thread_startup(thread);, ]8 ?/ a8 b/ G$ R  J$ Y! U
    }
; W- f+ Z+ V" ^3 ~( W  \: d1 z5 |8 p5 F2 R; ?) V' K5 ]
    while (1)- T9 @1 E8 w+ E* e" R3 b3 O
    {& g4 C& {2 g( P  b0 w
        rt_thread_mdelay(100);
. E: C! Q) F! {5 a$ h    }  d7 P! e$ v! e4 O5 m8 g& i( B

9 o6 r& T% e1 l, @& y    return RT_EOK;" ~/ V& ]4 s3 P1 U- D9 @' K
}5 N" b0 E, f. d3 C: l; G. x
2 t( A: j3 q7 }1 E: |

. H8 ?$ M0 i1 |5 h
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

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