güvenli bir şekilde çalıştırılıyor düşük güç tüketimi modunda RAM'den çalıştırılan c kodum var (bu nedenle kesintiler ele alınmıyor). Kod dizisi ile etkin Bu mod:STM8 ASM, WFE
- atlama
- WFE modu ile bir işi yapmak düşük hızlı saat kaynağına iç flaş ve güç regülatörü, anahtarı (LSE)
- SİM
- anahtarı kapalı RAM
- atlama flaş (düşük güç bekleme modu) güç regülatör ve flaş üzerinde
- anahtarı, geri saat kaynağı
- RIM Bu nedenle, errata sayfasında açıklanan WFE talimatı ile ilgili bir sorun yoktur. zamanlayıcı gelen
000035 720252B602 BTJT TIM1_SR1, #1, 0xB6 00003A 728F WFE
Olay bir olasılık doğası vardır ve bu: olarak sökme
while nbit(TIM1_SR1,CC3IF) asm("wfe");
şudur: Bu yapım ilgili sorun, sonsuza dek düşük güç bekleme modunda içinde CPU kilidin neden olabilir kod, WFE komutunun yürütülmesinden sonra gerçekleşeceğinin garanti edilmez:
- BTJT talimatı 2 döngüde gerçekleştirilir ve uzunluk 5'e sahiptir; devletler Birkaç döngüden
Ben manuel PM0044 kullanın ve üzerinde yürütmeye ara "getir" çünkü RAM dan yürütülen
Kod yürütme 3 döngüde durduğunda 2 vaka var. Bu yüzden asenkronize uyandırma olayımın BTJT ve WFE talimatları arasında gerçekleşmeyeceğinden emin değilim.
Sıkı bir mantıksal sekans sağlamak için yollar var mı (kontrol koşulu> wfe> uyandırma olayı)? OP tarafından bulunan
Ne sorduğun belli değil. WFE komutu yürütüldükten sonra CPU zaten bir olay tarafından uyandı ve aşağıdaki komut yürütüldü. Aşağıdaki talimat, BTJT talimatına geri sıçrayan JRA komutu olmalıdır. Sıra 1) test biti ve çıkış döngüsü ise 2) eğer uyandırma olayı için bekleyiniz 3) adım 1'e atlayın. Eğer WFE kontrol kayıtlarını doğru şekilde programladıysanız, sıra 1) test bitine eşdeğer ve çıkış olmalıdır. eğer set 2) döngü 1'e atlayın. WFE komutu sadece güç tasarrufu sağlar. –
@Ross, Gerçekten düşündüğünüz gibi mi? _WFE komutu yürütüldükten sonra CPU zaten bir olay tarafından uyandı ve aşağıdaki komut yürütüldü. Şimdi Şimdi bu büyük kodun yapısının doğru olduğuna ve doğru yolun WFE girişini sadece oldukça büyük bir sınır varsa kullanacağına inanıyorum. zaman. Ve daha karmaşık durumlarda herhangi bir rakip uyandırma olayından sonra onu kullanmayın. – imbearr
Açıkladığım şekilde çalıştığından eminim. WFE komutunun yürütülmesi sırasında CPU uykuda ve bir olayı beklemektedir. WFE komutunun yürütülmesi bittikten sonra CPU artık uykuda değildir ve artık bir etkinlik beklememektedir. Daha sonra, bir komutun yürütmeyi tamamladığında normalde olduğu gibi sonraki talimatı yürütür. Ancak, hala senin sorunun ne olduğunu görmüyorum. Bu yüzden aynı şeylerden söz etmeyebiliriz. Ne zaman büyük bir zaman sınırı çözer? –