1.4 任务间的通信
电感器生产各个任务是通过抢占CPU的使用权来运行的电感器生产厂家,它们之间存在一定的逻辑关系,彼此互相联系又互相制约。信号量、邮箱、消息队列等功能为实现任务间通信提供了有力工具,它们的使用方法灵活多变,如用信号量设置事件标志,唤醒任务、用邮箱在任务间传递参数、用消息队列的循环寻址功能进行模拟通道的数据采集等。本文设计了两个信号量,在系统运行开始后,任务TASK_AD检测直流侧电压的大小。当电压未超过设定值时,发出信号DC_NORM唤醒任务Task_NORMAL;当电压高出设定值时,发出信号DC_OVER唤醒任务Task_FEBACK。虽然这两个任务基于不同的控制结构,采用不同的算法,但都要使用PWM输出和SPI通信口,所以在唤醒一个任务的同时必须让另外一个任务挂起。这里引入了互斥型信号量T_MUTEX实现这个功能。得到T_MUTEX信号的任务将独自占有共享资源的使用权,两个任务不会因资源冲突而同时挂起,解决了任务间优先级反转问题,避免了系统功能失效。任务间逻辑关系如图2所示。
操作系统为任务间通信提供了多种途径,但最简单有效的方法是共享全局变量。本文使用共享全局变量的方法实现了显示任务与键盘中断服务之间的通信,代码如下:
键盘中断:
static void KeyboardISR(void)
{
UWord16 cpu_sr;
OS_ENTER_CRITICAL(); //临界区代码保护
asm{
move X:$0FB7,A1 //读键盘中断状态表
move A1,state1 //将中断状态放入全局变量
};
扁平型电感 OS_EXIT_CRITICAL(); //临界区代码保护结束
}
这里state1是全局变量,键盘中断的工作仅仅是将PORTA口中断状态寄存器(IESR,地址$0FB8)读入state1中。为防止其他任务在此期间对state1的修改,使用了临界区代码保护。
显示任务的部分代码:
switch(state1)
{case 1: //PTA_0对应的键被按下
…… //相应的服务程序,略
case 128: //PTA_7对应的键被按下
break; }
asm{move $00,X:$0FB8}; //清键盘中断状态, 以备下次中断
显示任务中采用多分支结构,根据statel=2n,(n=0,1,2,3,,4,5,6,7),不同的值代表不同的键被按下,程序进行相应的处理;最后将IESR寄存器清零。用同样的方法,两位之间互相组合可扩展形成16个按键。这样只用一个全局变量就完成了中断与任务间的通信,程序用内嵌汇编的C来写,简捷高效。
2 系统设计中需注意的问题
首先是存储器分配问题。多任务、邮箱等功能的使用会增加RAM的额外开销,在不扩展外部RAM的情况下,可用的只有片内2KB数据RAM和512字的程序RAM,资源相对有限,存储空间的合理分配就显得很重要。任务堆栈所占用的RAM空间要根据实际应用来确定,必须考虑任务调用的嵌套情况、任务中函数为局部变量所分配的内存数目。另外,它必须能保存DSP的所有2模压电感器2个寄存器和16个存储器字。如果为任务分配的存储空间富余过多则造成资源紧张,甚至会因内存溢出导致系统崩溃。解决方法是调用系统函数OSTaskStkChk(),它可以检测每个任务运行时使用的内存大小,为合理分配内存空间提供了依据。另外,可采用一些简化方法节省RAM空间。例如SDK为AD采集的每个通道都定义一个结构体,它包括三个元素:句柄、数值长度和采样值;如果使用五路AD采集,就得定义五个结构体。通常不进行初始化,DSP内核在运行时将它们放入RAM空间,占用RAM较多。通常关心的只是采样值一个元素,其他两个只完成辅助功能。如果使用一个存放采样值的变量代替这个结构体,或直接采用汇编语言写这段代码,就可大幅度地节省RAM空间。本文的AD采集程序就是用汇编完成。
SDK没有提供在DSP56F803下使用SPI函数的例程。
仿照在807中的成功应用,笔者调用spiWrite()函数,通过SPI驱动D/A转换芯片。但在编译连接时出现系统错误,数据类型unsigned short与const void不匹配,在cons
又一经典的弱信号测试文章大家好,这个是在大学时帮别人做的毕业设计的一些资料,希望对大家有帮助!大家需要原理图的源文件和程序文件等完整的资料,请回复自己的邮箱!我将一一发给大家,也希望对大家有所帮助!本次设计硬件部分主要由信号
数字式电能质量在线监测系统在电力系统中的运用电能质量在线监测设备是电网电能质量监督检测网络最基本也是最主要的设备,目前市场上销售和使用的国内外生产的电能质量部分指标(如谐波、不平衡度等)的监测设备,大都不能完全适应我国电网电能质量监督管理的实际
利用0至1V模拟乘法器实现电池供电系统的精确功摘要:有些系统要求测量输出到负载的功率,这比通过传统的电流检测放大器简单测量电流更为重要。负载功率测量可以精确管理电池或交流适配器供电设备的功率。该应用笔记显示了创建一个简易模拟乘法器(用MAX421