Arduino juda ko'p buyruqlarni bajarish orqali eskirib ketadimi?

Achchiq savol bo'lsa, kechirasiz, ammo javob topolmadim.

Men Arduino (yoki odatda boshqa mikrokontrolder) kodi engil bo'lsa va juda ko'p operatsiyalarni amalga oshirishga to'g'ri kelmasa, baxtli bo'laman. Juda ko'p ifs, juda ko'p ko'chadan va har qanday murakkab hisob-kitoblarning kodi bir Arduino-ni faqat bir LEDni ko'rsatadigan koddan ko'ra ko'proq eskirib ketadimi?

12
qo'shib qo'ydi muallif Martin C. Martin, manba

5 javoblar

Yo'q, kod MCUni "eskirmaydi". Umuman olganda, nima qilsangiz ham, xuddi shu darajadagi faoliyat amalga oshirilmoqda. Hatto delay() da "ishlamayapti" ishi ko'p.

CPU kamroq bajarish uchun buyruqlar mavjud - ularni IDLE yoki SLEEP rejimida joylashtirishingiz mumkin, ammo ular MCUda "eskirish" ni kamaytirishdan ko'ra quvvatni tejash uchun ishlatiladi.

Tabiiyki, cheklangan umrga ega bo'lgan narsalar mavjud va ularni faqat cheklangan miqdordagi vaqtdan foydalanishingiz mumkin - EEPROMga yozish va Flash xotiraga yozish kabi narsalar - shuning uchun har doim bunday qilishni xohlamaysiz. Bundan tashqari, yo'q, nima qilayotganingizdan qat'i nazar, MCU-ni ishlatmaydi.

20
qo'shib qo'ydi
Javobingiz uchun rahmat. Endi men orqaga qaytib, kerakli kodlarni murakkablashtira olaman va Arduino hayotim haqida xavotirlanmasman! Biroq, bu tashqi komponentlar bilan doimo o'zaro aloqada bo'lishi kerakmi? O'qish sensori, SPI aloqasi va boshqalar.
qo'shib qo'ydi muallif Marcin, manba
@Mast Tizimning ayrim qismlari foydalanilmaganda, aslida faqatgina kuchsizlangan bo'lsa - bu, albatta, juda murakkab ish, ayniqsa latentlikni hisobga olishda (masalan, narsalarni quvvatlantirish uchun bir muncha vaqt oladi, masalan, Intel Skylake butun AVX ni ishga tushirish uchun taxminan 70 soatlik davrni oladi). Nima yordam berayotganini tekshirib ko'rish - faqat qancha quvvat sarflanishini o'lchash; bu juda ko'p issiqlik hosil qiladigan narsa. Bundan tashqari, faqat energiya emas, balki jami energiya iste'molini hisobga oling, masalan. quvvatni tejashda ko'proq vaqtni talab qiladigan sekinroq kod ko'proq samaraliroq bo'lishi mumkin.
qo'shib qo'ydi muallif Mauricio, manba
Siz agressiv ravishda yozsangiz EEPROMni tezda buzib tashlashingiz mumkin. Hayotni biroz osonroq qilish uchun, AVRC maxsus update buyrug'i faqat qiymatni o'zgartirgan holda yozishni amalga oshiradi, bu ko'p ishlatiladigan holatlarga ega (masalan muntazam yozilgan, ammo kamdan-kam holatlarda o'zgartirilgan). Men EEPROMning bayt yoki so'z darajasida ishlamasligiga ishonaman, shuning uchun agar kerak bo'lsa, bu haqda biroz ishlay olasiz.
qo'shib qo'ydi muallif metadaddy, manba
Lekin hamma semikonduktsiya yoshi, shunday emasmi? Issiq tashuvchining in'ektsiyasi va bias temperaturasi beqarorligi esimda bo'lgan mexanizmlardir. Albatta, ko'p yillar talab etiladi.
qo'shib qo'ydi muallif echoblaze, manba
@MV. Ha, lekin microcontroller ustida ishlayotgan narsa, albatta, ta'sir qilmaydi. Nima bo'lishidan qat'iy nazar siz CPUni (taxminan) bir xil darajada ishlayapsiz. Siz hamma narsani (juda ko'p) hamma vaqt foydalanasiz.
qo'shib qo'ydi muallif Majenko, manba
Faqat juda kichik miqdor. "Hech narsa qilmasdan" ham, u qattiq ishlaydi va qayta ishlanadi.
qo'shib qo'ydi muallif Majenko, manba
Bilvosita ishlab chiqarilgan issiqlikka ta'sir qiladigan kodni kodlamaydimi? Issiq tarkibiy qismlar tezroq tushib ketishi mumkin.
qo'shib qo'ydi muallif Chong Sun, manba

Bunday emas. Xo'sh, agar siz 20 yil kabi ishlayotgan bo'lsangiz, asta-sekin kuchsizlashishi mumkin ... (ko'plab boshqa jismoniy mahsulotlar kabi)? Hech bo'lmaganda, bu kod murakkabligiga tayanmaydi, bir xil xotira bo'limida qancha yozish jarayoni amalga oshiriladi. Bundan tashqari, u eskirib qolganida, u faqat brick oladi va LEDni milt-miltillovchi kabi oddiy kodga aylanmaydi.

Arduino (Uno) uchta xotira qismiga ega. SRAM, FLASH va EEPROM. SRAM mantiqiy tranzistor eshigiga o'xshaydi. O'zgaruvchilarni saqlash orqali eskirib bo'lmaydi. FLASH va EEPROM suzuvchi eshiklardan iborat. Yangi ma'lumotlar yozishda asta-sekin eskirishadi. Ateml mikrokontrolörünün ma'lumot sahifasidan , shunday deydi:

Flash xotirasi kamida 10000 yozish/o'chirish aylanishiga chidamliligiga ega. (8.2 bobdan)

     

EEPROM eng kam 100.000 yozish/o'chirish davrlarini chidamliligiga ega. (8.4 bobdan)

Biroq, FLASH xotirasi kodni bajarish uchun bo'sh joydir. Arduino ishlayotgan paytda yozma operatsiya qilinmaydi. Yangi kod yuklaganingizda faqat FLASH xotirasi yozasiz. Shunday qilib, siz kodi kamida 10 000 marta yuklaganingizda eskirib ketadi.

Agar chindan ham xohlasangiz, Arduino yopilganda o'zgaruvchan ma'lumotlarni saqlab qolish uchun odatda FLASH xotirasini o'z-o'zini qayta-qayta yozish uchun maxsus kodni yaratishingiz mumkin. Ushbu turdagi dasturni yozsangiz, u asta-sekin eskirib ketadi, chunki FLASH xotirasida ko'p yozma chidamlilik yo'q. Shuning uchun, agar siz Arduino yopiq bo'lsa ham ma'lumotni saqlamoqchi bo'lsangiz EHPROMni undan ko'p umr ko'rishga ega bo'lishingiz kerak.

Xulosa qilish mumkinki, kodni bajarish bilan emas, balki FLASH yoki EEPROM xotirasini qayta yozish orqali eskiradi.

6
qo'shib qo'ydi

Xobbi uchun:

Bitta hayot bilan cheklangan dasturiy ta'minot bilan bog'liq muammolar haqida FLASH xotirasiga bir dastur ichidan imkon qadar tez yozish mumkin. Biroq, bir nechta dastur o'zgaruvchan akkumulyatorlarni almashtirish kabi voqealardan omon qolish uchun zarur bo'lgan o'zgaruvchan vositalardan foydalanadi.

Hayotda cheklanmagan apparat bilan bog'liq muammolar haqida kam qarshilik yuklari (akkor amrullari), indüktif yuklarni (masalan, mexanik o'rni to'g'ridan-to'g'ri surish) ikkita deb nomlashni yuklaydi. Lekin savol faqat dasturiy ta'minot.

5
qo'shib qo'ydi

... (yoki odatda boshqa har qanday mikro-kontrol) ...

Boshqa javoblar juda yaxshi, lekin bitta kichik istisno bor.

Ferroelectric RAM (FRAM) is a form of memory that combines the non-volatility of flash and EEPROM, the writability of SRAM, and the density of DRAM.

However, read operations on FRAM are destructive to the data stored in the FRAM, and write operations are destructive to the FRAM construction itself (and since the data is destroyed by reading it, it must be written back each time). If your code is located in FRAM then running it will wear down the MCU in time. But given that FRAM has a write endurance in the millions of billions it is unlikely that the MCU will become inoperable due to FRAM in the lifetime of the device.

FRAMdan foydalanadigan MCU ning misollariga TI ning MSP430FRxx liniyasi .

4
qo'shib qo'ydi
Umuman, agar FRAM mavjud bo'lsa, boshqa xotira yo'q. Hatto porlashi ham yo'q.
qo'shib qo'ydi muallif Majenko, manba

Ehtimol, ... Atmele chipi vaqt o'tishi bilan iliqroq bo'lishi mumkin (hatto kechikish bu to'sqinlik qilmaydi), ammo uning issiqligini echish imkoniyati bo'lsa, menda muammo yo'q. Lekin ko'pincha faqatgina overclocking haqiqatdan ham jiddiy muammolarga olib kelishi yoki Arduino-ni to'liq yopiq xonada yoki issiq muhitda ishlatishi mumkin.

Taqqoslash uchun: ko'plab kompyuterlar uzilishlarsiz yillar davomida ishlamoqda, Atmel (chip) bu ma'noda ishlab chiqarilgan issiqlik o'chirilishi mumkin bo'lganda farq yo'q.

You can read more about a heat sensor in Atmels here: Internal Temperature Sensor

3
qo'shib qo'ydi
Farqi bor - bugungi kunda aksariyat kompyuterlar energiya tejaydigan xususiyatlarga ega. kerak bo'lmaganida juda ko'p narsalar o'chirib qo'yiladi va bu juda ko'p bo'ladi. Arduino shuningdek, energiya iste'molini qisqartirish yo'llariga ham ega, ammo ularni aniq ishlatishingiz kerak. Agar siz ko'pincha kuch bilan ishlaydigan biror narsaga muhtoj bo'lsangiz, learn.sparkfun. com/tutorials/reducing-arduino-power-consumpt & zonj; ion - boshlashning ajoyib usuli. Xususan, past kuch ishlatadigan uyqu kuchini iste'mol qilishni ming barobarga kamaytiradi - bu faqat CPUni aylantirgan delay dan farqli o'laroq. Bu uning narxiga, albatta :)
qo'shib qo'ydi muallif Mauricio, manba
Arduino kechiktirishni amalga oshiradi, etarlicha vaqt o'tganini tekshiradi. Shunday qilib, dasturni ishga tushirish yoki kechikish ga ega bo'lgan ishlov berish quvvati bir xil miqdorda foydalanadi.
qo'shib qo'ydi muallif Al., manba
Men ushbu qismni yangilayman (olib tashlayman) ... thanks!
qo'shib qo'ydi muallif Pat, manba