3806|7

2452

帖子

19

TA的资源

五彩晶圆(中级)

楼主
 

分享C中断编程错误一例。 [复制链接]


  • 环境:Keil5
  • 代码

void UART0_Interrupt (void) interrupt 4
{
        unsigned char Byte;

        if(1 == RI0)
        {
                Receive_State = QueueIn(&Receive_Queue,SBUF0);
                RI0 = 0;
        }
       
        if(1 == TI0)
        {               
                if(QueueOut(&Send_Queue,&Byte) == QueueOperateOk)
                     SBUF0= Byte;
                TI0 = 0;
        }

}


  • 注释:当需要发送数据时,往Send_Queue里填充数据,然后将TI0置1,即开始发送。

  • 问题现象:当次烧写可以正常运行;重新上电失效。
  • 原因:调用QueueOut(&Send_Queue,&Byte)函数时,出错。更确切的说是Byte变量地址未知。&Byte操作后程序跑飞
  • 解决:将Byte用static修饰。
  • 分析:为什么Byte必须用static修饰?





此帖出自编程基础论坛

最新回复

解决:将Byte用static修饰。谢谢楼主分享 学习了啊  详情 回复 发表于 2014-11-3 09:09
点赞 关注
个人签名    懒得很
 

回复
举报

900

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
发送中断怎么用的呢?一直没用过。
此帖出自编程基础论坛

点评

发送完一个字节后TI0被硬件置位。  详情 回复 发表于 2014-11-1 10:55
 
个人签名别打我! 我说。
 
 

回复

2452

帖子

19

TA的资源

五彩晶圆(中级)

板凳
 
yangxf1217 发表于 2014-10-31 17:09
发送中断怎么用的呢?一直没用过。

发送完一个字节后TI0被硬件置位。
此帖出自编程基础论坛
 
个人签名    懒得很
 
 

回复

1310

帖子

3

TA的资源

一粒金砂(高级)

4
 
嵌入式C中关于STATIC的用法好好了解一下
此帖出自编程基础论坛

点评

有相关资料吗?  详情 回复 发表于 2014-11-1 11:20
 
个人签名

RTEMS

 
 

回复

2452

帖子

19

TA的资源

五彩晶圆(中级)

5
 
54chenjq 发表于 2014-11-1 11:08
嵌入式C中关于STATIC的用法好好了解一下

有相关资料吗?
此帖出自编程基础论坛
 
个人签名    懒得很
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

6
 
  unsigned char Byte;
……
if(QueueOut(&Send_Queue,&Byte) == QueueOperateOk)
                     SBUF0= Byte;


Byte没有见赋值的,难道是在QueueOut中赋值的?
此帖出自编程基础论坛

点评

(QueueOut(&Send_Queue,&Byte) == QueueOperateOk[/backcolor] [/backcolor] 从Send_Queue队列中处于队首位置取出一个byte,放到Byte变量的地址上。并返回:成功,失败(队列已取空).[/backcolor] .h:[/back  详情 回复 发表于 2014-11-1 14:43
 
 
 

回复

2452

帖子

19

TA的资源

五彩晶圆(中级)

7
 
dontium 发表于 2014-11-1 14:31
unsigned char Byte;
……
if(QueueOut(&Send_Queue,&Byte) == QueueOperateOk)

(QueueOut(&Send_Queue,&Byte) == QueueOperateOk


从Send_Queue队列中处于队首位置取出一个byte,放到Byte变量的地址上。并返回:成功,失败(队列已取空).

.h:


#define ElemType       unsigned char
#define QueueSize      62
#define QueueFull      0
#define QueueEmpty     1
#define QueueOperateOk 2

struct FifoQueue
{
    unsigned char front;
    unsigned char rear;
    unsigned char count;
    ElemType dat[QueueSize];
};


//Queue Initalize
extern void QueueInit(struct FifoQueue *Queue);
// Queue In
extern unsigned char QueueIn(struct FifoQueue *Queue,ElemType sdat);
// Queue Out
extern unsigned char QueueOut(struct FifoQueue *Queue,ElemType *sdat);


#endif


.c:

//Queue Init
void QueueInit(struct FifoQueue *Queue)
{
    Queue->front = Queue->rear;
    Queue->count = 0;
}


// Queue In
unsigned char QueueIn(struct FifoQueue *Queue,ElemType sdat)
{
    if((Queue->front == Queue->rear) && (Queue->count == QueueSize))
    {                    // full
        return QueueFull;
    }
        else
    {                    // in
        Queue->dat[Queue->rear] = sdat;
        Queue->rear = (Queue->rear + 1) % QueueSize;
        Queue->count = Queue->count + 1;
        return QueueOperateOk;
    }
}
// Queue Out
unsigned char QueueOut(struct FifoQueue *Queue,ElemType *sdat)
{
    if((Queue->front == Queue->rear) && (Queue->count == 0))
    {                    // empty
        return QueueEmpty;
    }else
    {                    // out
        *sdat = Queue->dat[Queue->front];
        Queue->front = (Queue->front + 1) % QueueSize;
        Queue->count = Queue->count - 1;
        return QueueOperateOk;
    }
}




此帖出自编程基础论坛
 
个人签名    懒得很
 
 

回复

3027

帖子

0

TA的资源

五彩晶圆(初级)

8
 
解决:将Byte用static修饰。谢谢楼主分享 学习了啊
此帖出自编程基础论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【有奖直播】2025是德科技数字月-数字新品来助阵
直播时间:3月19日(周三)14:00
直播奖励:小米口红充电宝、倍思充电线、是德科技十周年鼠标垫

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表