| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 497 人关注过本帖
标题:一道C改错题,大侠帮忙看看!
只看楼主 加入收藏
dqpicsl
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2011-8-29
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
一道C改错题,大侠帮忙看看!
unsigned char gSendChar = FALSE;
unsigned char gNextChar = 0U;

#pragma interrupt=UART_TX_ISR
__interrupt void uart_tx_isr(void)
{
  if(gSendChar)
  UART_TX_REG = gNextChar;
  gSendChar = FALSE;
}

void uart_write(unsigned char c)
{
  if(!gSendChar)
  {
  gSendChar = TRUE;
  gNextChar = c;
  }
}
2011-08-29 12:19
luyi_footman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:100
注 册:2011-7-14
收藏
得分:10 
这是一个中断写的接口函数程序,如果按原程序来执行的话,如果当程序执行完gSendChar = TRUE时被硬件写中断,此时执行中断函数UART_TX_ISR,
但是此时所写的gNextChar的值不是原本想写的字符,因为在uart_write还未执行gNextChar = c就已经给写中断事件给中断了。所以,在uart_write
函数中,对gNextChar的赋值应该在给gSendChar赋TRUE值的前面执行,方能避免此种情况发生。不知道我理解对么,

天道酬勤!
2011-08-29 13:57
dqpicsl
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2011-8-29
收藏
得分:0 
有道理,谢谢!
2011-08-29 20:22
快速回复:一道C改错题,大侠帮忙看看!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028618 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved