夏休みでArduinoデビューしてLチカから始まって7セグメントLEDを使って練習しています。
ドット付の7セグを表示するのにカソードだけでGPIOピンを8本も使ってしまう事が分かりました。
購入した初心者キットには標準ロジックICの74HC595(シフトレジスタ)と言うのが入っていて、これを使うとピンが3本で済むそうです。
 以下の2つを購入しました(純正品UNOと、互換品本体を含む周辺部品のセット)
 https://www.switch-science.com/catalog/789/
 https://www.amazon.co.jp/dp/B06Y56JV64/

回路を組み立てて見たところ、サンプルスケッチではデータの転送にかなり時間が掛かってしまうことがわかりました。(LEDのダイナミック制御の周期的には十分速いが、CPUが忙しい。)
そこでATmega328Pのデータシートを読んで内蔵されているSPI通信用のシフトレジスタとクロック生成器が使えそうなので、試しにそれを使って74HC595にデータを送りました。

以下の通り2つのソースを書いて見たのですが、ラッチが上がるまでの時間がとても違います。ほぼ同じ動作(のはずだと思って書いた)のにどうしてでしょうか?
5倍近く違いのは何かおかしいですか?(何度も試しても同じ時間になります。)また、この時間にArduinoが何をしているのかはどうやって調べますか?

ソース1
https://paste.ofcode.org/MNcYqpYGBTJ4RnaswSkCAF
ソース2
https://paste.ofcode.org/mdMLVgmMRiNmb4nturgvGR
実行結果?
https://i.imgur.com/prIPp7P.png

(キットに付いてきたサンプルソースは、関数内でforループでビットシフトしたデータをポートにセットしながらdigitalWriteでclkをH/Lしており、とってもCPU時間がかかりました。)