これは学術的な質問ですが (必ずしもそうするつもりはありません)、どのように機能するのか興味があります。私はユーザーランド ソフトウェア (ハードウェアではなく) ソリューションを考えています。
PWM 信号を生成したい (デジタル GPIO ピンの数が少ないが、1 つ以上の場合としましょう)。私はおそらく、Pthread を作成するプログラムを作成し、sleep()
そのスレッドで適切な s などを使用してデューティ サイクルを無限にループして、比率を正しくするでしょう。
これは CPU をひどく壊しませんか? 周波数は 100 Hz 前後になると思います。私は以前にこのようなことをしたことがありませんが、一定のループ、コンテキストの切り替えなどはマルチタスクや CPU の使用には適していないと想像できます。
この場合の CPU の使用とマルチタスクに関するアドバイスはありますか? FWIW シングルコア プロセッサを考えています。答えは、「システムが使用できなくなる」から「関連する数値は、最新のプロセッサに影響を与えるよりも桁違いに小さい」までさまざまです。
最も適切と思われるため、C を想定します。
編集:ハードウェアGPIOピンにアクセスできるマシン上のLinuxまたはその他の汎用POSIXオペレーティングシステムを想定しています。
EDIT:スリープでPWMを実装する方法は明らかだと思いました。疑いを避けるために、次のようなものがあります。
while (TRUE)
{
// Set all channels high
for (int c = 0; x < NUM_CHANNELS)
{
set_gpio_pin(c, 1);
}
// Loop over units within duty cycle
for (int x = 0; x < DUTY_CYCLE_UNITS; x++)
{
// Set channels low when their number is up
for (int c = 0; x < NUM_CHANNELS)
{
if (x > CHANNELS[c])
{
set_gpio_pin(c, 0);
}
}
sleep(DUTY_CYCLE_UNIT);
}
}