Linux等多任务操作系统中使用延时函数要特别注意以下几点:
(1)应用层和内核层的延时函数是不能混用的。因为,内核层的延时函数在调用过程中是不会发生任务切换的延时是精确的,而应用层的延时函数在延时函数调用是会发生任务切换,延时是不精确的。
(2)模拟时序的操作必须要在内核层完成,即函数执行的过程中不能够发生任务切换,因为切换会导致延时不精确。
(3)在应用层的一个任务中多次频繁的调用延时函数会导致延时精度偏差非常的大。
那么,如果我们想在应用层中实现模拟时序和一个任务中多次调用延时函数这类操作应该怎么办?
(1)根据CPU的频率来计算一次加减法运算的时间来替代标准C语言提供的延时函数。
(2)将任务的优先级提高到不能被中断的级别。
下面贴出一段,我们使用PPC405EP在应用层做延时的函数:
/*f=25MHz 1us---n=2*/
/*PPC405EP 1us---n=10*/
void delayus(unsigned char n)
{
n = n*10;
while(--n)
;
}
/*f=25MHz 1ms---n=1*/
/*PPC405EP 1ms---n=1*/
void delayms(unsigned char n)
{
unsigned char i=0x64;
while(--n)
{
while(--i)
delayus(0x64);
}
}
我们团队有着十几年的期货程序化交易算法与软件研发经验,基于C++ Qt技术研发了具有自主知识产权的期货智能程序化交易一体化系统平台,该平台封装了二百多个量化指标,具有低时延、高性能、小滑点、可定制和跨平台的特点。团队致力于将人工智能技术与传统的程序化交易技术相结合为客户提供灵活可定制的期货智能程序化交易服务和产品。
有问题,欢迎邮件讨论:qinpanke@gmail.com
2013年7月8日与北京邮电大学新科研楼302。