OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9597|回复: 9

STM32 UCOS+UCGUI 加入串口任务

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-28
在线时间
0 小时
发表于 2014-8-10 19:01:00 | 显示全部楼层 |阅读模式
5金钱
大家能帮忙看看吗?我是在正点原子的实验57 ucGUI实验-7寸电容屏版本中加入串口1和串口2的程序,加入一个串口任务(实现将串口2接收的数据发送到串口1中),但是串口任务一直卡死,不知道是什么原因。串口部分的程序加载入正点原子的实验53 UCOSII实验1-任务调度中是可以执行的。附件中是源码,大家帮忙看看吧,谢谢啦!

实验57 ucGUI实验-7寸电容屏版本.rar

1.97 MB, 下载次数: 649

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-10 23:08:29 | 显示全部楼层
仿真看看死在哪里?
是不是堆栈设置小了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-28
在线时间
0 小时
 楼主| 发表于 2014-8-12 00:36:55 | 显示全部楼层
我将vectors.s中堆栈的大小分别修改如下:

Stack_Size      EQU     0x00000800

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>

Heap_Size       EQU     0x00000800


app_cfg.h中各个任务堆栈大小设备如下:
#define  APP_TASK_START_STK_SIZE                         128
#define  APP_TASK_KBD_STK_SIZE                           128
#define  APP_TASK_USER_IF_STK_SIZE                       512
#define  APP_TASK_UART_STK_SIZE                       1024

用Debug 仿真时程序一直在BSP_Init()函数处的如下图所示处:









这是什么原因啊?谢谢啦!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-12 23:20:46 | 显示全部楼层
一直在中断服务函数里面了吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-28
在线时间
0 小时
 楼主| 发表于 2014-8-13 23:46:35 | 显示全部楼层
为什么会这样,能说详细点吗?这该怎么解决?谢谢啦!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-14 00:11:57 | 显示全部楼层
回复【5楼】feijiaxue:
---------------------------------
可能是没有清中断标志。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-28
在线时间
0 小时
 楼主| 发表于 2014-8-14 00:31:17 | 显示全部楼层
我在串口中断函数中接收完成后加入了USART2->SR &= (~(1<<5));  ,这部分串口不加入操作系统时可以跑,加入操作系统后就不行了

void USART2_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntEnter();    
#endif
if(USART2->SR&(1<<5))//接收到数据
{  
res=USART2->DR; 
if((USART2_RX_STA&0x8000)==0)//接收未完成
{
if(USART2_RX_STA&0x4000)//接收到了0x0d
{
if(res!=0x0a)USART2_RX_STA=0;//接收错误,重新开始
else USART2_RX_STA|=0x8000; //接收完成了
USART2->SR &= (~(1<<5));  
}else //还没收到0X0D
{
if(res==0x0d)USART2_RX_STA|=0x4000;
else
{
USART2_RX_BUF[USART2_RX_STA&0X3FFF]=res;
USART2_RX_STA++;
if(USART2_RX_STA>(USART2_MAX_RECV_LEN-1))USART2_RX_STA=0;//接收数据错误,重新开始接收  
}  
}
}       
}


回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-14 00:50:43 | 显示全部楼层
回复【7楼】feijiaxue:
---------------------------------
加入OS后,你看看是死在哪里?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-7-28
在线时间
0 小时
 楼主| 发表于 2014-8-14 02:11:38 | 显示全部楼层
程序进入启动文件vectors.s后,DCD     BSP_IntHandlerUSART2BSP_IntHandler进入bsp_int.c文件的BSP_IntHandler()函数后,没有进入串口中断函数。

static  void  BSP_IntHandler (CPU_DATA  int_id)
{
#if (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    CPU_SR         cpu_sr;
#endif
    CPU_FNCT_VOID  isr;


    CPU_CRITICAL_ENTER();                                       /* Tell uC/OS-II that we are starting an ISR            */
    OSIntNesting++;
    CPU_CRITICAL_EXIT();

    if (int_id < BSP_INT_SRC_NBR) 
{
        isr = BSP_IntVectTbl[int_id];
        if (isr != (CPU_FNCT_VOID)0) 
{
            isr();
        }
    }

    OSIntExit();                                                /* Tell uC/OS-II that we are leaving the ISR            */
}

要如何设置才能进入串口中断?


仿照bsp_int.c中的程序,添加以下红色的代码,但是仿真时还是没有进入到串口中断程序中,是还缺少什么设置吗?


extern void EXTI15_10_IRQHandler(void);
extern void USART1_IRQHandler(void);
extern void USART2_IRQHandler(void);


void  BSP_IntInit (void)
{
    CPU_DATA  int_id;


    for (int_id = 0; int_id < BSP_INT_SRC_NBR; int_id++) 
{
if(int_id==EXTI15_10_IRQChannel)BSP_IntVectSet(int_id,EXTI15_10_IRQHandler);//添加中断10_15服务函数
if(int_id==USART1_IRQChannel)BSP_IntVectSet(int_id,USART1_IRQHandler);//添加串口中断1服务函数
if(int_id==USART2_IRQChannel)BSP_IntVectSet(int_id,USART2_IRQHandler);//添加串口中断2服务函数
        else BSP_IntVectSet(int_id, BSP_IntHandlerDummy);
    }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-8-14 23:38:50 | 显示全部楼层
回复【9楼】feijiaxue:
---------------------------------
只能帮顶了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 23:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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