Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
rt-thread线程调度异常在stm32f103芯片上
发布于 2017-01-24 14:40:49 浏览:4917
订阅该版
问题: 程序在运行中出现有两个线程不执行了,motor_ctrl_entry和can_send_entry不执行了,而其它线程都正常执行,错误是在反复运行后偶尔出现的,不容易复现,但是存在。在调试J-link状态下运行,出现问题时,打断点,用到的中断都正常,其它执行的线程也正常,就是出问题的线程哪地方打断点都运行不到,若是说高优先级线程死循环但是低优先级线程还可以运行,不知道哪里出的问题。 大神帮忙看看,谢谢了 ```int rt_application_init(void) { init_modules(); rt_thread_init(&watchdog_thread, "watchdog", watchdog_thread_entry, RT_NULL, watchdog_thread_stack, 512, 10, 5); rt_thread_startup(&watchdog_thread); rt_thread_init(&motor_ctrl_thread, "motor_ctrl", motor_ctrl_entry, RT_NULL, motor_ctrl_thread_stack, 1536, 11, 5); rt_thread_startup(&motor_ctrl_thread); rt_thread_init(&can_send_thread, "can_send", can_send_entry, RT_NULL, can_send_thread_stack, 1024, 12, 5); rt_thread_startup(&can_send_thread); rt_thread_init(&can_recv_thread, "can_recv", can_recv_entry, RT_NULL, can_recv_thread_stack, 1536, 13, 5); rt_thread_startup(&can_recv_thread); rt_thread_init(&servo_comm_thread, "servo_comm", servo_comm_entry, RT_NULL, servo_comm_thread_stack, 1536, 14, 5); rt_thread_startup(&servo_comm_thread); rt_thread_init(&rf_comm_thread, "rf_comm", rf_comm_entry, RT_NULL, rf_comm_thread_stack, 1024, 15, 5); rt_thread_startup(&rf_comm_thread); return 0; }``` ```void can_send_entry(void *parameter) { U8 ucMailbox, ucSendCnt; while (1) { ucSendCnt = 0; while (usTXRead != usTXSave) { ucMailbox = CAN_Transmit(CAN1, &stTxBuff[usTXRead]); if(ucMailbox == CAN_TxStatus_NoMailBox) { if(ucSendCnt < 10) { ucSendCnt++; rt_hw_us_delay(600); //>126bit*4us } else { rt_thread_delay(1); } } else { usTXRead++; if (usTXRead == LCAN_TX_BUFLEN) { usTXRead = 0; } ucTxFlag = TRUE; } } xgj_status_update(); //led_indicate(); rt_thread_delay(3); } }``` motor_ctrl_entry代码: ```while(1) { ucStopFlag = FALSE; key_analysis(&ucSendFlag, &ucStopFlag); alarm_analysis(); //rf_analysis(&ucSendFlag); if(g_sucModeFlag == MODE_AUTO && ucStopFlag == FALSE) { if(rt_event_recv(&event_ls_cmd, EVENT_RTC_TIMING, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, &e) == RT_EOK) { if(ucSendFlag > CTRL_PRI4_TIMING) { ucSendFlag = CTRL_PRI4_TIMING; } } if(rt_event_recv(&event_ls_cmd, EVENT_LS_COMMOND, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, &e) == RT_EOK) { if(ucSendFlag > CTRL_PRI3_LOONGSEC) { ucSendFlag = CTRL_PRI3_LOONGSEC; } } if(rt_event_recv(&event_ls_cmd, EVENT_RF_REMOTE, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, &e) == RT_EOK) { if(ucSendFlag > CTRL_PRI2_REMOTE) { ucSendFlag = CTRL_PRI2_REMOTE; } } } if(ucSendFlag > 0 && ucSendFlag < CTRL_PRI_LOWEST && ucStopFlag == FALSE) { motor_start(); g_sucPosition = POS_MIDDLE; ucSendFlag = CTRL_PRI_LOWEST; } rt_thread_delay(5); }```
查看更多
8
个回答
默认排序
按发布时间排序
bernard
2017-01-24
这家伙很懒,什么也没写!
这个需要你自行查找问题了,当复现后可以用shell命令行的一些命令来了解任务的状态。另外,程序中依赖delay的方式来调度并不是好的设计。
dutchlight
2017-01-24
这家伙很懒,什么也没写!
多谢大神解答,程序中还用到了 [code]void rt_enter_critical(void); /* 进入临界区*/ ...... void rt_exit_critical(void); /* 退出临界区*/,[/code] 多个线程会调用此函数会不会有问题?现在发现死的线程还不一定是这两个?! 还有不用rt_delay的方式调度,用什么调度,信号量,互斥量?比较好的用什么调度?
dutchlight
2017-02-07
这家伙很懒,什么也没写!
不执行的线程每次还不一定一样,现在出现只有motor_ctrl_entry一个线程不执行了, 附件是finsh打印信息,大神帮帮看看,从哪找原因就是找不到啊,问题也是很难重现,搞了半天才出现一次 [attach]2739[/attach]
dutchlight
2017-02-07
这家伙很懒,什么也没写!
stm32是jlink在线调试运行的,出问题时,怎么查看原因,现在把所有信号量、事件、都去掉了,只有定时器还是会出现问题,论坛人太少了,实在找不到只能放弃使用rt-thread了。
aozima
2017-02-07
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!
感觉很像是 rt_enter_critical/rt_exit_critical 里面出现了问题。 调度锁里面的操作应该是迅速的,执行结果可100%预测的。 建议停止调度后,通过JTAG来观察 rt_enter_critical 中 rt_scheduler_lock_nest 的值。 good luck!
dutchlight
2017-02-08
这家伙很懒,什么也没写!
谢谢回答,rt_enter_critical/rt_exit_critical后来也去掉了,rt-thread里就只剩下用了定时器,其它全用全局变量代替了,还是会出现死线程,关键问题很难重现,现在没时间找原因了,改用裸跑的吧,以后有时间在仔细找找原因。
dutchlight
2017-02-24
这家伙很懒,什么也没写!
今天有空测了下,发现应该是频繁进入串口接收中断引起的,试了两次可以重现现象,串口收发有个引脚偶尔会与地接触,导致频繁进入接收中断,但是还是没有找出rt-thread个别线程不工作的原因,不想找了,还是用的裸跑,每行代码都知道,
撰写答案
登录
注册新账号
关注者
0
被浏览
4.9k
关于作者
dutchlight
这家伙很懒,什么也没写!
提问
2
回答
6
被采纳
0
关注TA
发私信
相关问题
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
RTT是否支持STM32F429
7
请问谁有 STM32F40x HAL + RT-THREAD 模板
8
rt-thread在stm32f411下的移植问题
9
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
10
以后会把RT-thread移植到STM32的cube库上面么?我自己移植了一下STM32F373
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
五分钟玩转RT-Thread新社区
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
国产MCU移植系列教程汇总,欢迎查看!
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RS485驱动包的使用
2
当做一件事,坚持到第二十年 ——Open-SkyEye强势回归!
3
stm32f407zgt6新建工程
4
【github】rt-thread BSP 目录所有支持开发板整理展示
5
使用 D1s (RDC2022 纪念版) 连接 thingspeak
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
AT
FinSH
ART-Pi
Bootloader
CAN总线
Hardfault
文件系统
USB
DMA
RT-Thread
线程
stm32
RT-Thread Nano
SCons
MQTT
ESP8266
ota
packages_软件包
UART
rtthread
RTC
freemodbus
I2C
flash
cubemx
W5500
rt-smart
定时器
FAL
PWM
ADC
BSP
SDIO
msh
AB32VG1
Debug
C++_cpp
socket
SFUD
中断
编译报错
MicroPython
keil
LVGL
dfs
本月问答贡献
出出啊
1424
个答案
315
次被采纳
小小李sunny
1327
个答案
262
次被采纳
crystal266
490
个答案
144
次被采纳
whj467467222
1210
个答案
141
次被采纳
张世争
581
个答案
131
次被采纳
本月文章贡献
出出啊
4
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
crystal266
1
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
张世争
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部