Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Moderátori: psichac, Moderátori
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Cavte,
este chvilu a dostanem infarkt alebo ma trafi slak a mozes si sem dat ciernu stuhu. Neviem ci je chyba medzi stolickou a PC, alebo je na vine MPLAB x IDE a je tam v nom "poriadny chrobak" (mucha). (este ze mam naladu aj srandovat po tolkom vynervovani sa)
Deklaroval som tieto premennne:
Najprv to Miin tam nebolo. Vtedy premenna Sec dostala od kompilatora adresu 0x15. Problem bol ze som premennu Sec nevedel ani za svet prepisat. Vsetko ostatne sa dalo. Hocico som tam zapisal, po ENTER tam vzdy bola 0.
Tak som pridal Seec variable a zkompiloval. Compilator priradil adresu 0x15 pre Min. Sec uz sa dalo prepisat , ale zase Min sa nedalo prepisat. Tak som Seec prepisal na Miin a zase zkompiloval.
Ako vidite na obrazku vyssie, teraz 0x15 dostal register Hour a ten sa zase neda prepisat.
Co toto je? Stretli ste sa s tym? Niekde je zakazany prepis registra 0x15? ak nemate sajnu o co ide, dala by sa adresa 0x15 obsadit nejakym nepouzivanym registroms nazvom napr. "RegErr01" a nasilu mu priradit tuto "nefunkcnu" adresu a tym padom tie ostatne zmysluplne nazvy registrov by nedostali tuto "nefunkcnu" adresu a mohol by som im menit hodnoty v DEBUG?
Slo by to? Ak ano, prosim, napisete mi ako to zapisat pre nazov registra RegErr01?
Poznamka:
To volatile tam mam preto (vycital som to na google), lebo zase, ak to dam prec, tak tie registre zmiznu s Watch tabulky a zase ich nevidim a nemozem im nemit hodnotu, lebo tam nie su. Ak k nim zase pridam volatile, tak sa zase objavia vo Watch tabulke a mozem s nimi pracovat.
EDIT:
Po 1000 pokusoch ako sa to chova, som zistil, ze ak kompilator z hocijakeho dovodu prideli k neakej premennej adresu 0x15, tak sa vo Watch neda zmenit. Len ta adresa 0x15 (zatial viem len o nej).
Da sa to osalit tak, ze si otvorim File register tabulku,
tam prepisem adresu 0x15 na cislo napr. 8. Vo watch sa nic nezmeni. Ale ked vo Watch na adrese 0x15 vymazem hodnotu
a stlacim ENTER, tak sa tam objavi cislo 8
Inak povedane, ze adresu 0x15 mozem prepisovat len cez File Reisters tabulku.
Zaujimave.... Ze by som odhalil "muchu" v MPLAB-e?
Dakujem za pomoc ak mate neake navry co s tym.
este chvilu a dostanem infarkt alebo ma trafi slak a mozes si sem dat ciernu stuhu. Neviem ci je chyba medzi stolickou a PC, alebo je na vine MPLAB x IDE a je tam v nom "poriadny chrobak" (mucha). (este ze mam naladu aj srandovat po tolkom vynervovani sa)
Deklaroval som tieto premennne:
Najprv to Miin tam nebolo. Vtedy premenna Sec dostala od kompilatora adresu 0x15. Problem bol ze som premennu Sec nevedel ani za svet prepisat. Vsetko ostatne sa dalo. Hocico som tam zapisal, po ENTER tam vzdy bola 0.
Tak som pridal Seec variable a zkompiloval. Compilator priradil adresu 0x15 pre Min. Sec uz sa dalo prepisat , ale zase Min sa nedalo prepisat. Tak som Seec prepisal na Miin a zase zkompiloval.
Ako vidite na obrazku vyssie, teraz 0x15 dostal register Hour a ten sa zase neda prepisat.
Co toto je? Stretli ste sa s tym? Niekde je zakazany prepis registra 0x15? ak nemate sajnu o co ide, dala by sa adresa 0x15 obsadit nejakym nepouzivanym registroms nazvom napr. "RegErr01" a nasilu mu priradit tuto "nefunkcnu" adresu a tym padom tie ostatne zmysluplne nazvy registrov by nedostali tuto "nefunkcnu" adresu a mohol by som im menit hodnoty v DEBUG?
Slo by to? Ak ano, prosim, napisete mi ako to zapisat pre nazov registra RegErr01?
Poznamka:
To volatile tam mam preto (vycital som to na google), lebo zase, ak to dam prec, tak tie registre zmiznu s Watch tabulky a zase ich nevidim a nemozem im nemit hodnotu, lebo tam nie su. Ak k nim zase pridam volatile, tak sa zase objavia vo Watch tabulke a mozem s nimi pracovat.
EDIT:
Po 1000 pokusoch ako sa to chova, som zistil, ze ak kompilator z hocijakeho dovodu prideli k neakej premennej adresu 0x15, tak sa vo Watch neda zmenit. Len ta adresa 0x15 (zatial viem len o nej).
Da sa to osalit tak, ze si otvorim File register tabulku,
tam prepisem adresu 0x15 na cislo napr. 8. Vo watch sa nic nezmeni. Ale ked vo Watch na adrese 0x15 vymazem hodnotu
a stlacim ENTER, tak sa tam objavi cislo 8
Inak povedane, ze adresu 0x15 mozem prepisovat len cez File Reisters tabulku.
Zaujimave.... Ze by som odhalil "muchu" v MPLAB-e?
Dakujem za pomoc ak mate neake navry co s tym.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
- Tribec Zacks
- Pokročilý člen
- Príspevky: 711
- Dátum registrácie: 26 Jún 2010, 00:00
- Bydlisko: Levice / Cork IRL
- Vek: 41
- Kontaktovať používateľa:
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
romiadam, mplab ani pic nepoznam, tak len vseobecne.Co toto je? Stretli ste sa s tym? Niekde je zakazany prepis registra 0x15? ak nemate sajnu o co ide, dala by sa adresa 0x15 obsadit nejakym nepouzivanym registroms nazvom napr. "RegErr01" a nasilu mu priradit tuto "nefunkcnu" adresu a tym padom tie ostatne zmysluplne nazvy registrov by nedostali tuto "nefunkcnu" adresu a mohol by som im menit hodnoty v DEBUG?
na adresu si skus urobit pointer:
#define RegErr01 (*((volatile uint32_t*) adresa_registra))
adresa_registra je tych 0x15, neviem ako pic, mozno to ma este nejaky offset odkial zacina ramka (pozri datashit), compiler by ti takto mal rozoznat tam nic ine nedavat. popripade v linker file si na nejakej ram adrese vyhrad sekciu pre tvoje premenne a natvrdo ich tam nahadz. idealnejsie by bolo keby mas tieto casove premenne v strukture a tu si celu hodis na nejaku adresu, ci uz cez linker, alebo pointer. popripade sa ti bude dat pouzit nejake _attribute makro to ulozit niekam presne do ramky a nebudes muset skumat linker skript.
kazdopadne ak neni chyba medzi pc a stolickou tak to vypada na nejaky divny bug.
0
Kreativita a motivacia je to, co prinasa originalne napady a myslienky, disciplina je to, co ich dokaze zrealizovat.
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Diki, vyskusam.
Vcera som stym zabil vyse 4-5 hodin. Lebo aj minule sa mi toto stalo vtedy som ten "nefunkcny" register narychlo nahradil inym a stym "zlym" som nepracoval. Teraz som mal viac casu tak som na to obetoval.
Ziatil som tolko ze on v tej funkcii kde mam deklarovane lokalne prenenne tu adresu 0x15 ak je volna priradi vzdy stvrtej deklaracii bez ohladu na nazov registra
Dalej som zistil ze hodnota tej adresy sa neda editovat (zapisovat) vo Watches a Variables tabulke. V Program Files tabulke sa to da editovat, a po refresh Watches sa hodnota zmeni na taku aka sa zapisala v Program Files memory tabulke. Len je to neprakticke a neprehladne.
Mne to vyzere ze z nejakeho dovodu adresa 0x15 je vo Watches a Variables "Read only".
Sakra, ale len ta 0x15. O dalsej zatial neviem.
Vcera som stym zabil vyse 4-5 hodin. Lebo aj minule sa mi toto stalo vtedy som ten "nefunkcny" register narychlo nahradil inym a stym "zlym" som nepracoval. Teraz som mal viac casu tak som na to obetoval.
Ziatil som tolko ze on v tej funkcii kde mam deklarovane lokalne prenenne tu adresu 0x15 ak je volna priradi vzdy stvrtej deklaracii bez ohladu na nazov registra
Dalej som zistil ze hodnota tej adresy sa neda editovat (zapisovat) vo Watches a Variables tabulke. V Program Files tabulke sa to da editovat, a po refresh Watches sa hodnota zmeni na taku aka sa zapisala v Program Files memory tabulke. Len je to neprakticke a neprehladne.
Mne to vyzere ze z nejakeho dovodu adresa 0x15 je vo Watches a Variables "Read only".
Sakra, ale len ta 0x15. O dalsej zatial neviem.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Počkaj, ty nás húpeš. Hovoríš o lokálnych premenných a v zdrojáku to vidím ako globálnu premennú. Alebo to máš aj ako lokálnu? Tak potom tá lokálna zatieni v tej funkcii tú globálnu. V prvom rade by som chcel vedieť presný typ MCU. Potom sa dá v DS nájsť memory map a podľa toho zistiť o čo ide. Ak je to nejaký univerzálny register alebo SFR tak sa to môže chovať všejilako. Ďalšia komplikácia u PICov je že tie slabšie nemajú lineárny adresný priestor ale používajú stránkovanie. No a potom neviem ako sa stým IDE vyrovnáva.
Znova opakujem lokálna premenná je prístupná iba keď stojíš v kóde kde je deklarovaná, inak vidíš hlúposti ktoré sú tam preto lebo to isté miesto (miesto v zásobníku, alebo register) používajú iné časti kódu.
Znova opakujem lokálna premenná je prístupná iba keď stojíš v kóde kde je deklarovaná, inak vidíš hlúposti ktoré sú tam preto lebo to isté miesto (miesto v zásobníku, alebo register) používajú iné časti kódu.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Zatial sa prechodu na mplab X uspesne vybybam prave koli tomu ze od zaciatku su snim len problemi. Lenze ked mas novy uP tak si nepomozes.
Okrem toho cely ten tvoj popis je taky divny. Lokalen premene neexistuju. Vzniknu az priamo pri zavolanii danej funkcie v podprograme. A aj to v pripade PIC ta lokalna premena moze byt globalna (rozumej bude v registroch procesora ktore su dostupne pri akejkolvek stranke pamete).
Okrem toho cely ten tvoj popis je taky divny. Lokalen premene neexistuju. Vzniknu az priamo pri zavolanii danej funkcie v podprograme. A aj to v pripade PIC ta lokalna premena moze byt globalna (rozumej bude v registroch procesora ktore su dostupne pri akejkolvek stranke pamete).
0
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: HodnoPrepacte.ta variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Prepacte. Ja som v C zaciatocnik, tak som sa mozno nepresne vyjadril. A neviem ci aj toto ako to robim je spravne, ale urcite by sa to dalo riesit lepsie. Fungovat to fubguje. To bol moj ciel.
Vid popis nizsie pre vasu informaciu.
Pre prehladnost programu, v main.c ja prevazne len volam funkcie. Tam sa vyvarujem komplikovanych algoritmov. Mam tam len jednoduche algoritmy. Akonahle sa to zmeni na nieco zlozite, tak sa z toho spravi funkcia , ktora sa ulozi do existujuceho *.h suboru alebo sa vytvory novy *.h subor len pre tuto funkciu a volam tu funkciu.
Ja mam jeden subor global_var.h kde mam takmer vsetky premenne aj bool-y cez struct- jeden bit = 1bool (na konci projektu ked uz nic nebudem menit, tak to cele poupratujem). Tak ja tento globvar.h vsade nacitam do main.c a do funkcii *.c. Tieto premenne ja volam globalne premenne.
Potom este v jednotlivych funkciach si deklarujem lokalne premenne (ten obrazok v predoslom prispevku) a tie existuju len tam ak sa nemylim. A toto je konkretne subor SPI_EEPROM.c kde je funkcia Wr_Data_EEPROM(), ktora zapise datum a cas ako 4 bajty a neake data do EEPROM. Tato funkcia zavola este funkciu Date_Time_Code(), tiez je tu v SPI_EEPROM.h ktora zakoduje datum a cas do 4 bajtov. A to zakodovanie vyuziva lokalne premenne Day, Hour, Min, Sek ktore su na obrazku a existuju len v tomto subore SPI_EEPROM.c.
Snad je to porozumitelne ako som to tu popisal, aby ste chapali o co ide, pre vasu predstavu.
Funkcia Wr_Data_EEPROM () nevracia nic, lebo po zapise do EEPROM ani tie 4 bajty mi netreba.Vstupuju do neho len globalne premenne definovane v global_var a to su Month1, Month10, Day1, Day10, Hour10, Hour1, Min10, Min1, Sek1 a Sek10. Takto to prichadza zo SPI RTC. Tam je to takto riesene. Tak som to tak ponechsl. Vsak registrov na tento MCU viac nez dost.
Neviem ci takto to je ok, ale funguje to. A kedze toto je moj prvy projekt v C ktory som robil do skoly (casovy limit jeden rok), prvy krat robim v MPLAB X I DE, teraz sa ucim C, prvy krat som sa stretol s RTC,...... skocil so do hlbokej vody a hlavne ze som sa neuropil. Projekt som spravil na cas. Teraz ho uz len pre seba vylepsujem/dokoncujem.
EDIT: opraveny typ MCU
Je to MCU PIC18F46K40. Kompilator je XC8. verzia 2.32 a MPLAB X IDE je verzia5.50. Mam aj 5.45 a tem problem s tou adresou 0x15 je aj tam. Kompilator je rovnaky.
Vid popis nizsie pre vasu informaciu.
Pre prehladnost programu, v main.c ja prevazne len volam funkcie. Tam sa vyvarujem komplikovanych algoritmov. Mam tam len jednoduche algoritmy. Akonahle sa to zmeni na nieco zlozite, tak sa z toho spravi funkcia , ktora sa ulozi do existujuceho *.h suboru alebo sa vytvory novy *.h subor len pre tuto funkciu a volam tu funkciu.
Ja mam jeden subor global_var.h kde mam takmer vsetky premenne aj bool-y cez struct- jeden bit = 1bool (na konci projektu ked uz nic nebudem menit, tak to cele poupratujem). Tak ja tento globvar.h vsade nacitam do main.c a do funkcii *.c. Tieto premenne ja volam globalne premenne.
Potom este v jednotlivych funkciach si deklarujem lokalne premenne (ten obrazok v predoslom prispevku) a tie existuju len tam ak sa nemylim. A toto je konkretne subor SPI_EEPROM.c kde je funkcia Wr_Data_EEPROM(), ktora zapise datum a cas ako 4 bajty a neake data do EEPROM. Tato funkcia zavola este funkciu Date_Time_Code(), tiez je tu v SPI_EEPROM.h ktora zakoduje datum a cas do 4 bajtov. A to zakodovanie vyuziva lokalne premenne Day, Hour, Min, Sek ktore su na obrazku a existuju len v tomto subore SPI_EEPROM.c.
Snad je to porozumitelne ako som to tu popisal, aby ste chapali o co ide, pre vasu predstavu.
Funkcia Wr_Data_EEPROM () nevracia nic, lebo po zapise do EEPROM ani tie 4 bajty mi netreba.Vstupuju do neho len globalne premenne definovane v global_var a to su Month1, Month10, Day1, Day10, Hour10, Hour1, Min10, Min1, Sek1 a Sek10. Takto to prichadza zo SPI RTC. Tam je to takto riesene. Tak som to tak ponechsl. Vsak registrov na tento MCU viac nez dost.
Neviem ci takto to je ok, ale funguje to. A kedze toto je moj prvy projekt v C ktory som robil do skoly (casovy limit jeden rok), prvy krat robim v MPLAB X I DE, teraz sa ucim C, prvy krat som sa stretol s RTC,...... skocil so do hlbokej vody a hlavne ze som sa neuropil. Projekt som spravil na cas. Teraz ho uz len pre seba vylepsujem/dokoncujem.
EDIT: opraveny typ MCU
Je to MCU PIC18F46K40. Kompilator je XC8. verzia 2.32 a MPLAB X IDE je verzia5.50. Mam aj 5.45 a tem problem s tou adresou 0x15 je aj tam. Kompilator je rovnaky.
0
Naposledy upravil/-a romiadam v 12 Sep 2022, 21:09, upravené celkom 1 krát.
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
premenna na tom istom offsete v inej banke?
0
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Presne to som mal na mysli. Lokalna premenna pre danu zavolanu funkciu. Tasm "vznikne" a po ukonceni aj zanikne. A takato je aj ta adresa 0x15.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
V prvom rade by sme si mali zjednotiť terminológiu. Napr podľa tohoto
https://techdifferences.com/difference- ... iable.html
Tie premenné čo si nám ukázal nie sú lokálne, ale sú globálne. Aj keď sú nevidetelné pre iné tvoje moduly.
Lokálne premené samozrejme existujú ale len v určitom čase. Alokujú sa v momente keď sa príde do funkcie (bloku) kde sú definované a dealokované keď sa z toho bloku odíde. Preto sa dajú pozerať len vtedy keď si v danej funkcii (bloku). Preto je lokálne premenné lepšie vypisovať na seriak ako tam nastavovať breakpointy a krokovať.
Čo som pozrel DS pre ten tvoj procesor tak oblasť adries od 0 po 0x5F je označená ako Access RAM. Neviem čo to znamená. Tento HW je pre mňa cudzí. Vie datovú pamäť adresovať linearne, ale aj cez prepínanie baniek. Ďalšia zvláštnosť je že je tam 31 úrovňový stack. Takže neviem ako sa tam riešia lokálne premenné. Normálne sa totiž vytvárajú v zásobníku. Tu to možno ide, možno nie. Skúmať to nebudem, je to tvoja kára mal by si ju poznať ako jazdí.
https://techdifferences.com/difference- ... iable.html
Tie premenné čo si nám ukázal nie sú lokálne, ale sú globálne. Aj keď sú nevidetelné pre iné tvoje moduly.
Lokálne premené samozrejme existujú ale len v určitom čase. Alokujú sa v momente keď sa príde do funkcie (bloku) kde sú definované a dealokované keď sa z toho bloku odíde. Preto sa dajú pozerať len vtedy keď si v danej funkcii (bloku). Preto je lokálne premenné lepšie vypisovať na seriak ako tam nastavovať breakpointy a krokovať.
Čo som pozrel DS pre ten tvoj procesor tak oblasť adries od 0 po 0x5F je označená ako Access RAM. Neviem čo to znamená. Tento HW je pre mňa cudzí. Vie datovú pamäť adresovať linearne, ale aj cez prepínanie baniek. Ďalšia zvláštnosť je že je tam 31 úrovňový stack. Takže neviem ako sa tam riešia lokálne premenné. Normálne sa totiž vytvárajú v zásobníku. Tu to možno ide, možno nie. Skúmať to nebudem, je to tvoja kára mal by si ju poznať ako jazdí.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Sice je to moja kara, ale tiez ju nepoznam. . Spoznaval som ju v septembri minuleho roku, len do urovne do akej som minimalne potreboval.
Mne len neide do hlavy preco prave adresa 15 sa neda prepisovat a vsetko nad 15 teda 16 a vyssie sa uz da.
Riesim to uz aj na forume Microchip-u. Tak uvidime co mi poradia.
peterple,
uint8_t Month;
tak je to stale globalna premenna, len v inom *.c subore. Chapem uz. Doslo mi to.
Dobre, nevadi, prerobim to v programe. Pre debug pouzijem zatial globalne a potom ked to bude od debugovane, tak to prerobim aby sa tam vytvarali lokalne premenne. Viem ako to spravit, len sa musim pozriet na syntax.
Ale aj tak ma stve ze sa neda prepisat ta adresa 0x15 vo watch.
Atlan,
https://www.youtube.com/watch?v=JxSSVtTj_fA
co normalne mi trvalo "vecnost" kym som si vsetko nastudoval v datasheete a dokonca ked robis krkolomne zmeny Pin-ov, tak uz len kvoli tomu sa mi paci MPLAB X IDE.
Bohuzial, nie vsetky MCU su podporovane v MCC.
Ten PIC18F46K40 som kupoval podla MCC aby ho podporoval a aby mal vela vela vela file registrov (planoval som zapisovat data do EEPROM po strankach-bufferovat do velkosti stranky EEPROM pamate). A tiez nech ma vela periferii, aby som v polovici projektu nemenil MCU, za iny lepsi.
MCC podporuje tieto MCU
https://ww1.microchip.com/downloads/en/ ... 1_81_8.pdf
Strana 2 Supported families, alebo strana 3 Supported devices, tam je cely zoznam MCU ktore podporuje.
Mne len neide do hlavy preco prave adresa 15 sa neda prepisovat a vsetko nad 15 teda 16 a vyssie sa uz da.
Riesim to uz aj na forume Microchip-u. Tak uvidime co mi poradia.
peterple,
Traz som ta pochopil. Takze ak ja zapisemTie premenné čo si nám ukázal nie sú lokálne, ale sú globálne. Aj keď sú nevidetelné pre iné tvoje moduly.
Lokálne premené samozrejme existujú ale len v určitom čase. Alokujú sa v momente keď sa príde do funkcie (bloku) kde sú definované a dealokované keď sa z toho bloku odíde. Preto sa dajú pozerať len vtedy keď si v danej funkcii (bloku). Preto je lokálne premenné lepšie vypisovať na seriak ako tam nastavovať breakpointy a krokovať.
uint8_t Month;
tak je to stale globalna premenna, len v inom *.c subore. Chapem uz. Doslo mi to.
Dobre, nevadi, prerobim to v programe. Pre debug pouzijem zatial globalne a potom ked to bude od debugovane, tak to prerobim aby sa tam vytvarali lokalne premenne. Viem ako to spravit, len sa musim pozriet na syntax.
Ale aj tak ma stve ze sa neda prepisat ta adresa 0x15 vo watch.
Atlan,
Aj ja som sa vyhybal, ale akonahle som zbadal na youtube ako da pekne a rychlo sa v MCC da nakonfigurovat MCU za "2 min"Zatial sa prechodu na mplab X uspesne vybybam
https://www.youtube.com/watch?v=JxSSVtTj_fA
co normalne mi trvalo "vecnost" kym som si vsetko nastudoval v datasheete a dokonca ked robis krkolomne zmeny Pin-ov, tak uz len kvoli tomu sa mi paci MPLAB X IDE.
Bohuzial, nie vsetky MCU su podporovane v MCC.
Ten PIC18F46K40 som kupoval podla MCC aby ho podporoval a aby mal vela vela vela file registrov (planoval som zapisovat data do EEPROM po strankach-bufferovat do velkosti stranky EEPROM pamate). A tiez nech ma vela periferii, aby som v polovici projektu nemenil MCU, za iny lepsi.
MCC podporuje tieto MCU
https://ww1.microchip.com/downloads/en/ ... 1_81_8.pdf
Strana 2 Supported families, alebo strana 3 Supported devices, tam je cely zoznam MCU ktore podporuje.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Dnes som urobil test. Pre vase info:
Priradil som adresy 0x00 az 0x1F napevno premennym pomocou prikazu
a zistil som ze cela skupina adries od 0x0A az po 0x15 sa neda editovat vo "Watches" tabulke.
Neviem ci je to bug alebo nie. Ak mi to potvrdia na Microchip forume, tak to nahlasim na technical support ako bug, nech to riesia, ak sa im to chce.
Takze tak. Prajem pekny den.
Priradil som adresy 0x00 az 0x1F napevno premennym pomocou prikazu
Kód: Vybrať všetko
unsigned char dont_use_me_in_debug __at(0x15);
Neviem ci je to bug alebo nie. Ak mi to potvrdia na Microchip forume, tak to nahlasim na technical support ako bug, nech to riesia, ak sa im to chce.
Takze tak. Prajem pekny den.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
No to som zvedavý čo na to povedia hlavne ten Microchip.
To čo si urobil totiž urobiť nemôžeš. Ty nemôžeš len tak bez znalosti vnútorností kompilátora si kde čo privlastniť. Príklad z AVR. Tam je dátová pamäť linearna a adresný rozsah od 0 po 0x1F adresuje interné registre jadra (R0 až R31) Mnoho z nich má špeciálne postavenie v niektorých inštrukciách aj keď je to celé označené ako GPR (general purpose registers). No a potom si tu niektoré registre vyhradzuje kompilátor a tie použiť nesmieš lebo bude zle. Napríklad register R1 musí obsahovať nulu, lebo kompilátor s tým počíta. Ak to začneš používať môžeš ale keď skončíš musíš tam tú nulu vrátiť. Inak to začne šalieť úplne nepochopitelným spôsobom.
Ako to funguje v AVR GCC pre ukážku je trochu popísané tu
https://gcc.gnu.org/wiki/avr-gcc#Address_Spaces
Tieto veci sú zavislé na architektúre ale aj na type kompilátora. Kompilátor od rôznych poskytovateľov to môže mať rôzne interne urobené.
Ale práve takéto snorenie sú tie malé skúsenosti ktoré potom rozhodujú o tom kto je lama a kto je hacker. Tak veľa zadaru.
To čo si urobil totiž urobiť nemôžeš. Ty nemôžeš len tak bez znalosti vnútorností kompilátora si kde čo privlastniť. Príklad z AVR. Tam je dátová pamäť linearna a adresný rozsah od 0 po 0x1F adresuje interné registre jadra (R0 až R31) Mnoho z nich má špeciálne postavenie v niektorých inštrukciách aj keď je to celé označené ako GPR (general purpose registers). No a potom si tu niektoré registre vyhradzuje kompilátor a tie použiť nesmieš lebo bude zle. Napríklad register R1 musí obsahovať nulu, lebo kompilátor s tým počíta. Ak to začneš používať môžeš ale keď skončíš musíš tam tú nulu vrátiť. Inak to začne šalieť úplne nepochopitelným spôsobom.
Ako to funguje v AVR GCC pre ukážku je trochu popísané tu
https://gcc.gnu.org/wiki/avr-gcc#Address_Spaces
Tieto veci sú zavislé na architektúre ale aj na type kompilátora. Kompilátor od rôznych poskytovateľov to môže mať rôzne interne urobené.
Ale práve takéto snorenie sú tie malé skúsenosti ktoré potom rozhodujú o tom kto je lama a kto je hacker. Tak veľa zadaru.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Aby sme sa chapali, toto co som urobil (napevno definoval adresy), to len cisto kvoli debugu a otestovaniu kodu. Potom po odskusani, samozrejme to dam prec. Bolo mi otravne nepohodlne prepisovat v File Registers hodnoty adries v hex kodovani. Takto su zablokovane a teraz si pohodlne menim hodnoty registrov.
Preco som potreboval prepisovat premenne:
Ja som urobil v exceli kalkulator sekund podla datumu.
Natukal som si tam lubovolny datum a cas. Excel to vypocital.
Spustil program a zastavil som ho Break point-om pred zakodovacou rovnicou co som naprogramoval (zakodovanie datumu a casu ako sekundy do 4bajtoveho cisla). Natukal do registrov datum a cas ktory som mal napisany v exceli a spustil program a zase zastavil (Break point) na konci a skontroloval vysledok, ci sedi s tym co je v exceli / sedelo. Skontroloval som to pre kazdy jednotlivy mesiac, nakolko nie vsetky mesiace maju rovnaky pocet dni. Vyriesil som to cez Switch/Case/Break.
Pozn. Ten Switch/Case som uz prerobil. Identicka rovnica je uz pred Case a vnutri case su len tie konstanty co sa menia.
Toto je kodovanie datumu a casu do 4 bajtov. Paradne to funguje. Zakoduje aj priestupny rok (MSB zakodovaneho cisla nastavi do 1).
Aj dekodovanie uz frci. Skontroluje ci je MSB 1 a ked je tak dekoduje na zaklade priestupneho roka.
Preco som potreboval prepisovat premenne:
Ja som urobil v exceli kalkulator sekund podla datumu.
Natukal som si tam lubovolny datum a cas. Excel to vypocital.
Spustil program a zastavil som ho Break point-om pred zakodovacou rovnicou co som naprogramoval (zakodovanie datumu a casu ako sekundy do 4bajtoveho cisla). Natukal do registrov datum a cas ktory som mal napisany v exceli a spustil program a zase zastavil (Break point) na konci a skontroloval vysledok, ci sedi s tym co je v exceli / sedelo. Skontroloval som to pre kazdy jednotlivy mesiac, nakolko nie vsetky mesiace maju rovnaky pocet dni. Vyriesil som to cez Switch/Case/Break.
Pozn. Ten Switch/Case som uz prerobil. Identicka rovnica je uz pred Case a vnutri case su len tie konstanty co sa menia.
Toto je kodovanie datumu a casu do 4 bajtov. Paradne to funguje. Zakoduje aj priestupny rok (MSB zakodovaneho cisla nastavi do 1).
Aj dekodovanie uz frci. Skontroluje ci je MSB 1 a ked je tak dekoduje na zaklade priestupneho roka.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Toto je presný príklad ako to nerobím. Ani náhodou by sa mi nechcelo niekde niečo tukať krokovať a porovnávať. Na to všetko používam debug na sériový port. Teda si napíšem nejaké slučky čo mi prebehnú požadované vstupy. Vstupy aj výstupy sa logujú na sériový port (textovo) ten sa potom naimportuje do excelu a tam sa to vyhodnotí. Zdroják je urobený tak a by sa tie debug logovania dali ľahko zapnúť/vypnúť. Takže to môžem debugovať hocikedy v budúcnosti až tam vyskočí nejaký problém.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 4421
- Dátum registrácie: 09 Apr 2008, 00:00
- Bydlisko: Wicklow, Irsko
- Vek: 47
Re: Hodnota variable s adresou 0x15 sa neda prepisat v MPLAB X IDE v5.50
Ja som si zvykol na ten debug, hlavne si tam overujem ci som niekde neurobil chybu v algoritme. Az taky dobry nie som ze napisem kod na prvu supu. ale v tvojom pripade je to asi lepsie.
0
Prepáčte mi za diakritiku a preklepy - väčšinou píšem z mobilu a ENG klavesnice.
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
(výroky nemenovaného člena fóra:) ...základy elektrotechniky ovládam dokonale, tak napr. taký tyristor neviem ako presne funguje
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 10 Odpovedí
- 876 Zobrazení
-
Posledný príspevok od používateľa budvar10
-
- 5 Odpovedí
- 1696 Zobrazení
-
Posledný príspevok od používateľa pocitujlasku
-
- 6 Odpovedí
- 777 Zobrazení
-
Posledný príspevok od používateľa pocitujlasku