Мазмұны:
- 1 -қадам: Сізге не қажет
- 2 -қадам: оқу және жазу регистрлері
- 3 -қадам: сақтандырғыштарды оқу және жазу
- 4 -қадам: Басқа командалар
- 5 -қадам: қабықты баптау
- 6 -қадам: Қорытынды
Бейне: AVRSH: Arduino/AVR үшін командалық аудармашы қабығы: 6 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:28
Сіз AVR микроконтроллеріне «кіргіңіз» келді ме? Регистрдің мазмұнын көру үшін «мысық» салу жақсы болар деп ойладыңыз ба? Сіз әрқашан AVR немесе Arduino перифериялық қосалқы жүйелерін * нақты уақытта * қосу мен өшіруді қалайсыз ба? Мен де, сондықтан мен AVR Shell, UNIX тәрізді қабық жаздым. Бұл UNIX-ке ұқсайды, себебі бұл сіздің irc nick соқтығысу боттарын іске қосу үшін сатып алынған және сатып алынған қабықшаны еске салады, сонымен қатар бір немесе екі команданың болуы. Ол сондай-ақ UNEF ext файлдарына ұқсайтын, сыртқы EEPROM файлдық жүйеге ие, бірақ бұл жобаға айналды, сондықтан мен бұл модульді өндіріске дайын болған кезде бөлек нұсқаулықпен бөлек шығарамын. AVR Shell көмегімен қазір жасауға болатын нәрселердің тізімі:
- Деректерді бағыттаудың барлық регистрлерін (DDRn), порттарды және түйреуіштерді нақты уақытта оқыңыз
- Қозғалтқышты, жарық диодты қосу немесе сенсорларды нақты уақытта оқу үшін барлық DDRn, порттары мен түйреуіштеріне жазыңыз.
- Жүйеде барлық белгілі регистрлердің тізімін жасаңыз
- EEPROM көмегімен сақталатын пайдаланушы анықтайтын айнымалыларда мәндерді жасаңыз және сақтаңыз.
- Түбірлік құпия сөзді жасаңыз және оған қарсы аутентификация жасаңыз (телнетапқа кіру үшін қолданылады)
- Конфигурацияланған CPU сағатының жылдамдығын оқыңыз
- Алдын ала есептегішті орнату арқылы процессордың сағат жылдамдығын өзгертіңіз
- Әр түрлі нәрселерді есептеуге арналған 16 биттік таймерлерді іске қосыңыз және тоқтатыңыз
- Перифериялық қосалқы жүйелерді қосу және/немесе өшіру: аналогты цифрлық түрлендіргіштер (ADC), сериялық перифериялық интерфейс (SPI), екі сымды интерфейс (TWI/I2C), UART/USART. Микроконтроллердің энергия шығынын азайту немесе белгілі бір функцияларды қосу қажет болғанда пайдалы.
- Қайта қолдануға болатын объектілермен С ++ тілінде жазылған.
Бұл нұсқаулық avrsh орнату, қолдану және теңшеу арқылы өтеді.
1 -қадам: Сізге не қажет
Бұл нұсқаулық сізге көп нәрсені қажет етпейді:
- Arduino немесе ATmega328P бар. Басқа AVR жұмыс істей алады, бірақ сіздің MCU -ға тән кез келген регистрлерді тізімдеу үшін кодты өзгерту қажет болуы мүмкін. Атаулар тек MCU -ге тән тақырып файлында көрсетілгенге сәйкес келуі керек. Көптеген регистр атаулары AVR арасында бірдей, сондықтан тасымалдау кезінде жүгірісіңіз өзгеруі мүмкін.
- Arduino/AVR сериялы USART -ке қосылудың жолы бар. Жүйе USB немесе COM порты арқылы сериялық байланыс орнататын Windows бағдарламасы AVR терминалымен кеңінен сыналды. USB байланысын қолдана отырып Arduinos-пен және Moderndevice.com сайтынан USB-BUB көмегімен кез келген AVR-мен жұмыс істейді. Басқа терминал опцияларына мыналар жатады: Putty, minicom (Linux және FreeBSD), экран (Linux/FreeBSD), Hyperterminal, Teraterm. Мен қосылым кезінде қоқыс жіберетін замазка мен тератерманы таптым, сондықтан сіздің бірінші командаңыз бұзылуы мүмкін.
- AVR Shell микробағдарламасын орнатыңыз және іске қосыңыз, оны сіз осы беттерден жүктей аласыз немесе әрқашан BattleDroids.net сайтынан соңғы нұсқасын ала аласыз.
AVR терминалын орнату үшін оны ашыңыз және іске қосыңыз. AVR Shell микробағдарламасын орнату үшін оны жүктеп алыңыз да, он алтылық файлды тікелей жүктеңіз және сериялық терминалыңызды 9600 baud -ға қосыңыз, немесе оны «жасау» арқылы өзіңіз құрастырыңыз, содан кейін он алтылықты жүктеу үшін «бағдарлама жасаңыз». Назар аударыңыз, сізге COM портын көрсету үшін AVRDUDE параметрлерін өзгерту қажет болуы мүмкін. Ескерту: PROGMEM атрибуты C ++ үшін AVR GCC ағымдағы енгізілуінде бұзылған және бұл белгілі қате. Егер сіз оны құрастырсаңыз, «ескерту: бағдарламалық жад аймағына тек инициализацияланған айнымалыларды орналастыруға болады» деген көптеген ескерту хабарларын күтіңіз. Көруге ашуланудан басқа, бұл ескерту зиянсыз. Ендірілген платформадағы C ++ AVR GCC басымдылықтар тізімінде жоғары болмағандықтан, оның қашан түзетілетіні белгісіз. Егер сіз кодты тексерсеңіз, мен өзімнің төлсипаттар туралы мәлімдемемді енгізу арқылы бұл ескертуді азайту үшін қайда жұмыс істегенімді көресіз. Сізге қажет нәрсені жүктеп алыңыз және орнатыңыз, содан кейін бетті аударыңыз, содан кейін біз ашуланамыз.
2 -қадам: оқу және жазу регистрлері
AVR Shell ең алдымен мен AVR -ге қосылған кейбір сенсорларға қол жеткізу үшін жазылған. Ол қарапайым светодиодтан басталды, содан кейін жарық сенсорларына, температура сенсорларына, соңында екі ультрадыбыстық түрлендіргішке көшті. avrsh бұл сенсорлардың сандық компоненттерін басқаратын регистрлерге жазу арқылы орната алады. Жұмыс кезінде AVR регистрлерін манипуляциялау Arduino -дағы барлық белгілі регистрлердің тізімін алу үшін мынаны теріңіз:
баспа регистрлері және сіз осындай басылымды аласыз
Мен келесі регистрлер туралы білемін:
TIFR0 PORTC TIFR1 PORTD TIFR2 DDRD PCIFR DDRB EIFR DDRC EIMSK PINB EECR PINC EEDR PIND SREG EEARL GPIOR0 EEARH GPIOR1 GTCCR GPIOR2 TCCR0A TCCR0B TCNT0 OCR0A OCR0B SPCR SPDR ACSR SMCR MCUSR MCUCR SPMCSR WDTCSR CLKPR Prr OSCCAL PCICR EICRA PCMSK0 PCMSK1 TIMSK0 TIMSK1 TIMSK2 ADCL ADCH ADCSRA ADCSRB ADMUX DIDR0 DIDR1 TCCR1A TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B TCNT2 OCR2A OCR2B АКСР TWBR TWSR Twar TWDR TWCR TWAMR UCSR0A UCSR0B UCSR0C UBRR0L UBRR0H UDR0 PORTB түбір @ ATmega328P> Кез келген регистрде жеке биттердің қалай орнатылғанын көру үшін cat немесе echo пәрменін қолданыңыз
мысық %GPIOR0 Мен командалық интерпретатордан жалпы мақсаттағы енгізу -шығару регистрінің No 0 мазмұнын көрсетуді немесе жаңғыртуды сұраймын. Тізілім атауының алдындағы пайыздық белгіге (%) назар аударыңыз. Бұл сізге регистрді анықтайтын резервтік кілт сөз екенін қабыққа көрсету үшін қажет. Эхо командасының әдеттегі шығысы осылай көрінеді
GPIOR0 (0x0) [00000000] күйіне орнатылды Шығу регистрдің атауын, регистрде табылған он алтылық мәнді және регистрдің екілік көрінісін көрсетеді (әр бит 1 немесе 0 түрінде көрсетіледі). Кез келген регистрде белгілі бір бит орнату үшін оператордың [индексін] қолданыңыз. Мысалы, мен 3 -ші битке 1 -ді алғым келеді делік
%GPIOR0 [3] = 1 және қабық сізге оның әрекеті мен нәтижесін көрсететін жауап береді
GPIOR0 (0x0) [00000000] мәніне орнатылды (0x8) [00001000] Қабыққа регистрмен жұмыс жасайтынын айту үшін пайыз белгісін ұмытпаңыз. Сондай-ақ, үшінші битті орнату арқылы бұл 4 бит екенін ескеріңіз, себебі біздің AVR нөлдік индексті пайдаланады. Басқаша айтқанда, 3 -ші битке дейін санағанда сіз 0, 1, 2, 3 -ті есептейсіз, бұл 4 -ші орын, бірақ 3 -ші бит. Битін нөлге теңестіру арқылы дәл осылай тазартуға болады. Осындай биттерді орнату арқылы сіз AVR жұмысын тез өзгерте аласыз. Мысалы, OCR1A табылған CTC таймерінің сәйкестік мәнін өзгерту арқылы. Бұл сонымен қатар кодты бағдарламалық түрде тексеруге болатын белгілі бір параметрлерді қарауға мүмкіндік береді, мысалы, жылдамдықтың UBBR мәні. DDRn, PORTn және PINn -мен жұмыс істеу Енгізу -шығару түйреуіштері де регистрлерге тағайындалады және оларды дәл осылай орнатуға болады, бірақ бұл типті регистрлермен жұмыс істеу үшін арнайы синтаксис құрылды. Кодта, мысалы, жарықдиодты немесе сандық жоғары немесе төмен қажет басқа құрылғыны қосу үшін қалыпты процесс бар. Бұл түйін шығысқа арналғанын көрсету үшін Деректер бағытын тіркеуді орнатуды, содан кейін дұрыс портта белгілі бір битке 1 немесе 0 жазуды талап етеді. Егер бізде сандық PIN 13 -ке (PB5) қосылған светодиоды бар болса және біз оны қосқымыз келсе, AVR жұмыс істеп тұрған кезде мұны қалай жасауға болады.
pb5 шығыс жазуын орнатыңыз pb5 жоғары Светодиодтың жанғанын көруден басқа шығыс келесідей болады
root@ATmega328p> pin pb5 шығысын орнатыңыз pb5 шығыс тамырына орнатыңыз@ATmega328p> pb5 жоғары пин жазыңыз «Root@ATmega328p>» - бұл сізден пәрмендерді қабылдауға дайын екенін көрсететін қабықтың шақыруы. Светодиодты өшіру үшін, түйреуішке төменгі мәнді жазу жеткілікті. Егер сіз сандық кірісті түйреуіштен оқығыңыз келсе, оқу пәрменін қолданыңыз. Біздің жоғарыдағы мысалды қолдана отырып
root@ATmega328p> pb5Pin түйреуішін оқу: pb5 - жоғары Немесе сол түйреуіш портын басқаратын түйреуіш регистрін жаңғыртыңыз. Мысалы, егер бізде 7 және 8 цифрлық пинге (PD7 және PD8) жалғанған қосқыштар болса, сіз пәрменді жібере аласыз.
%PIND жаңғырығы содан кейін қабық сол регистрдің мазмұнын көрсетеді, ол сізге қосылған құрылғылардың барлық кіріс/шығыс күйлерін және қосқыш күйінің қосулы немесе сөндірілгенін көрсетеді.
3 -қадам: сақтандырғыштарды оқу және жазу
Сақтандырғыштар - регистрлердің ерекше түрлері. Олар сіздің микроконтроллеріңіздің жылдамдығынан бастап, EEPROM жазудан қорғайтын қандай бағдарламалау әдістеріне дейін барлығын басқарады. Кейде сізге бұл параметрлерді өзгерту қажет болады, әсіресе егер сіз AVR автономды жүйесін құрсаңыз. Arduino сақтандырғыш параметрлерін өзгерту керек екеніне сенімді емеспін. Сақтандырғыштармен абай болыңыз; Егер сіз оларды дұрыс орнатпаған болсаңыз, сіз өзіңізді құлыптай аласыз. Алдыңғы нұсқаулықта мен сақтандырғыштарды бағдарламашы мен аврудестің көмегімен қалай оқуға және орнатуға болатынын көрсеттім. Міне, мен сізге MCU оларды қалай орнатқанын білу үшін сақтандырғыштарды жұмыс уақытында қалай оқу керектігін көрсетемін. Назар аударыңыз, бұл анықтамалардан алынған компиляция уақыты параметрі емес, MCU оларды жұмыс уақытында оқитын кездегі нақты сақтандырғыштар. ATmega328P деректер кестесіндегі 27-9 кестеден (деректер кітабы, ұқсас) сақтандырғыштың төмен байтының биттері келесідей:
CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0Бір қызығы, сақтандырғыштармен 0 бағдарламаланған, ал 1 - бұл белгілі бір бит бағдарламаланбағанын білдіреді. Интуитивті емес, бірақ сіз оны білгеннен кейін білесіз.
- CKDIV8 сіздің процессорлық сағатты 8 -ге бөлуге орнатады. ATmega328P сізге 8 МГц жиіліктегі ішкі осцилляторды CKDIV8 бағдарламаланған (яғни 0 мәніне орнатылған) фабрикадан шығарады, ол сізге соңғы F_CPU немесе CPU жиілігін 1 МГц құрайды. Arduino -да бұл өзгереді, өйткені олар 16 МГц сыртқы осцилляторды пайдалану үшін конфигурацияланған.
- Бағдарламаланған кезде CKOUT сіздің CPU сағатын PB0 -те шығарады, бұл Arduinos -та 8 цифрлық пин.
- SUT [1..0] AVR қосылу уақытын көрсетеді.
- CKSEL [3..0] ішкі RC осцилляторы, сыртқы осциллятор сияқты сағат көзін орнатады.
Сіз сақтандырғыштарды оқығанда, ол сізге он алтылық жүйеде қайтарылады. Бұл сақтандырғыштарды avrdude арқылы жазғыңыз келсе, сізге қажет формат. Менің ардуинода төменгі сақтандырғыш байтты оқығанда мынаны аламын:
root@ATmega328p> lfuseLower сақтандырғышын оқу: 0xffСонымен, барлық биттер 1 -ге орнатылды. Мен дәл осы процедураны Arduino клонында жасадым және сол мәнді алдым. Автономды AVR жүйелерінің біреуін тексере отырып, мен 0xDA алдым, бұл чипті конфигурациялау кезінде біраз уақытқа орнатқан мәнім, дәл осы процедура жоғары сақтандырғыш байтын, кеңейтілген сақтандырғыш байтты және құлыптау сақтандырғыштарын тексеру үшін қолданылады. Калибрлеу мен қолтаңбаның сақтандырғыш байттары кодта #if 0 препроцессорлық директивасымен өшірілді, егер сіз оны нашар сезінсеңіз өзгерте аласыз.
4 -қадам: Басқа командалар
Әдепкі командалық интерпретатор сізге пайдалы болуы мүмкін екенін түсінетін бірнеше басқа командалар бар. Сұрау бойынша анықтаманы немесе мәзірді шығару арқылы сіз барлық орындалған және болашақта шығарылатын пәрмендерді көре аласыз. Мен оларды осында тез түсіндіремін, себебі олар өздігінен түсіндіріледі. CPU сағаттарының жиілік параметрлері fcpu пәрменінің көмегімен сіздің микробағдарламалық жасақтамаңыз CPU сағатының параметрлері ретінде не конфигурацияланғанын біле аласыз:
root@ATmega328p> fcpuCPU жиілігі: 16000000Бұл 16 миллион немесе 16 миллион герц, әдетте 16 МГц деп аталады. Сіз мұны кез келген себеппен сағат командасымен өзгерте аласыз. Бұл пәрмен бір аргументті қабылдайды: сіздің жылдамдығыңызды бөлу кезінде қолданылатын алдын ала есептегіш. Сағат командасы алдын ала есептегіш мәндерді түсінеді:
- ckdiv2
- ckdiv4
- ckdiv8
- ckdiv16
- ckdiv32
- ckdiv64
- 128
- 256
Пәрменді қолдану арқылы:
сағат ckdiv2 Егер сіздің процессордың жылдамдығы 16 МГц болса, онда сіздің жылдамдық 8 МГц -ке өзгереді. Бастапқы сағат жылдамдығы 16 МГц болатын ckdiv64 алдын ала есептегішті пайдалану соңғы жиілікке 250 КГц әкеледі. Неліктен жер бетінде MCU -ны баяулатқыңыз келеді? Біріншіден, сағат жылдамдығының төмен болуы энергияны аз тұтынады, ал егер сізде жобалық корпуста MCU батареясы таусылып қалса, сізге оның жоғары жылдамдықпен жұмыс істеуінің қажеті жоқ, сондықтан жылдамдықты төмендетіп, оның энергия шығынын азайта аласыз., батареяның қызмет ету мерзімін ұзарту. Сондай -ақ, егер сіз басқа MCU -мен кез -келген уақыт мәселесін шешу үшін сағатты қолдансаңыз, айталық, UART бағдарламалық жасақтамасын немесе осындай нәрсені қолдана отырып, сіз оны белгілі бір мәнге орнатқыңыз келуі мүмкін, ол арқылы жылдамдықтың жақсы жылдамдығын алуға болады. қателердің төмен деңгейі. Перифериялық қосалқы жүйелерді қосу және өшіру Жоғарыда айтылған қуат шығынын азайту сияқты, сіз пайдаланбайтын борттық қосымша құрылғыларды өшіру арқылы қуатты одан әрі азайтуды қалауыңыз мүмкін. Командалық интерпретатор мен қабықша келесі перифериялық құрылғыларды қосады және өшіре алады:
- Аналогты-цифрлық түрлендіргіш (ADC). Бұл перифериялық құрылғы деректерді беретін (мысалы, температура, жарық, үдеу және т.
- Сериялық перифериялық интерфейс (SPI). SPI шинасы сыртқы жады, жарықдиодты драйверлер, сыртқы ADC және т.б. сияқты SPI қосылған басқа құрылғылармен байланысу үшін пайдаланылады. SPI бөліктері ISP бағдарламалау үшін қолданылады немесе кем дегенде түйреуіштер, сондықтан оны өшіргенде абай болыңыз. егер сіз провайдер арқылы бағдарламаласаңыз.
- Екі сымды интерфейс. Кейбір сыртқы құрылғылар I2C шинасын байланыс үшін пайдаланады, бірақ олар SPI қосылған құрылғылармен тез ауыстырылады, себебі SPI өткізу қабілеті жоғары.
- USART. Бұл сіздің сериялық интерфейс. Егер сіз AVR -ге сериялық байланыс арқылы қосылсаңыз, оны өшіргіңіз келмеуі мүмкін! Дегенмен, мен мұны ATTEga162 немесе ATmega644P сияқты бірнеше USART бар құрылғыларға тасымалдауға арналған қаңқа ретінде қостым.
- барлық. Қосу немесе өшіру пәрменінің бұл аргументі барлық қосымша құрылғыларды қосады немесе олардың барлығын бір пәрменмен өшіреді. Тағы да, бұл пәрменді ақылмен қолданыңыз.
root@ATmega328p> powerdown twi twi -ді өшіру аяқталды
Таймерлерді іске қосу және тоқтату Қабықта пайдалануға рұқсат етілген кіріктірілген 16 биттік таймер бар. Таймерді таймер пәрменімен бастайсыз:
таймердің басталуыжәне тоқтату аргументімен таймерді тоқтатыңыз
таймердің тоқтауыБұл таймер USART ішкі таймеріне қайшы келмейді. USART таймерін іске асыру туралы егжей -тегжейлі кодты қараңыз, егер мұндай қызықты бөлшектер сізді қызықтырса
root@ATmega328p> таймерді іске қосу Timer.root@ATmega328p> таймерді тоқтату Өткен уақыт: ~ 157 секунд Аутентификация Қабық EEPROM-де 8 таңбалы құпия сөзді сақтай алады. Бұл құпия сөз механизмі telnet жүйесіне кіру мүмкіндіктерін қолдау үшін жасалған, бірақ басқа заттарды қорғау үшін кеңейтілуі мүмкін. Мысалы, аутентификация механизмі арқылы регистр мәндерін өзгерту сияқты белгілі бір пәрмендерді талап етуге болады.
root@ATmega328p> passwd blahWEEPROM түбірлік құпия сөзін жазыңызAuth командасымен оның құпия сөзіне рұқсат беріңіз (немесе код арқылы бағдарламалық түрде авторизация қажет). Есіңізде болсын, егер сіз түпнұсқалық құпия сөзді өзгертуге тырыссаңыз және түбірлік құпия сөз орнатылған болса, оны жаңа құпия сөзге өзгертуге рұқсат бермес бұрын ескі құпия сөзбен келісуіңіз керек.
root@ATmega328p> passwd blinky Сіз өзіңізге алдымен авторизациялауыңыз қажет.root@ATmega328p> auth blahAuthorized.root@ATmega328p> passwd blinky EEPROM -ге жаңа түбірлік құпия сөзді жазыңызӘрине, ескі мәндер мен айнымалыларды қалпына келтіру үшін микробағдарламаны өшірсеңіз, avrsh.eep файлын жүктеу қажет болады. Makefile сізге EEPROM файлын жасайды. Айнымалылар Қабық пайдаланушы анықтайтын айнымалылар түсінігін түсінеді. Код мұны 20 -ға дейін шектейді, бірақ оны қаласаңыз, script.h ішіндегі MAX_VARIABLES анықтамасын өзгерту арқылы өзгертуге болады. Кез келген 16 биттік мәнді (яғни 65, 536 дейінгі кез келген санды) кейін еске түсіру үшін айнымалыға сақтауға болады. Синтаксис регистрлерге ұқсас, қабықтың айнымалыларын белгілеу үшін доллар белгісі ($) қолданылмайды. Барлық айнымалыларды басып шығару айнымалыларының пәрменімен тізімдеңіз
Пайдаланушы анықтайтын айнымалылар: Индекс атауы -> Мән (01): $ ТЕГІН $ -> 0 (02): $ ТЕГІН $ -> 0 (03): $ ТЕГІН $ -> 0 (04): $ ТЕГІН $ -> 0 (05): $ ТЕГІН $ -> 0 (06): $ ТЕГІН $ -> 0 (07): $ ТЕГІН $ -> 0 (08): $ ТЕГІН $ -> 0 (09): $ ТЕГІН $ -> 0 (10): $ ТЕГІН $ -> 0 (11): $ ТЕГІН $ -> 0 (12): $ ТЕГІН $ -> 0 (13): $ ТЕГІН $ -> 0 (14): $ ТЕГІН $ -> 0 (15): $ ТЕГІН $ -> 0 (16): $ ТЕГІН $ -> 0 (17): $ ТЕГІН $ -> 0 (18): $ ТЕГІН $ -> 0 (19): $ ТЕГІН $ -> 0 (20): $ ТЕГІН $ -> 0 Толық. Айнымалыны орнатыңыз
$ newvar = 25 $ күту уақыты = 23245Берілген айнымалының мәнін алыңыз
root@ATmega328p> echo $ newvar $ newvar 25Сіз бұрыннан білетін басып шығару командасымен қандай айнымалы мәндер енгізілгенін көре аласыз
Пайдаланушы анықтайтын айнымалылар: Индекс атауы -> Мән (01): newvar -> 25 (02): күту уақыты -> 23245 (03): $ ТЕГІН $ -> 0 (04): $ ТЕГІН $ -> 0 (05): $ ТЕГІН $ -> 0 (06): $ ТЕГІН $ -> 0 (07): $ ТЕГІН $ -> 0 (08): $ ТЕГІН $ -> 0 (09): $ ТЕГІН $ -> 0 (10): $ ТЕГІН $ -> 0 (11): $ ТЕГІН $ -> 0 (12): $ ТЕГІН $ -> 0 (13): $ ТЕГІН $ -> 0 (14): $ ТЕГІН $ -> 0 (15): $ ТЕГІН $ -> 0 (16): $ ТЕГІН $ -> 0 (17): $ ТЕГІН $ -> 0 (18): $ ТЕГІН $ -> 0 (19): $ ТЕГІН $ -> 0 (20): $ ТЕГІН $ -> 0 Толық.$ FREE $ атауы тек айнымалы орын тегін екенін және оған әлі ауыспалы атау берілмегенін көрсетеді.
5 -қадам: қабықты баптау
Егер сіз қаласаңыз, кодты бұзып, оны өз қажеттіліктеріңізге бейімдей аласыз. Егер мен бұл кодты шығаратынымды білсем, мен командалық интерпретатордың жеке сыныбы мен командалық құрылымын құрып, осы шақыру арқылы функция көрсеткішін қайталайтын едім. Бұл кодты азайтады, бірақ қабықша пәрмен жолын талдайды және сәйкес қабық әдісін шақырады. Жеке реттелетін пәрмендерді қосу үшін келесі әрекеттерді орындаңыз: 1. Пәрменді талдау тізіміне қосыңыз. пәрмен жолын талдаңыз және сізге пәрмен мен дәлелдерді бөлек беріңіз. Дәлелдер көрсеткіштерге немесе көрсеткіштер жиынына көрсеткіш ретінде беріледі, бірақ сіз олармен жұмыс істеуді ұнатасыз. Бұл shell.cpp ішінде орналасқан. Shell.cpp ашыңыз және AVRShell класының ExecCmd әдісін табыңыз. Сіз пәрменді бағдарлама жадына қосқыңыз келуі мүмкін. Егер солай етсеңіз, progmem.h және progmem.cpp пәрменін қосыңыз. Сіз PSTR () макросын қолдана отырып, бағдарламалық жадқа пәрменді қоса аласыз, бірақ сіз бұрын айтылған түр туралы басқа ескерту жасайсыз. Тағы да, бұл C ++ - пен жұмыс жасайтын белгілі қате, бірақ мен мұны тікелей бағдарламаға.* Файлдарына қосу арқылы шешуге болады. Егер сіз SRAM -ді қолдануды қосуға қарсы болмасаңыз, мен «сағат» пәрменімен суреттегендей пәрменді қоса аласыз. «Newcmd» деп аталатын жаңа пәрменді қосқыңыз келетінін айтыңыз. AVRShell:: ExecCmd өтіңіз және келесі кодты енгізуге ыңғайлы орынды табыңыз:
else if (! strcmp (c, «newcmd»)) cmdNewCmd (args);Бұл сіздің пәрменіңізді қосады және келесі қадамда жазатын cmdNewCmd әдісін шақырады. 2. Теңшелетін пәрмен кодын жазыңыз. Сол файлға реттелетін пәрмен кодын қосыңыз. Бұл әдіс анықтамасы. Сіз декларацияны shell.h -ге қосқыңыз келеді. Оны басқа командаларға қосыңыз. Алдыңғы мысалда код келесідей көрінуі мүмкін
voidAVRShell:: cmdNewCmd (char ** args) {sprintf_P (buff, PSTR («Сіздің командаңыз - %s / r / n», args [0]); WriteRAM (buff);}Мұнда бірнеше нәрсе бар. Біріншіден, «buff»-бұл кодта берілген 40 таңбалы массив буфері. Біз sprintf бағдарламасының жады нұсқасын қолданамыз, себебі біз оны PSTR жібереміз. Егер сіз қаласаңыз, қарапайым нұсқаны қолдана аласыз, бірақ PSTR форматында өтпейтіндігіңізге көз жеткізіңіз. Сонымен қатар аргументтер args массивінде болады. Егер сіз «newcmd arg1 arg2» терсеңіз, сіз бұл аргументтерді args [0] және args [1] қосалқы индекстерімен ала аласыз. Сіз кодта анықталғандай MAX_ARGS аргументінің максимумын жібере аласыз. WriteLine және WriteRAM - бұл UART -тің бір аттас әдістерін қайтаратын жаһандық функциялар. Бұл функцияның 2 -ші аргументі жасырын. Егер сіз ештеңе жібермесеңіз, кейін пәрмен жолы жазылады. Егер сіз 0 -ді 2 -аргумент ретінде берсеңіз, шақыру жазылмайды. Бұл пәрмен жолы пайдаланушыға қайтарылмай тұрып шығару үшін бірнеше бөлек жолдарды жазғыңыз келсе пайдалы. 3. Қабықша командалық кодты орындасын Сіз қабықтың орындаушысына жаңа команданы орнатқан кезде cmdNewCmd әдісін орындауды айттыңыз, бірақ оны shell объектісіне түсінікті болу үшін shell.h файлына қосыңыз. Оны соңғы пәрменнің астына немесе бірінші команданың алдында немесе кез келген жерде қосыңыз. Микробағдарламаны қайта құрастырыңыз және Arduino -ға жүктеңіз, және сіздің жаңа пәрменіңіз қабықтан қол жетімді.
6 -қадам: Қорытынды
Сіз AVR/Arduino -ны қалай орнатуды және қосуды білуіңіз керек және жұмыс істеп тұрған микроконтроллерге тікелей шақыруды алуыңыз керек. Сіз MCU -дан жұмыс уақыты туралы деректерді шығаратын немесе MCU -ге мәндерді орнататын бірнеше пәрмендерді білесіз. Сондай -ақ, қабыққа өзіңіздің жеке пәрмендеріңізді жасау үшін өзіңіздің жеке кодты қалай қосу керектігін көрсетіп, оны әрі қарай өз қажеттіліктеріңізге қарай теңшеуге болады. Сіз тіпті командалық интерпретаторды қолдана аласыз, егер ол сіздің қажеттіліктеріңізге сәйкес келсе, сізде тек қана сіздің жеке командаларыңыз болады, бұл нұсқаулық сізге ұнады деп үміттенемін және AVR Shell сізге нақты уақыттағы командалық аудармашы ретінде пайдалы болады деп үміттенемін. Әрқашан да, бұл нұсқаулықты қалай жақсартуға болатыны туралы кез келген түсініктемелер мен ұсыныстарды асыға күтемін!
Ұсынылған:
Күн қабығы: 6 қадам
Solar Shell: Бұл екі жыл бұрынғы менің жобаларымның біреуінің жаңартуы. Мауиде күн батқанда конус қабығының дәстүрлі үрлеуі тек микроконтроллермен. Е
Қалталы аудармашы: 6 қадам
Қалта аудармашысы: Raspberry Pi -ден жасалған бұл аудармашы екі адамға әр түрлі тілде сөйлесе де бір -бірімен еркін сөйлесуге мүмкіндік береді. Егер сіз иммигрант болсаңыз, ешкіммен сөйлесе алмасаңыз, өмір сүру қиын болар еді. Енді, егер сізде менің қалтамның транслясы болса
Темір жол үлгісі - Arduino қолданатын DCC командалық станциясы :: 3 қадам
Темір жолдың үлгісі - DCU командалық станциясы Arduino -ны қолданады :: 2018 жылдың тамызында жаңартылды - жаңа нұсқаулықты қараңыз: https: //www.instructables.com/id/Model-Railroad-DC… Жаңартылған 28 сәуір 2016 ж.: Қазір 16 келу/нүктені басқару мүмкіндігі. Командалық станцияға. T1 - T8 бұрмалары «B» пернесі арқылы қол жетімді T9 - T1 бұрмалары
Сыртқы қатты дискіге арналған қорғаныс қабығы: 8 қадам
Сыртқы қатты дискіге арналған қорғаныс қабығы: Сыртқы қатты диск салқын, бірақ олар нәзік және құлап кетуі оны бұзуы мүмкін немесе жұмыс істемей қалуы мүмкін … Ең қатты диск - жұқа және жылтыр. толығырақ … оған екі бөлік қажет … Қатты диск пен USB кабелі … бұл скучно және
Тегін ноутбук Superbad қорғаныс қабығы: 6 қадам
Ақысыз ноутбук Superbad қорғаныс корпусы: Бұл идея менде Acer жаңа аспиринін алған кезде пайда болды, мен оны кез келген сөмкеге лақтырып тастауға болатынын және оны алу үшін алаңдамайтынымды айттым. Ол теориялық түрде басқа ноутбуктерде де жұмыс істеуі керек, егер олар ұқсас пакеттерде болса