MPLAB - volné místo v procesoru

Snad to pomůže piityymu :smiley:

[code]4.10 Podporované varianty HEX souboru
• “obyčejný”, někdy též Intel 8-bit HEX File, MPASMWIN generuje tento soubor při parametru INHX8M
• “rozšířený”, někdy též Intel 32-bit HEX File, MPASMWIN generuje tento soubor při parametru INHX32

Popis formátu Intel HEX souboru
Intel HEX jsou textové soubory, které se skládají z řádků.
Každý řádek má následující strukturu: :LLAAAATTDDDD…CC

• : Tímto znakem (dvojtečka, 0x3A) musí začínat každý řádek souboru.
• LL Délka záznamu (počet políček DD).
• AAAA Adresa prvního byte záznamu.
• TT Typ záznamu. Typy mohou být:
• 00 - Datový záznam.
• 01 - Záznam Konec souboru. Každý soubor musí končit tímto záznamem.
• 02 - Rozšířená segmentová adresa. (pouze 32-bit HEX)
• 04 - Rozšířená lineární adresa. (pouze 32-bit HEX)

Existují i jiné typy, 03 a 05, které program UP při načítání ignoruje a při ukládání souboru nepoužívá.
• DD Data záznamu. Počet bytů musí být přesně LL.
• CC Kontrolní součet. Kontrolní součet je počítán jako dvojkový doplněk k součtu všech hodnot na řádku.

Datový záznam
Jako příklad poslouží řádek s uloženou konfigurační pamětí 14-bitové součástky.
:02400E00413F30
• Délka záznamu: 02 - Velikost konfigurační paměti je jedno slovo = 14 bit = 2 byte (zarovnáno na celé byty)
• Adresa záznamu: 400E - Adresa konfigurační paměti je slovo 2007h, adresováno po bytech tedy 400Eh
• Typ záznamu: 00 - Datový záznam
• Data záznamu: 413F - Konfigurační slovo je 3F41h
• Kontrolní součet: 30 = 02 + 40 + 0E + 00 + 41 + 3F = xxD0; neg D0 = 30
31

Konec souboru
Jedinou možnou variantou řádku Konec souboru je:
:00000001FF

Rozšířená lineární adresa
Tento řádek obsahují pouze soubory, které potřebují adresovat více než 64 kB adresového prostoru. Na příklad procesory rodiny PIC18F mají uloženou konfigurační paměť na adrese 0x 30 00 00 00.
Pokud je třeba použít tuto adresu, je nutné do HEX souboru vložit řádek s rozšířenou lineární adresou, který obsahuje horních 16 bitů adresy. Dolních 16 bitů je načteno z řádku s datovým záznamem.
:020000040030CA
Tímto řádkem se vybírá konfigurační paměť u součástek rodiny PIC18F.
U rozšířených segmentových záznamů se udává segment, tedy bity 19-4 adresy (segment), které se pak přičítají k
adresám z datových záznamů (offset).

Ukládání typu součástky do .HEX souboru
Velmi často se stává, že dojde k záměně mezi vybraným typem součástky a typem součástky, pro kterou byl Intel HEX soubor uložen. Proto program UP obsahuje funkci ukládání typu součástky do souboru.
Program zapíše za konec souboru ještě řádek #PART=… Drtivá většina programů pracujících s Intel HEX soubory takovýto řádek ignoruje, avšak takovýto soubor nelze považovat za vyhovující formátu Intel HEX.[/code]
MultiplexBIG8S.HEX (7.94 KB)
MultiplexBIG8M.HEX (15.8 KB)

Sice nevím, co přesně řešíte, ale pokud jde o délku paměti, tak můžete zkusit třeba free program UP od ASIX. Já ho mám v počítači, protože jsem používal jejich Piccolo. Je to programovací software. Když do něj naloadujete HEX, tak barevně zobrazí obsazení pamětí. Dovede i konverzi do BIN. Jediné co je nutno udělat, je nastavení správného procesoru.

Používám UP taky, ale tem barevně ukáže celkovou obsazenou a volnou paměť.
Honza3 by ale chtěl barevné rozdělení stránek v paměti, tedy jestli jsem ho správně pochopil.

Já jsem se původně ptal, jak zjistit místo v procesoru. Pak napsal pštros, že kdysi chtěl udělat něco jako defrag v barvě. Pak se toho piityy chytl a začal tvořit. Kdyby jste to vy dva napsaly hned, nebylo by co řešit a piityy by se nudil. Zkusím UP. Někde ho tu ještě mám, používal jsem ho na Picquick.

Edit: Tak jsem ho zkusil, ale nějak jsem nepochopil, co myslíte barevně ukáže obsazení paměti. Hlavně to PAGE.

To co je obsazené je zelené, to co volné bílé.
Pokud si dáš na začátek programu třeba tento zápis

org 07FFh ; konec prvni PAGE movlw .1 org 0FFFh ; konec druhe PAGE movlw .1 org 17FFh ; konec treti PAGE movlw .1

uvidíš v UP programu zeleně označené konce PAGE. Zápis platí pro PIC16F877.

Tak… a mam po zabave :confused: :slight_smile: Ale stejne budu jeste chvilku otravovat :wink:

“Data záznamu: 413F - Konfigurační slovo je 3F41h”
Tady je problem, v rozdilu mezi mcu, PC a jinymi stroji (ne x86) . Jedna skupina stroju pouziva adresaci, kde nizssi adresa nese MSB vice bytoveho slova a druha skupina naopak :frowning: nanestesti toto neni ve specifikaci intelHEX definovano (alespon v te, kterou mam k dispozici). Vznikl by tim problem pri adresaci rozsirenych adresovych prostoru, ktere ovsem nejsou v tech Honzovych hexech pouzity, takze by to stejne melo byt zobrazeno spravne :unamused:
Zajimave take je, ze ten 8-bit extended hex generuje stejne jako ten 32bit-extended pres 16kB dat, ale ten zakladni 8-bit jen 8kB a nejaky drobny… ted jsem teda mimo misu… :confused:

Ten UP je taková nouzovka po tom, co ukázal piityy, že by to mohlo i fungovat. Já jsem si dával na začatek každe page nop, abych věděl, kde je co a koukal na to ve WinPicu800. Ale UP to má hezčí. :smiley:

hod nejakej obrazek, at vim, jak to vypada u konkurence :wink: :slight_smile:

Jankop psal, ze ten programek umi i konverzi do BIN… Muzes to tim prevest a dat vedet, jaky velikosti souboru to pri kterym hexu vyrobilo?

BIN je v raru. Ale podle mě je nesmysl, aby jsi to dělal na BIN. Chtělo by to přímo z HEXu.
MultiplexBIG.rar (1.7 KB)

Pardon, pane, zapomněl jsem na tyhle makra… DB, DW (použil jsem jen výjmečně), makra u x51 nepoužívám, u AVR je to samozřejmost…

To je mi jasny, jen sem chtel videt vystup z toho druhyho programku… Stejne ale porad netusim, kde je chyba :frowning:

Asi mezi klávesnicí a židlí. :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

nejspis… ale v tom pripade mezi vice klavesnicema a zidlema… Protoze jak uz jsem psal - i jiny programy to prelozej stejne jako ten muj… :wink:

Ale když ten HEX otevře programátor WinPic800 a ICProg, tak si myslím, že v něm chyba není, a nebo jestli je tam něco nestandartního, tak už se to asi standartem stalo.

a nebo je to standardem jen u microchipu…

Myslím si, že nemáš pravdu. Kdyby tomu tak bylo, ty HEXy by nepřekously jiné programatorské softy, ale jen MPLAB.

Jsem ted nemocnej, tak do toho zas vrtam :slight_smile:

Soubor: “MultiplexBIG8S.HEX”

:100000000000002800080008000800111212131355 Bytes: 16, Address: 0000, Type: 00 :0F02F0000030002A220B2A3408000B2A0B2A3474 Bytes: 15, Address: 02F0, Type: 00
Page 0 vporadku

:100800001512161708201617000007343434343434 Bytes: 16, Address: 0800, Type: 00 :0A0C9000162011122212131112296E Bytes: 10, Address: 0C90, Type: 00
Page 1 vporadku

:101000001213300000000000000000001213300036 Bytes: 16, Address: 1000, Type: 00 :0610A000003000300000EA Bytes: 6, Address: 10A0, Type: 00
Page 2 vporadku

:1018000007343434343434343434343434343434C5 Bytes: 16, Address: 1800, Type: 00 :0A1AF00012130A151622121300004B Bytes: 10, Address: 1AF0, Type: 00
Page 3 vporadku

Nyni by mel nasledovat zaznam “EndOfFile”. Bohuzel pred nim je jeste jeden(ten druhej je spravny EOF):

:0120070037A1 Bytes: 1, Address: 2007, Type: 00 :00000001FF Bytes: 0, Address: 0000, Type: 01

Tudiz je tento HEX podle honzova popisu temer spravne (vesel by se do 8kB) nebyt predposledniho zaznamu “:0120070037A1”. Ten totiz obsahuje adresu 8199(dec). Proc tak blba adresa? vsechny predchozi adresy koncily “0”(nasobky 2^4) - zaznamy byly az do posledniho v page po 16 bytech…
Cosi shnileho je u microchipu… Pokud by mel ten predposledni zaznam pro microchip nejaky specificky vyznam, meli by ho tam vlozit jinym zpusobem, nebo ho alespon nekde popsat…

Nemaj nekde popsany to nastaveni a specialni kody? Neco v tom smylsu uz jsi natuknul:

Zminovany zaznam ani #PART tento soubor neobsahuje, ale prave ten predposledni, ktery mi tam dela bordel, by taky mohl byt nejaky ten “konfiguracni”. Ta jeho adresa je totiz znacne neobvykla (navic licha, u microchipu v praxi nerealna)…

v priloze je cely komentovany HEX a vystup myho programku pri smazani toho konfliktniho radku.

BTW: ty dalsi HEX soubory jsou uplne mimo…
Schránka01.gif
MultiplexBIG8S.HEX.txt (14.5 KB)

To je konfigurace paměti.
Ale kdyby jsi do toho prográmku dal i detekci konfigurační paměti, tak by to mohlo fungovat.

Konkétně

__config _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC & _DEBUG_ON & _CPD_OFF & _LVP_OFF

Teď jsem si s tím hrál a zkoušel jsem ty HEXy nahrát postupně do PIC a ten MultiplexBIG8S.HEX nefunguje!!

Bych klidne dal, ale neznam ty jejich specialni zaznamy, abych si z toho hexu vybral jen to, co potrebuju :frowning:

Ten muj “komentovanej” hex nepujde(ikdyz treba ten muj programek ignoruje vsechno za kontrolnim souctem, tudiz by mu to nevadilo) - nedodrzuje format, ale ten tvuj puvodni vy fachat mel, kdyz ti ho prekladac vyrobil, ne?

Já myslel ty moje, ne ten tvůj.
Já to předtím jen přeložil, ale nezkoušel a včera jsem si s tím hrál a zjistil jsem, že překladač MPASMWIN udělá nějakou změnu v tom HEXu a program ve formátu 8S nejede v procesoru. Ono to totiž není ani HEX, ale má to příponu HXH.