ATxmega之实现实时系统

分享到:

xmega上实现一个简单的实时系统,对于一般的mcu已经够使用了。下面主要介绍一个简单实时调度系统的实现过程。
初始化调度系统资源,这里使用固定的存储来保存任务资源,没有使用动态分配内存的方式来实现。从而不会出现内存泄漏,但是也存在使用起来不灵活的弊端。我们使用最大的任务数来决定任务的数量,这种方法没有限制,但是受mcu内存的限制,只能根据实际情况来分配任务数,原则够用就可以。我们这里称为任务内存模块。
初始化完成之后,就是添加任务了。
Scheduler_AddTask是添加任务函数,参数1是任务的回调函数,参数23都是时间。添加任务就是在任务内存块中找一个没有使用的内存,把相关数据保存起来。返回的值小于总任务数,添加成功,否则,失败。

 

添加好任务后,就是启动任务了。

 

启动任务我使用定时器来1ms溢出中断来实现。
这个定时器初始化前面说过,这里不多说,溢出回调函数是SysTick_Handler。在这个回调函数中实现任务的调度。
m_u32SystemTime统计系统联系运行时间;m_u32UserTime工用户使用;如果astcTaskTable[u32TaskNumber].u32DelayToNextRun0是,表示任务u32TaskNumber得也运行。根据astcTaskTable[u32TaskNumber].u32PeriodicalDelay值判断是否需要周期性运行该任务。

 

有添加任务,就有删除任务。

 

 

最后就是执行任务了。

 

 

上述任务都要在固定时间周期上运行,那么有紧急任务的时候怎么办,我在系统中添加了一个紧急任务处理函数。

 

pfnHighPriorityTaskCb就是在定时器回调函数SysTick_Handler中的处理函数
  if (pfnHighPriorityTaskCb != NULL)
  {
    pfnHighPriorityTaskCb();
  }
最多延迟1ms执行。
下面举例说明一下使用
4
 
 

更多Atmel及科技资讯请关注:  
Atmel中文官网:http://www.atmel.com/zh/cn/
Atmel技术论坛:http://atmel.eefocus.com/
Atmel中文博客:http://blog.sina.com.cn/u/2253031744
Atmel新浪微博:http://www.weibo.com/atmelcn

 

继续阅读
Microchip专家技术文章:实现电源智能化

世界上有许多供电应用,其中大部分只需要一个干净的电流源或电压源即可完成工作。在这些应用中,越来越多的应用需要通过某种智能算法来调整电压或电流以改善性能、降低功耗或者实现某种新功能,从而使产品在市场上更具竞争力。

处理器性能过高?删除部分逻辑门,降低功率

现在的问题是,对于大部分应用来说,处理器的性能反而会过高。

MCU厂商排排站,Microchip狂增50%!

随着物联网智能化趋势明显,MCU的需求日益高涨,2016年全球MCU出货在230亿颗左右,MCU领域竞争也日趋积累,2015年收购的公司市场份额都大幅度提升,如NXP超越瑞萨跃居第一,Microchip程航50%!

Microchip推出专为电机控制和通用应用而优化的新型32位PIC32系列MCU

全球领先的整合单片机、混合信号、模拟器件和闪存专利解决方案的供应商——Microchip Technology Inc.(美国微芯科技公司)近日发布最新的PIC32单片机(MCU)系列。新的PIC32MK系列共包含4款高度集成、用于高精度双电机控制应用的MCU器件(PIC32MK MC),以及8款带有串行通信模块、用于通用应用的MCU器件(PIC32MK GP)。所有MC和GP器件均包含一个120 MHz 32位内核,可支持DSP(数字信号处理器)指令。此外,为了简化控制算法的开发工作,MCU内核中还集成

盘点晶振常见问题及解决方法

众所周知,在电子行业有这样一个形象的比喻:如果把MCU比作电路的“大脑”,那么晶振毫无疑问就是“心脏”了。同样,电路对“晶体晶振”(以下均简称:“晶振”)的要求也如一个人对心脏的要求一样,最需要的就是稳定可靠。晶振在电路中的作用就是为系统提供基本的频率信号,如果晶振不工作,MCU就会停止导致整个电路都不能工作。然而很多工程师对晶振缺乏足够的重视和了解,而一旦出了问题却又表现的束手无策,缺乏解决问题的思路和办法。

©2017 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss