在线时间1 小时
UID53548
ST金币0
蝴蝶豆0
注册时间2008-6-12
新手上路
- 最后登录
- 2018-9-19
|
a0a.1 0b0c
请教STM32跑UCOS的问题,我用USART2和另块板子通信,9600波特率,中断方式收发,数据比较少时没问题,多的时候(75字节)运行10几秒钟到1分钟程序就死掉了,我是每1秒钟读取75字节。
用仿真看了下程序停的位置,如下,这是怎么回事?知道的麻烦解释一下,非常感谢!
;******************************************************************************************
;* Fault interrupt handler.
;* It simply enters an infinite loop.
;******************************************************************************************
HardFaultException
B HardFaultException
附上串口中断函数:
----------------------------------------------------------------------------------
void USART2_IRQHandler(void)
{
unsigned int i;
unsigned char msg[100];
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL(); //保存全局中断标志,关总中断// Tell uC/OS-II that we are starting an ISR
OSIntNesting++;
OS_EXIT_CRITICAL(); //恢复全局中断标志
//OSTimeTick(); // Call uC/OS-II's OSTimeTick(),在os_core.c文件里定义,主要判断延时的任务是否计时到
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //判断读寄存器是否非空
{
// Read one byte from the receive data register
msg[RxCounter1++]= USART_ReceiveData(USART2); //将读寄存器的数据缓存到接收缓冲区里
if(msg[0]!=0x3A)
{
RxCounter1 = 0; //判断起始标志
}
else if(msg[RxCounter1-1]==0x0A && RxCounter1 > 2) //判断结束标志
{
if(msg[RxCounter1-2]==0x0D)
{
for(i=1; i< RxCounter1-2; i++)
{
/* 判断接收的数据为数字或字母 */
if((msg >= '0' && msg = 'A' && msg = 'a' && msg |
|