OpenEdv-开源电子网

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

ucos运行死机

[复制链接]

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2014-8-26 10:27:05 | 显示全部楼层 |阅读模式
5金钱
ucos2中,我用的是原子兄的综合实验为基础 加了CAN通讯进去,在单布调试的时候,进入函数里面的时候出来没问题,但是一旦F10直接运行函数的时候就死机跳到以下界面:


我看了下,排除了中断服务函数没有找到主体的情况.
每次经过这个库函数就死机了:



但是单步F11进入以后出来没问题,经过他以后继续F10经过下一个函数的时候就死机了.前面F10的时候不会有问题.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-26 10:29:22 | 显示全部楼层
在线等.已经为这问题烦恼了好几天了.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

7

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2014-8-18
在线时间
7 小时
发表于 2014-8-26 10:34:35 | 显示全部楼层
不好给答案。建议一个一个查。
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-26 10:39:51 | 显示全部楼层
回复【3楼】73214606:
---------------------------------
库函数里面就是操作寄存器了.进去单步调试的时候他不会出问题,只有F10直接运行他的时候才会死机,所以不好查.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-26 10:43:00 | 显示全部楼层
如果屏蔽掉用这个函数的话 运行是正常的.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-26 10:46:29 | 显示全部楼层
以下是CAN的初始化配置.
void CAN_Configuration(u8 iBaud, u32 *pFilterId, u32 *pFilterMaskId, u8 iFilterNum)
{
u8 i;
CAN_InitTypeDef *CAN_InitStructure;
CAN_FilterInitTypeDef *CAN_FilterInitStructure;
NVIC_InitTypeDef  NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;


  //错误数累计

/*************************************分配空间**************************************/


CAN_InitStructure = (CAN_InitTypeDef*)mymalloc(SRAMIN,sizeof(CAN_InitTypeDef)); //分配空间
CAN_FilterInitStructure = (CAN_FilterInitTypeDef*)mymalloc(SRAMIN,sizeof(CAN_FilterInitTypeDef)); //分配空间

/**********************************************************************************/
RCC_APB1PeriphClockCmd( RCC_APB1Periph_CAN1 , // 使能CAN时钟 
ENABLE);

/***************IO口输入输出方式配置**************/
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_11; // CAN RX引脚配置 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
//CAN TX
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_12; // CAN TX引脚配置 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure);

/***********************中断配置*****************/

NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; // 使能CAN RX0 中断 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn; // 使能CAN TX 中断 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = CAN1_SCE_IRQn; // 使能CAN 错误中断 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

//CAN寄存器配置, 0-DISABLE;1-ENABLE
CAN_DeInit(CAN1); /* CAN 寄存器初始化 */
CAN_StructInit(CAN_InitStructure);

CAN_InitStructure->CAN_TTCM = DISABLE; /* 时间触发通信模式 */
// 0:禁止时间出发通信模式
// 1:允许时间出发通信模式
CAN_InitStructure->CAN_ABOM = ENABLE; /* 自动离线管理 */
// 0:软件对CAN_MCR寄存器的INRQ为置'1'随后清'0',一旦硬件检测到128次11位连续隐性位,自动退出离线状态
// 1:一旦硬件检测到128次11位连续隐性位,自动退出离线状态
CAN_InitStructure->CAN_AWUM = ENABLE; /* 自动唤醒模式 */
// 0:睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒
// 1:睡眠模式通过检测CAN报文,由硬件自动唤醒,唤醒同时,硬件自动对CAN_MSR寄存器的SLEEP和SLAK位清'0'
CAN_InitStructure->CAN_NART = DISABLE; /* 是否禁止报文自动重传 */
// 0:按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功
// 1:CAN报文只被发送1次,不管发送的结果如何
CAN_InitStructure->CAN_RFLM = ENABLE; /* 接收FIFO锁定模式 */
// 0:在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有的报文
// 1:在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃
CAN_InitStructure->CAN_TXFP = ENABLE; /* 发送FIFO优先级 */
// 0:优先级由报文的标识符来决定
// 1:优先级由发送请求的顺序来决定
CAN_InitStructure->CAN_Mode = CAN_Mode_Normal; /* 操作模式 */
// CAN_Mode_Normal:标准模式
// CAN_Mode_LoopBack:环回模式
// CAN_Mode_Silent:静默模式
// CAN_Mode_Silent_LoopBack:静默环回模式
CAN_InitStructure->CAN_SJW = CAN_SJW_1tq; /* 重新同步跳跃宽度 */
// CAN_SJW_1tq
// CAN_SJW_2tq
// CAN_SJW_3tq
// CAN_SJW_4tq
switch (iBaud)
{
case CAN_BAUD_5K: /* BAUD = 5kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_8tq; /* 时间段1 */
// TS1[3:0],定义时间段1占用了多少个时间单元
CAN_InitStructure->CAN_BS2 = CAN_BS2_7tq; /* 时间段2 */
// TS2[2:0],定义时间段2占用了多少个时间单元
CAN_InitStructure->CAN_Prescaler = 450; /* 波特率预分频 F/(BS1+BS2+1)/PRE */
break;
case CAN_BAUD_10K: /* BAUD = 10kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_7tq;
CAN_InitStructure->CAN_Prescaler = 225;
break;
case CAN_BAUD_20K: /* BAUD = 20kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 150;
break;
case CAN_BAUD_25K: /* BAUD = 25kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_7tq;
CAN_InitStructure->CAN_Prescaler = 90;
break;
case CAN_BAUD_30K: /* BAUD = 30kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_7tq;
CAN_InitStructure->CAN_Prescaler = 75;
break;
case CAN_BAUD_40K: /* BAUD = 40kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 75;
break;
case CAN_BAUD_50K: /* BAUD = 50kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_7tq;
CAN_InitStructure->CAN_Prescaler = 45;
break;
case CAN_BAUD_60K: /* BAUD = 60kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 50;
break;
case CAN_BAUD_80K: /* BAUD = 80kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_5tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_4tq;
CAN_InitStructure->CAN_Prescaler = 45;
break;
case CAN_BAUD_90K: /* BAUD = 90kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_5tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_4tq;
CAN_InitStructure->CAN_Prescaler = 40;
break;
case CAN_BAUD_100K: /* BAUD = 100kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 30;
break;
case CAN_BAUD_200K: /* BAUD = 200kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 15;
break;
case CAN_BAUD_300K: /* BAUD = 300kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 10;
break;
case CAN_BAUD_400K: /* BAUD = 400kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_5tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_4tq;
CAN_InitStructure->CAN_Prescaler = 9;
break;
case CAN_BAUD_500K: /* BAUD = 500kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_4tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure->CAN_Prescaler = 9;
break;
case CAN_BAUD_600K: /* BAUD = 600kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 5;
break;
case CAN_BAUD_800K: /* BAUD = 800kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_4tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_4tq;
CAN_InitStructure->CAN_Prescaler = 5;
break;
case CAN_BAUD_900K: /* BAUD = 900kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_5tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_4tq;
CAN_InitStructure->CAN_Prescaler = 4;
break;
case CAN_BAUD_1000K: /* BAUD = 1000kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_6tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure->CAN_Prescaler = 3;
break;
default: /* BAUD = 50kbps */
CAN_InitStructure->CAN_BS1 = CAN_BS1_8tq;
CAN_InitStructure->CAN_BS2 = CAN_BS2_7tq;
CAN_InitStructure->CAN_Prescaler = 45;
break;
}

CAN_Init(CAN1,CAN_InitStructure);

//CAN filter init
for (i = 0; i < iFilterNum; i++)
{
CAN_FilterInitStructure->CAN_FilterNumber = i; /* 选择过滤器组(0~13) */
CAN_FilterInitStructure->CAN_FilterMode = CAN_FilterMode_IdMask;/* 过滤器模式 */
// CAN_FilterMode_IdMask:屏蔽位模式
// CAN_FilterMode_IdList:标识符模式
CAN_FilterInitStructure->CAN_FilterScale = CAN_FilterScale_32bit;
// CAN_FilterScale_16bit:2个16位过滤器
// CAN_FilterScale_32bit:1个32位过滤器
CAN_FilterInitStructure->CAN_FilterIdHigh = (u16)(pFilterId >> 16);
CAN_FilterInitStructure->CAN_FilterIdLow = (u16)(pFilterId);
CAN_FilterInitStructure->CAN_FilterMaskIdHigh = (u16)(pFilterMaskId >> 16);
CAN_FilterInitStructure->CAN_FilterMaskIdLow = (u16)pFilterMaskId;
CAN_FilterInitStructure->CAN_FilterFIFOAssignment= CAN_FIFO0;
CAN_FilterInitStructure->CAN_FilterActivation = ENABLE; /* 过滤器激活 */
CAN_FilterInit(CAN_FilterInitStructure);
}

// CAN_Transmit((CanTxMsg *)&gsCanTxBuf); //激活发送空中断
CAN_CancelTransmit(CAN1,0);
CAN_CancelTransmit(CAN1,1);
CAN_CancelTransmit(CAN1,2);

CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
CAN_ITConfig(CAN1,CAN_IT_ERR, ENABLE);
CAN_ITConfig(CAN1,CAN_IT_LEC, ENABLE);
CAN_ITConfig(CAN1,CAN_IT_EWG, ENABLE);
CAN_ITConfig(CAN1,CAN_IT_EPV, ENABLE);
    CAN_ITConfig(CAN1,CAN_IT_BOF, ENABLE);
CAN_FIFOInit(gsCanRxFifo);
CAN_FIFOInit(gsCanTxFifo);

myfree(SRAMIN,CAN_InitStructure);
myfree(SRAMIN,CAN_FilterInitStructure);
}
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-26 11:09:29 | 显示全部楼层


很奇怪的是,我在调试的时候,527行不可以设置断点,其他行都可以.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-26 11:56:23 | 显示全部楼层
具体是到:


请求传输的时候,运行到这里就卡死了.正常情况 请求传输以后会打开发送中断,下面是我的发送中断函数:


这个是发送中断主体函数.不知道名字有没有问题.我是从startup_stm32f10x_hd.s里面复制的名字过来的.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-8-26 14:59:58 | 显示全部楼层
回复【8楼】a4615800:
---------------------------------
卡死了,死到什么地方了?
永远保持一颗学习的心态。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-26 23:20:49 | 显示全部楼层
先简单化问题.
将不必要的东西全去掉,排除法找问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-18
在线时间
0 小时
发表于 2014-8-27 09:00:34 | 显示全部楼层
看别人的东西就是累
好好学习,明天向上
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-8-27 09:26:28 | 显示全部楼层
对楼主的时序不是很清楚,麻烦描述一下。

可能的问题点:

1、中断标志位;
2、中断调用不合理。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
 楼主| 发表于 2014-8-27 17:01:48 | 显示全部楼层
弃用UCOSII了.调试太麻烦了
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2014-8-27 18:56:34 | 显示全部楼层
回复【13楼】a4615800:
---------------------------------
遇到困难就要放弃,很难有所突破。
永远保持一颗学习的心态。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-2 06:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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