单任务程序典型架构&中断服务程序

单任务程序典型架构 
 
  (1)从CPU复位时的指定地址开始执行;
 
  (2)跳转至汇编代码startup处执行;
 
  (3)跳转至用户主程序main执行,在main中完成:
 
   a.初试化各硬件设备; 
 
   b.初始化各软件模块;
 
   c.进入死循环(无限循环),调用各模块的处理函数
 
    用户主程序和各模块的处理函数都以C语言完成。用户主程序最后都进入了一个死循
环,其首选方案是:
while(1)
{
}


   中断服务程序 
 
    中断是嵌入式系统中重要的组成部分,但是在标准 C 中不包含中断。许多编译开发商
在标准 C 上增加了对中断的支持,提供新的关键字用于标示中断服务程序(ISR),类似于
__interrupt、#program interrupt 等。当一个函数被定义为 ISR 的时候,编译器会自动为该函
数增加中断服务程序所需要的中断现场入栈和出栈代码。
 
    中断服务程序需要满足如下要求:
 
   (1)不能返回值;
 
   (2)不能向 ISR 传递参数;
 
   (3) ISR 应该尽可能的短小精悍;
 
   (4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在 ISR 中采用。
 
    在某项目的开发中,我们设计了一个队列,在中断服务程序中,只是将中断类型添加入
该队列中,在主程序的死循环中不断扫描中断队列是否有中断,有则取出队列中的第一个中断类型,进行相应处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
//出入均设有缓冲区,大小可任意设置。 //可供使用的函数名: //char getbyte(void);从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。 //getline(char idata *line, unsigned char n); 获取一行数据回车结束,必须定义最大输入字符数 //putbyte(char c);放入一个字节到发送缓冲区 //putbytes(unsigned char *outplace,j);放一串数据到发送缓冲区,自定义长度 //putstring(unsigned char code *puts);发送一个定义在程序存储区的字符串到串口 //puthex(unsigned char c);发送一个字节的hex码,分成两个字节发。 //putchar(uchar c,uchar j);输出一个无符号字符数的十进制表示,必须标示小数点的位置,自动删除前面无用的零 //putint(uint ui,uchar j);输出一个无符号整型数的十进制表示,必须标示小数点的位置,自动删除前面无用的零 //delay(unsigned char d); 延时n x 100ns //putinbuf(uchar c);人工输入一个字符到输入缓冲区 //CR;发送一个回车换行 //************************************************************************* #include <w77e58.h> #define uchar unsigned char #define uint unsigned int #define OLEN 32 /* size of serial transmission buffer */ idata unsigned char outbuf[OLEN]; /* storage for transmission buffer */ unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置 #define ILEN 12 /* size of serial receiving buffer */ idata unsigned char inbuf[ILEN]; unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置 unsigned char idata *getlast=inbuf; //最后取走的字节位置 bit outbufsign0; //最后一个数据覵BUF发完标志 发完=0 bit outbufsign; //输出缓冲区非空标志 有=1 bit inbufsign; //接收缓冲区非空标志 有=1 bit inbufful; //输入缓冲区满标志 满=1 #define CR putstring("\r\n") //CR=回车换行 //***************************** //延时n x 100ns void delay(unsigned char d) //在源程序开头定义是否用w77e58或22。1184M晶振 {unsigned char j; do{ d--; //110592 &amp; 89c52 #ifndef cpuw77e58 #ifndef xtal221184 j=21; //k=38 cpu80320 100us k="21" cpu 8052 #else j=42; #endif #else #ifndef xtal221184 j=38; #else j=76;
双核AMP(Asymmetric Multi-Processing)非对称处理器架构是一种多核处理器设计,其每个核心具有不同的处理能力和特性。在双核AMP架构一个核心通常被称为"主核心",而另一个核心被称为"辅助核心"。 在开发双核AMP非对称处理器架构程序时,需要考虑以下几个方面: 1. 确定主核心和辅助核心的任务分配:主核心通常用于处理重要的任务或需要更高性能的任务,而辅助核心则可以用于处理较为简单或低优先级的任务。根据具体应用需求,合理分配任务可以充分利用双核AMP架构的优势。 2. 线程管理和调度:双核AMP架构可以支持并行执行多个线程,因此在程序开发需要合理地管理和调度线程。可以使用多线程编程模型,如使用线程池来管理线程,或者使用特定的API来控制线程在主核心和辅助核心之间的分配。 3. 数据同步与通信:在双核AMP架构,主核心和辅助核心之间可能需要进行数据共享和通信。这涉及到数据同步和互斥机制的设计,以确保数据的一致性和正确性。 4. 性能优化:在程序开发过程,可以针对双核AMP架构进行性能优化。例如,可以通过合理地利用主核心和辅助核心的特性,充分利用其计算能力和资源,以提高程序的运行效率和性能。 需要注意的是,双核AMP非对称处理器架构程序开发相对于传统的单核处理器架构开发来说,需要更多的考虑和优化。因此,在设计和开发过程,需要充分了解和理解目标处理器架构的特性和限制,并根据具体应用需求进行合理的调优和设计
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值