⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c语言嵌入式系统编程修炼之软件架构篇-开发者网络-c-天极modu2yesky.htm

📁 最全的介绍C语言结构体的使用方法和使用技巧!
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<title>C语言嵌入式系统编程修炼之软件架构篇-开发者网络-C-天极Yesky</title>
<meta name="description" content="C语言嵌入式系统编程修炼之软件架构篇," />
<meta name="keywords" content="C语言嵌入式系统编程修炼之软件架构篇," />
<meta name="author" content="天极Yesky | 全球中文IT第一门户" />
<meta name="Copyright" content="天极Yesky | 全球中文IT第一门户" />
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link rel="stylesheet" href="http://image.yesky.com/TLimages/css/y_mobile_content.css" type="text/css" media="all" />
<script src="http://image.yesky.com/TLimages/newmobile/showlay.js"></script>
<base target="_blank">
</head>

<body>
<!--页面头部-->

<!--头部-->
<div id="topmenu"><a href="http://www.yesky.com">Yesky首页</a>| <a href="http://product.yesky.com/">产品报价</a>| <a href="http://cseek.yesky.com/">行情</a>| <a href="http://mobile.yesky.com/">手机</a> | <a href="http://digital.yesky.com/">数码</a> | <a href="http://notebook.yesky.com/">笔记本</a> | <a href="http://pc.yesky.com/">台式机</a> | <a href="http://diy.yesky.com/">DIY硬件</a> | <a href="http://oa.yesky.com/">外设</a> | <a href="http://net.yesky.com/">网络</a> | <a href="http://dh.yesky.com/">数字家庭</a> | <a href="http://lab.yesky.com/">评测</a> | <a href="http://soft.yesky.com/">软件</a> | <a href="http://e.yesky.com/">e时代</a> | <a href="http://game.yesky.com/">游戏</a> | <a href="http://pic.yesky.com/">图片</a> | <a href="http://desktop.yesky.com/">壁纸</a> | <a href="http://q.yesky.com">群乐</a> | <a href="http://my.yesky.com">社区</a> | <a href="http://blog.yesky.com/">博客</a> | <a href="http://www.mydown.com/">下载</a></div><div id="topbox"><div class="tleft"><a href="http://www.yesky.com"><img src="http://image.yesky.com/TLimages/img/head/logo.gif" border="0" alt ="天极Yesky_全球中文IT第一门户"/></a></div><div class="tad"><span id="ad1"></span></div><div id="search"><div><form name="searchform" method="get" action="http://search.chinabyte.com/search" target="_blank"><input id="searchzz" name="q" onmouseover="this.focus()" onfocus="this.select()" type="text"/><input value="GB2312" name="encoding" type="hidden"/><input value="connect" name="dir" type="hidden"/><input value="20002" name="cid" type="hidden"/><input id="search_btn" type="submit" value="天极搜索"/></form></div><div class="tdq"><div class="rightarea"><a href="http://bj.yesky.com/">北京</a>    <a href="http://hd.yesky.com/">上海</a>    <a href="http://gd.yesky.com/">广东</a>  <a href="http://xa.yesky.com/">西安</a><br /><a href="http://cq.yesky.com/">重庆</a>    <a href="http://cd.yesky.com/">成都</a>    <a href="http://sy.yesky.com/">沈阳</a>   <a href="http://js.yesky.com/">江苏</a></div><div class="rightarea_right"><a  href="http://my.yesky.com/">用户<br/>登录</a></div></div></div><div class="tright">	<div class="box1">		<script type="text/javascript" src="http://www.yesky.com/TLimages/include/content_text_ad.js"></script> 	</div></div></div><script type="text/javascript" src="http://image.yesky.com/TLimages/include/flash.js"></script>
<DIV id=childmenu><A href="http://soft.yesky.com/">软件频道&gt;</A><A href="http://dev.yesky.com/">程序开发&gt;</A><A href="http://dev.yesky.com/devjava/">Java</A><A href="http://dev.yesky.com/ysdevvb">VB</A><A href="http://dev.yesky.com/ysdevvc">VC</A><A href="http://dev.yesky.com/ysdevdelphi">Delphi</A><A href="http://dev.yesky.com/ysdevc">C/C++</A><A href="http://dev.yesky.com/web/">Web开发</A><A href="http://dev.yesky.com/msdn/">微软专栏</A><A href="http://dev.yesky.com/devydkf/">移动</A><A href="http://dev.yesky.com/devsjk/">数据库</A><A href="http://dev.yesky.com/ysdevcxrs">程序人生</A><A href="http://dev.yesky.com/ysdevrjgc">软件工程</A>|<A href="http://soft.yesky.com/lesson/">软件频道产品中心</A><A href="http://soft.yesky.com/120/3327120.shtml">群乐</A><A href="http://www.mydown.com/soft/develop/news.shtml">下载</A></DIV>
<!--导航条-->
<div id="location">
  <div class="loleft">您现在的位置: <a href="http://www.yesky.com">天极Yesky</a> &gt; <a href="http://soft.yesky.com">软件频道</a> &gt; <a href="http://dev.yesky.com">开发者网络</a> > C语言嵌入式系统编程修炼之软件架构篇</div>
  <div class="adright"><span id="ad2"></span></div></div>


<!--内容块开始-->
<div id="conbox">
<!--左边开始-->
<div id="conleft">
<div id="contopla1"><div id="__001"><div class="qkong"></div><div class="qw1">全文</div><div class="zkong"><div class="kl"></div><div class="bj"><a href="#pls" target="_self">评论</a></div><div class="kr"></div><!-- Error --><script type="text/javascript">
var titiepic ="#";
if (titiepic!="#")
{
document.write("<div class=\"kl\"></div><div class=\"bj\"><a href=\"#\" target=\"_blank\">图片</a></div><div class=\"kr\"></div>");
}
</script>
      <!-- Error --></div></div></div>
	  <div class="topadbg"><span id="ad10"></span></div>
<a name="top"></a><div id="contitle"><h1>C语言嵌入式系统编程修炼之软件架构篇</h1></div>
    <div id="conauthor"><span>
      2005-06-17 15:31
      </span><span>作者:
      宋宝华
      </span><span>出处:
      天极网
      </span><span>责任编辑:<a href="http://comments.yesky.com/t/%B7%BD%D6%DB/6,324/2017631.shtml" title="向本编辑提问" target="_blank">方舟</a> </span></div>
<div class="topadbg"><span id="ad9"></span></div>
<div id="conneirong"><span id="ad3"></span>
<div class="guanggao"><span id="contentAdv"></span></div>  <B>单任务程序典型架构</B><BR><BR>  (1)从CPU复位时的指定地址开始执行;<BR><BR>  (2)跳转至汇编代码startup处执行;<BR><BR>  (3)跳转至用户主程序main执行,在main中完成:<BR><BR>  a.初试化各硬件设备; <BR><BR>  b.初始化各软件模块;<BR><BR>  c.进入死循环(无限循环),调用各模块的处理函数<BR><BR>  用户主程序和各模块的处理函数都以C语言完成。用户主程序最后都进入了一个死循环,其首选方案是:<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>while(1)<BR>{<BR>}</TD></TR></TBODY></TABLE><BR>  有的程序员这样写:<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>for(;;)<BR>{<BR>}</TD></TR></TBODY></TABLE><BR>  这个语法没有确切表达代码的含义,我们从for(;;)看不出什么,只有弄明白for(;;)在C语言中意味着无条件循环才明白其意。<BR><BR>  下面是几个"著名"的死循环:<BR><BR>  (1)操作系统是死循环;<BR><BR>  (2)WIN32程序是死循环;<BR><BR>  (3)嵌入式系统软件是死循环;<BR><BR>  (4)多线程程序的线程处理函数是死循环。<BR><BR>  你可能会辩驳,大声说:"凡事都不是绝对的,2、3、4都可以不是死循环"。Yes,you are right,但是你得不到鲜花和掌声。实际上,这是一个没有太大意义的牛角尖,因为这个世界从来不需要一个处理完几个消息就喊着要OS杀死它的WIN32程序,不需要一个刚开始RUN就自行了断的嵌入式系统,不需要莫名其妙启动一个做一点事就干掉自己的线程。有时候,过于严谨制造的不是便利而是麻烦。君不见,五层的TCP/IP协议栈超越严谨的ISO/OSI七层协议栈大行其道成为事实上的标准?<BR><BR>  经常有网友讨论:<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>printf("%d,%d",++i,i++); /* 输出是什么?*/<BR>c = a+++b; /* c=? */</TD></TR></TBODY></TABLE><BR>  等类似问题。面对这些问题,我们只能发出由衷的感慨:世界上还有很多有意义的事情等着我们去消化摄入的食物。<BR><BR>  实际上,嵌入式系统要运行到世界末日。<BR><BR>  <B>中断服务程序</B><BR><BR>  中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。许多编译开发商在标准C上增加了对中断的支持,提供新的关键字用于标示中断服务程序(ISR),类似于__interrupt、#program interrupt等。当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。<BR><BR>  中断服务程序需要满足如下要求:<BR><BR>  (1)不能返回值;<BR><BR>  (2)不能向ISR传递参数;<BR><BR>  (3) ISR应该尽可能的短小精悍;<BR><BR>  (4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。<BR><BR>  在某项目的开发中,我们设计了一个队列,在中断服务程序中,只是将中断类型添加入该队列中,在主程序的死循环中不断扫描中断队列是否有中断,有则取出队列中的第一个中断类型,进行相应处理。<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>/* 存放中断的队列 */<BR>typedef struct tagIntQueue<BR>{<BR> int intType; /* 中断类型 */<BR> struct tagIntQueue *next;<BR>}IntQueue;<BR><BR>IntQueue lpIntQueueHead;<BR><BR>__interrupt ISRexample () <BR>{<BR> int intType;<BR> intType = GetSystemType();<BR> QueueAddTail(lpIntQueueHead, intType);/* 在队列尾加入新的中断 */<BR>}</TD></TR></TBODY></TABLE><BR>  在主程序循环中判断是否有中断: <BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#dadacf border=1>
<TBODY>
<TR>
<TD>While(1)<BR>{<BR> If( !IsIntQueueEmpty() )<BR> {<BR>  intType = GetFirstInt();<BR>  switch(intType) /* 是不是很象WIN32程序的消息解析函数? */<BR>  {<BR>   /* 对,我们的中断类型解析很类似于消息驱动 */<BR>   case xxx: /* 我们称其为"中断驱动"吧? */<BR>    …<BR>    break;<BR>   case xxx:<BR>    …<BR>    break;<BR>   …<BR>  }<BR> }<BR>}</TD></TR></TBODY></TABLE><BR>  按上述方法设计的中断服务程序很小,实际的工作都交由主程序执行了。<BR><BR><div class="right">共3页。 <a class="page" href="2017631.shtml" target="_self"><font face="Webdings">9</font></a> <a class="page" href="2017631.shtml" target="_self"><font face="Webdings">7</font></a> <a class="page" href="2017631.shtml" target="_self"><b>1</b></a> <a class="page" href="2017631_1.shtml" target="_self"><font color="#666666"><b>2</b></font></a> <a class="page" href="2017631_2.shtml" target="_self"><b>3</b></a> <a class="page" href="2017631_2.shtml" target="_self"><font face="Webdings">8</font></a> <a class="page" href="2017631_2.shtml" target="_self"><font face="Webdings">:</font></a></div>

</div>

<!--广告代码开始-->
  <script>
var ad_cid;
if (window.location.search.substring(1) != "")
{
ad_cid = window.location.search.substring(1);
} else {
ad_cid = 412;
}
</script>
<!--小通栏:c-scolumn顶部500*90-->
<span id="span_ad1"> 
  <script language="JavaScript">
document.write("<script src=\"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-scolumn.js\"><\/script>");</script>
</span> 
  <script language="JavaScript">
document.getElementById("ad1").innerHTML=document.getElementById("span_ad1").innerHTML;
document.getElementById("span_ad1").innerHTML="";
</script> 
<!--c-pip文章正文中间240*200-->
<span id="span_ad3"> 
  <script language="JavaScript">
document.write("<script src=\"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-pip.js\"><\/script>");</script>
</span> 
<script>
if(document.getElementById("contentAdv")) {
document.getElementById("contentAdv").innerHTML=document.getElementById("span_ad3").innerHTML;
document.getElementById("span_ad3").innerHTML="";
} else {
document.getElementById("ad3").innerHTML=document.getElementById("span_ad3").innerHTML;
document.getElementById("span_ad3").innerHTML="";
}</script>
<!--c-text-1“您现在的位置”右侧文字-->
<span id="span_ad2"> 
  <script language="JavaScript">
document.write("<script src=\"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-text-1.js\"><\/script>");</script>
</span> 
  <script language="JavaScript">
document.getElementById("ad2").innerHTML=document.getElementById("span_ad2").innerHTML;
document.getElementById("span_ad2").innerHTML="";
</script> 
<!--c-column-2“标题”上面的广告-->
<span id="span_ad10"> 
  <script language="JavaScript">
document.write("<script src=\"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-column-2.js\"><\/script>");</script>
</span> 
  <script language="JavaScript">
document.getElementById("ad10").innerHTML=document.getElementById("span_ad10").innerHTML;
document.getElementById("span_ad10").innerHTML="";
</script> 
<!--c-column-1“摘要”下面的广告-->
<span id="span_ad9">
<div id="ad9ad">
  <script language="JavaScript">
document.write("<script src=\"http://vd.yesky.com/html/"+ad_cid+"/"+ad_cid+"_c-column-1.js\"><\/script>");</script>
</div>
</span> 
  <script language="JavaScript">
document.getElementById("ad9").innerHTML=document.getElementById("span_ad9").innerHTML;
document.getElementById("span_ad9").innerHTML="";
</script> 

<!--广告代码结束-->
<div id="ad7ad"><span id="ad7"></span></div>
<div class="clear"></div>
    <div id="conlink">
      <script type="text/javascript">var clipBoardContent = document.URL;  function copyUserHomeToClipBoard()  {    window.clipboardData.setData("Text",clipBoardContent);  alert("复制成功,请粘贴到你的QQ/MSN上推荐给你的好友!\r\n\r\n内容如下:\r\n" + clipBoardContent);  }</script><form action="http://feedback.yesky.com/reader/user/doWelcome.view" name="feedbackForm" id="feedbackForm" target="_blank">	<input type="hidden" name="refurl" value="" id="refurl" />	<input type="hidden" name="reftitle" value="" id="reftitle" /></form><script type="text/javascript">document.write("<a href=\"http:\/\/dig.yesky.com\" id=\'yeskyDig\'  onclick=\"javascript:this.href=\'http:\/\/dig.yesky.com\/ding.php?t=\'+encodeURIComponent(document.title)+\'&u=\'+escape(document.location.href)+\'&ac=ding\';\" target=_blank title=\"此文不错,我顶!\"><b>我顶一下<\/b><\/a> <a onclick='javascript:submitFeedback();' style='cursor:hand;'><font color='#FF0000'><b>我要挑错</b></font></a> <a href=\"#top\" target=\"_self\"><a href=\"javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(yesky=window.open('http://hot.yesky.com/dp.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t)+'&st=2','_blank','scrollbars=no,width=400,height=480,left=75,top=20,status=no,resizable=yes'));yesky.focus();\"title=\"推荐到天极网摘 http://hot.yesky.com [鼠标划选本文摘要,然后点击本图片]\" target=\"_self\">收藏到天极收藏夹</a> <a href=\"JavaScript: copyUserHomeToClipBoard()\" target=\"_self\">复制链接发给好友</a> <a href=\"javascript:window.external.AddFavorite('"+clipBoardContent+"')\" target=\"_self\">加入收藏</a> <a href=\"javascript:window.print()\" target=\"_self\">打印</a> <img src=\"http://image.yesky.com/TLimages/newmobile/titlebg19.gif\" title=\"返回顶部\"/></a>");function submitFeedback() {	document.getElementById("refurl").value=document.location.href;	document.getElementById("reftitle").value=document.title;	document.getElementById("feedbackForm").submit();}</script>
    </div>
<div class="clear"></div>

<!--评论-->
      <script language="JavaScript">
<!--
var aid = 2017631;
var channelid = 324;
var tagname = "";
//-->
</script>
<script language="JavaScript">
if(typeof(channelid) != "undefined") {
	document.write("<script language=\"JavaScript\" charset=\"gb2312\"  src=\"http://comments.yesky.com/channlereview/6/"+(channelid%5000)+"/"+channelid+".js\"><\/script>");
}
</script>
<script language="javascript">
<!--
if(typeof(aid) != "undefined") {
		document.write("<script language=\"JavaScript\" charset=\"gb2312\"  src=\"http://comments.yesky.com/articlereplies/6/"+(aid%5000)+"/"+aid+".js\"><\/script>");
 }
//-->
</script>
<script type="text/javascript" src="http://image.yesky.com/TLimages/include/mobile_comment.js"></script>
<div class="clear"></div>
<!--相关文章等-->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -