Embedded “我可以换吗?”;推迟到;cortex-m4上的粒度?

Embedded “我可以换吗?”;推迟到;cortex-m4上的粒度?,embedded,ada,stm32,Embedded,Ada,Stm32,我在STM32F4发现板上安排一个带有“delay-until”子句的循环,当我增加频率时,就不再考虑时间限制了。经过一些挖掘,我的印象是调度程序的粒度不能满足任务的要求。其中一个迹象是,当我走得很慢时,时间是最受尊重的,而且我走得越快,它就越疯狂。但迟到似乎是离散的,就像落在调度频率限制上一样 以下是我的测试代码: task body PWM is onPeriod : Time_Span; offPeriod : Time_Span; perio

我在STM32F4发现板上安排一个带有“delay-until”子句的循环,当我增加频率时,就不再考虑时间限制了。经过一些挖掘,我的印象是调度程序的粒度不能满足任务的要求。其中一个迹象是,当我走得很慢时,时间是最受尊重的,而且我走得越快,它就越疯狂。但迟到似乎是离散的,就像落在调度频率限制上一样

以下是我的测试代码:

  task body PWM is
      onPeriod   : Time_Span;
      offPeriod  : Time_Span;
      period     : Time_Span;
      Next_Start : Time    := Clock;
      PWM_On     : Boolean := True;
  begin
      loop
          period    := Microseconds (1_000_000) / PWMFrequency;
          onPeriod  := period / 3;
          offPeriod := 2 * period / 3;
          if (PWM_On) then
              Off (Pattern (Next_LED));
              PWM_On     := False;
              Next_Start := Next_Start + offPeriod;
          else
              On (Pattern (Next_LED));
              PWM_On     := True;
              Next_Start := Next_Start + onPeriod;
          end if;
          delay until Next_Start;
      end loop;
 end PWM;
我没有显示示波器轨迹,它太复杂了,可以说频率越高,占空比就越小,接近33.3%(甚至稳定)

在调查了蚊虫分布后,我发现在s-bbbosu.adb中:

--  We use the Sys_Tick timer as a periodic timer with 1 kHz rate. This
--  is a trade-off between accurate delays, limited overhead and maximum
--  time that interrupts may be disabled.

Tick_Period   : constant Timer_Interval := Clock_Frequency / 1000;
(以及在s-bbtime.adb中名为Delay_Until的函数中与该函数的一些连接)

我是被迫手动使用本机MCU定时器,还是系统中提供了一些更高速度的调度工具?
我是Ada的初学者,所以答案可能是显而易见的。

您可以通过将修改过的文件放在自己的代码目录中并使用
gnatmake-a
gprbuild
无法在命令行上识别此开关,尽管可以将其包含在GNAT项目文件中)。请注意,库文件的重新编译是使用要求严格符合GNAT编码样式的开关完成的(例如,编译器警告被视为错误,如C的
-Werror

所以你可以说

Tick_Period   : constant Timer_Interval := Clock_Frequency / 10_000;

毫无疑问,你还需要去一些地方,那里的
Tick\u Period
用来确定等待给定
持续时间的Tick数

谢谢,我现在就去试试。难道没有一种更聪明的方法可以根据任务需要来编程可变计时器吗?(这已经存在,所以我不必这么做).我花了45分钟在它上面,我无法让它编译。问题是softfp、crt0.o和无法识别的thumb指令正在滚雪球般地失去控制。我将放弃这个构建过程。谢谢你的建议。