完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我这个线程创建成功了,为啥ai_thread_entry()函数不运行呢?
void airun_thread() { /* 创建 serial 线程 */ rt_thread_t thread = rt_thread_create("ai", ai_thread_entry, RT_NULL, 1024, 28, 30); /* 创建成功则启动线程 */ if (thread != RT_NULL) { rt_pin_write(LED2,PIN_LOW); rt_thread_startup(thread); } } void ai_thread_entry(void *param) { while(1) { PT1=getaibyChanel(ADC_DEV_NAME0,0); PT2=getaibyChanel(ADC_DEV_NAME0,1); PT3=getaibyChanel(ADC_DEV_NAME0,2); PT4=getaibyChanel(ADC_DEV_NAME0,3); //临时方案,关闭AD通道,设置为普通输入通道 rt_pin_mode(GET_PIN(A, 0), PIN_MODE_INPUT); rt_pin_mode(GET_PIN(A, 1), PIN_MODE_INPUT); rt_pin_mode(GET_PIN(A, 2), PIN_MODE_INPUT); rt_pin_mode(GET_PIN(A, 3), PIN_MODE_INPUT); AI1=getaibyChanel(ADC_DEV_NAME1,4); AI2=getaibyChanel(ADC_DEV_NAME1,5); AI3=getaibyChanel(ADC_DEV_NAME1,6); //AI4=getaibyChanel(ADC_DEV_NAME0,7); PT1old=getPToldValue(PT1);//2.8432875 PT2old=getPToldValue(PT2); PT3old=getPToldValue(PT3); PT4old=getPToldValue(PT4); rt_uint16_t u1=0.254767386299465*PT1old-55.8156683028539; rt_uint16_t u2=0.254767386299465*PT2old-55.8156683028539; AI1old=AI1/4; AI2old=AI2/4; AI3old=AI3/4; rt_pin_write(LED3,PIN_LOW); rt_thread_mdelay(500); } } 下载调试的时候现象是LED2正常亮 LED3不会亮,调试的时候不管断点在void ai_thread_entry(void *param)函数的任意位置 都执行不到,求大佬们解答 |
|
相关推荐
1个回答
|
|
在分析这个问题之前,我们需要先了解一下线程创建和启动的基本概念。
1. **线程创建**:在创建线程时,我们需要指定线程的名称、入口函数、参数、堆栈大小、优先级和时间片。在你的代码中,你已经成功创建了一个线程。 2. **线程启动**:创建线程后,我们需要调用 `rt_thread_startup()` 函数来启动线程。在你的代码中,你也成功启动了线程。 现在,我们来分析一下为什么 `ai_thread_entry()` 函数没有运行: 1. **入口函数问题**:首先,我们需要确保 `ai_thread_entry()` 函数是正确的。检查函数的定义和实现,确保没有语法错误或逻辑错误。 2. **线程优先级**:检查线程的优先级是否正确。在你的代码中,线程的优先级是28,这是一个相对较高的优先级。如果系统中有其他具有更高优先级的线程正在运行,那么 `ai_thread_entry()` 函数可能无法获得执行机会。 3. **线程调度**:检查系统的线程调度策略。如果调度策略有问题,可能导致 `ai_thread_entry()` 函数无法正常运行。 4. **线程挂起**:检查是否有其他代码将这个线程挂起。如果线程被挂起,那么它将无法运行。 5. **线程堆栈溢出**:检查线程的堆栈是否足够大。如果堆栈太小,可能导致堆栈溢出,从而影响线程的运行。 6. **硬件问题**:检查硬件环境是否支持多线程。如果硬件不支持多线程,那么线程可能无法正常运行。 7. **调试工具**:使用调试工具(如 GDB)来跟踪线程的执行。这可以帮助你找到问题的根源。 综上所述,要解决这个问题,你需要从多个方面进行排查。首先检查 `ai_thread_entry()` 函数本身,然后检查线程的优先级、调度策略、挂起状态、堆栈大小和硬件环境。如果问题仍然存在,可以尝试使用调试工具来跟踪线程的执行。 |
|
|
|
只有小组成员才能发言,加入小组>>
157个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
907 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1321 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
949 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1216 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1221 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 00:40 , Processed in 0.896476 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号