作为无人机方面做嵌入式编写的飞控总结-使用系统嘀嗒定时器评价代码架构的可靠性

1.评价一个mcu,主要看其系统的资源,

    系统的资源,除了物理层上厂家已经定死的固定驱动数量(比如串口数量,iic数量,spi数量或者can数量等等,这个我们没法改变),除此之外,针对我们可以操作的软件层面,系统资源还大致可以分为时间资源和空间资源,这两个资源,在小型系统上的重要性不太明显,但是代码量增大之后,经常不可避免的出现hardfault之类的,或者代码执行不准确等等“莫名其妙”的问题;

2,故给出使用systick嘀嗒定时器,来评价你的嵌入式系统执行效果;

毕竟是定时器,一定具有定时器的特征:定时器的时钟/分频以及重载值+定时器中断      

故:很简单的计算出这个嘀嗒定时器的中断次数(我mcu是F103的,所以系统时钟是72Mhz)

同理,请大家参考我在F4上的设置:

3

——————————————————

uint32_t micros(void)

{
    register uint32_t oldCycle, cycle, timeMs;
    do
    {
        timeMs = __LDREXW(&sysTickUptime);//将&sysTickUptime地址的数值给timeMS
        cycle = *DWT_CYCCNT;
        oldCycle = sysTickCycleCounter;
    }
    while (__STREXW(timeMs , &sysTickUptime));//保存MS到sysTickUptime
    return (timeMs * 1000) + (cycle - oldCycle) / usTicks;

}

----------------------------------------------------------

 if (frame_50Hz)
        {
            frame_50Hz = false;
            currentTime      = micros();
            deltaTime50Hz    = currentTime - previous50HzTime;
            previous50HzTime = currentTime;
         。。。。
            executionTime50Hz = micros() - currentTime;
        }
        if (frame_10Hz)
        {
            frame_10Hz = false;
            currentTime      = micros();
            deltaTime10Hz    = currentTime - previous10HzTime;
            previous10HzTime = currentTime;
                    ......
            executionTime10Hz = micros() - currentTime;
        }
        if (frame_500Hz)
        {         
            frame_500Hz = false;
            currentTime       = micros();//获取当前时间
            deltaTime500Hz    = currentTime - previous500HzTime;//得到时间增量
            previous500HzTime = currentTime;//保存当前时间

            executionTime500Hz = micros() - currentTime;//本次运算执行时间长度保存到executionTime500Hz
        }

         。。。。

--------------------------

4。还有一个办法,利用普通的定时器来判断具体函数所耗费的时间资源,比如下实例:TIMx->CNT;


猜你喜欢

转载自blog.csdn.net/xiaoxilang/article/details/80423606