Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
rt-thread 运行三个小时后死机
发布于 2019-10-15 14:44:09 浏览:2310
订阅该版
是这样的,今天测试这个项目,连续测试四个小时后死机,不知道怎么回事> autojust = rt_thread_create("autojust", autojust_thread_entry, RT_NULL, 1024, 18, 30); rt_thread_startup(autojust);这是一个线程 > adc_thread = rt_thread_create("adc_read", adc_thread_entry, RT_NULL, 1024, 18, 30); rt_thread_startup(adc_thread);这是另外一个 为了防止线程对一个资源进行读写,我特意加了这两行代码 > rt_enter_critical> rt_exit_critical();请大神看一下啊
查看更多
9
个回答
默认排序
按发布时间排序
aozima
2019-10-15
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
看不出来,也猜不出来。
aozima
2019-10-15
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
不过可以参考下这个贴子 [https://www.rt-thread.org/qa/thread-422027-1-1.html](https://www.rt-thread.org/qa/thread-422027-1-1.html)
kuailedeluojie
2019-10-15
这家伙很懒,什么也没写!
>看不出来,也猜不出来。 --- 我把这两个线程的里面的代码贴上来>while(1) > { > rt_thread_delay(1); > //rt_kprintf("\n"); > /*Î޵ȴý·½Ê½µÈ´ýÐźÅÁ¿£¬´òÓ¡ÐÅÏ¢*/ > if(RT_EOK !=rt_sem_trytake(dynamic_sem)) > /*ÓÀ¾Ã·½Ê½µÈ´ýÐźÅÁ¿*/ > //if(RT_EOK !=rt_sem_take(dynamic_sem, RT_WAITING_FOREVER)) > { > //rt_enter_critical(); > adb_init_con(); > //rt_exit_critical(); > // rt_kprintf("555\n"); > } > else > { > //½ÓÊÕµ½ÐźŽøÈ뵽ѻ·£¬È»ºóÀïÃæÕâ¸öÑ»·ºÍÄǸöÏß³Ìÿ¸ö²Ù×÷Ò»´Î > // rt_kprintf("666\n"); > #if 0 > while(1) > { > rt_kprintf("777\n"); > rt_thread_delay(1); > if(RT_EOK == rt_sem_trytake(dynamic_sem)) > { > break; > //adb_init_con(); > } > if(RT_EOK ==rt_sem_trytake(dynamic_sem1)) > { > // rt_kprintf("!!!!!\n"); > //ÔÚÕâÀïºÍÄǸöÏß³ÌʵÏÖͬ²½ > adb_init_con(); > //ÔÚÓÃÒ»¸ö±êעλÅжÏÒ»ÏÂÌø³öÕâ¸öÑ»· > if(ad5761_flag == 1) > { > break; > } > } > > } > > #endif > > while(1) > { > // rt_kprintf("#\n"); > //ÔÚÓÃÒ»¸ö±êעλÅжÏÒ»ÏÂÌø³öÕâ¸öÑ»· > rt_enter_critical(); > adb_init_con(); > rt_exit_critical(); > if(ad5761_flag == 0) > { > break; > } > rt_thread_delay(1); > > } > } > > } --- 这是其中一个线程的代码 >while(1) > { > //rt_kprintf("2\n"); > if((auto_just_flag & JUST_BIT)==JUST_ING) > { > // rt_kprintf("111111111111111111111111111\n"); > //如果进入自动校准状态 > // rt_kprintf("2222222222222222\n"); > // rt_sem_release(dynamic_sem); > //rt_thread_delay(300); > ad5761WriteData(channel,0); > > rt_thread_delay(300); > // rt_sem_release(dynamic_sem); > //2019.10.10 改 > // val_base = (int)(power[channel*2]*100); > // sprintf(dis,"%f",power[channel]); > val_base = (int)(power[channel]*100); > if(val_base < -300) > { > // rt_sem_release(dynamic_sem); > rt_kprintf("dis == %s val_base = %d\n",dis,val_base); > auto_just_flag &= (~(JUST_CLR)); > auto_just_flag |= JUST_ER; > } > else > { > ad5761_flag = 1; > rt_sem_release(dynamic_sem); > rt_thread_delay(100); > rt_kprintf("t1 release a dynamic semaphore.\n"); > for(i = 0;i<30;i++) > { > ret = binary_auto(channel,(i*10),val_base); > hygj_cfg_manage.DAC_Z_Value[channel][w][i] = ret; > rt_thread_delay(1); > } > for(i = 3;i<=(MAX_ATTENUATOR+1);i++) > { > > ret = binary_auto(channel,(i*100),val_base); > hygj_cfg_manage.DAC_Value[channel][w][i] = ret; > rt_thread_delay(1); > } > if((auto_just_flag & 0xF000) == 0) > { > > channel++; > if(channel >= 8) > { > channel = 0; > auto_just_flag &= (~(JUST_CLR)); > auto_just_flag |= JUST_OK; > } > } > else > { > > auto_just_flag &= (~(JUST_CLR)); > auto_just_flag |= JUST_OK; > } > Save_To_EPROM((uint8_t *)&hygj_cfg_manage.DAC_Z_Value[channel][w],60); > rt_thread_delay(500); > Save_To_EPROM((uint8_t *)&hygj_cfg_manage.DAC_Z_Value[channel][w],60); > rt_thread_delay(500); > Save_To_EPROM((uint8_t *)&hygj_cfg_manage.DAC_Value[channel][w],((MAX_ATTENUATOR+3)*2)); > rt_thread_delay(500); > Save_To_EPROM((uint8_t *)&hygj_cfg_manage.DAC_Value[channel][w],((MAX_ATTENUATOR+3)*2)); > rt_thread_delay(500); > } > } > else if((auto_just_flag & JUST_BIT) == JUST_START) > { > > temp = (auto_just_flag &0x0000F000)>>12; > w = ((auto_just_flag &0x000F0000)>>16); > auto_just_flag &=0xFFFFFF00; > auto_just_flag |=JUST_ING; > if( temp == 0) > { > channel = 0; > } > else > { > channel = temp-1; > } > > rt_thread_delay(100); > } > else > { > ad5761_flag = 0; > rt_thread_delay(100); > } > } --- 这是其中一个线程的代码,我是在其中>int binary_auto(unsigned char ch,int db_val,int val_base) --- 函数中进行上锁操作的,这个函数之前会发一个信号,下面是这个函数的主要代码>int binary_auto(unsigned char ch,int db_val,int val_base) >{ > struct _hygjdev_cfg *pcfg = &hygj_cfg_manage; > unsigned int val1 = 0,mid,val2 = 0xFFFF,count = 0,num,max_count = 20; > int ppower,qpower; > float pow,q_p,q_p1; > char dis[24] = ""; > count = 16; > qpower = val_base - db_val; > while(count--) > { > mid = (val1+val2)/2; > //ÔÚÕâ¸öλÖüÓÒ»¸öÏß³ÌʵÏÖÁ½¸öÏ̵߳Äͬ²½ > rt_enter_critical(); > ad5761WriteData(ch,mid); > rt_exit_critical(); > rt_thread_delay(375); > // rt_sem_release(dynamic_sem1); //adc²É¼¯Ï̲߳»¶¯×÷ > //rt_thread_delay(250); > // ppower = (int)(power[ch*2]*100); //¹â˥ʹÓõ½µÄPDΪ0£¬2,4,6, > //2019.10.12 > //ÔÚ¶Ôdac½øÐвÙ×÷Ö®ºó¸øadcдȻºó²É¼¯Êý¾Ý > ppower = (int)(power[ch]*100); > > #if 0 > if(pcfg-> fan_mode == 0) > { > ch595_write(0,o|CH_NUM[ch]); > } > else if(pcfg-> fan_mode == 1 && pcfg ->temperature > 25) > { > ch595_write(0,o|CH_NUM[ch]); > } > else > ch595_write(0,CH_NUM[ch]); > rt_thread_delay(1); > num = stm32f427_ad7980_read_data(ch); > q_p = ((float)hygj_cfg_manage.ADC_just[ch][hygj_cfg_manage.OPM_W[ch]]); > pow = (0.0275*((float)(num/(float)max_count)*0.05035)-79.552)+q_p; > if(pow < -40.0) > { > //rt_kprintf("%s\n",(char *)LCD_dispbuf); > //2019.9.20 ?/100.0?? > // q_p1 = ((float)hygj_cfg_manage.ADC_just1[i][hygj_cfg_manage.OPM_W[i]]/100.0); > q_p1 = ((float)hygj_cfg_manage.ADC_just1[ch][hygj_cfg_manage.OPM_W[ch]]); > pow += (q_p1/9.0)*(-40.0-pow); > } > if(pow < -70.00) > { > pow = -50.00; > } > else if(pow > 20.00) > { > pow = 20.00; > } > sprintf(dis,"%f",pow); > rt_kprintf("%s\n",dis); > ppower = (int)pow; > ppower +=16; > #endif > if(ppower < (qpower)) > { > val2 = mid; > } > else if(ppower > (qpower)) > { > val1 = mid; > } > else > { > return mid; > } > } > return mid; >} ---
kuailedeluojie
2019-10-15
这家伙很懒,什么也没写!
>咦?这个链接里面的帖子还是这位楼主发的啊...... --- 已经附上代码了
aozima
2019-10-15
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
[i=s] 本帖最后由 aozima 于 2019-10-15 15:08 编辑 [/i] 0. 贴的代码请不要贴乱码,找BUG要用心对待。 1. 请描述死机后的现象,比如shell是否可以执行命令? PS命令的结果是什么? 2. 如果死机后shell无法执行,可以把shell线程的优先级调为0(也就是最高优先级)。 3. 请连接JTAG仿真器,如果死机后shell无法执行,请在仿真里面停下来,看当前运行到哪里去了。 4. 楼主刻意强调了加了调度锁,那没加的时候是什么情况?
aozima
2019-10-15
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
``` rt_enter_critical(); rt_exit_critical(); ``` 调试锁中仅可以执行结果明确的代码,不要有阻塞或延时。建议只放纯运算类。 如果是IO操作,请使用互斥。 怀疑你的调试锁中间的代码有问题。
kuailedeluojie
2019-10-16
这家伙很懒,什么也没写!
[i=s] 本帖最后由 kuailedeluojie 于 2019-10-16 11:55 编辑 [/i] >调试锁中仅可以执行结果明确的代码,不要有阻塞或延时。建议只放纯运算类。 >如果是IO操作,请使用互斥。 > ... --- 嗯嗯,死机后不可以执行命令, 图片是正在运行的时候ps打印的信息 我确实是在调试锁里面执行的io操做,我是用信号来启动这两个线程的同步,线程同步中用的是调试锁,我没有用过rt-thread 的互斥锁 主要的问题线程是adc_read 和 autojust两个线程
撰写答案
登录
注册新账号
关注者
0
被浏览
2.3k
关于作者
kuailedeluojie
这家伙很懒,什么也没写!
提问
44
回答
135
被采纳
0
关注TA
发私信
相关问题
1
请教cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部