Sari la conținut
ELFORUM - Forumul electronistilor

PIC18F4550, usb bootloader


Vizitator ceteras

Postări Recomandate

Vizitator ceteras

Salut!

 

Incercand sa invat sa programez cu 18F4550, am construit placa asta: http://eegeek.net/content/view/13/32/

 

Schema :Posted Image

 

Ideea e ca programezi un bootloader in microcontroller, apoi poti sa incarci cu o aplicatie de la microchip, prin usb, fisierele HEX pe care le vrei rulate.

 

Problema e ca tre sa instruiesti compilatorul sa mute totul sa inceapa de la adresa 0x800, si eu unul n-am reusit asa ceva.

 

Placa functioneaza, demo-ul de la microchip functioneaza. Am facut in assembler o mica aplicatie care aprinde ledurile pe portD, si asta merge (a fost f simplu sa mut totul la 0x800, cu un org).

 

Intrebare: a lucrat cineva cu un bootloader pe usb, in C?

Cum ati facut sa se compileze calumea codul, sa inceapa executia la 0x800?

 

Eventual daca-mi puteti da un exemplu de cod banal, in C pe MCC18, care sa aprinda un led, ceva simplu, sa vad, poate ma descurc de acolo.

N-am gasit decat exemple foarte complicate, cu aplicatii serioase (USB HID etc), pe care nu le-a putut digera din pacate.

 

Codul meu in C:

#include <p18f4550.h>// pentru relocare la 0x800extern void _startup (void);      #pragma code _RESET_INTERRUPT_VECTOR = 0x000800void _reset (void){    _asm goto _startup _endasm}#pragma code#pragma code _HIGH_INTERRUPT_VECTOR = 0x000808void _high_ISR (void){    ;}#pragma code _LOW_INTERRUPT_VECTOR = 0x000818void _low_ISR (void){    ;} // sfarsit sectiune pentru relocare la 0x800void main (void) {	INTCON = 0;	TRISD = 0;	PORTD = 0XAA;	}
Multumesc, dau o bere!
Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Liviu M

    2

  • sofian

    1

Vizitator bytencoder

Compilatorul tau foloseste fisiere linker-script ? Daca da atunci cred ca ar trebui sa folosestei unul custom-built pentru bootloaderul tau...

Link spre comentariu

Din cate stiu eu, cand lucrezi cu bootloader, trebuie sa-i spui compilatorului chestia asta, astfel incat sa-ti lase zona de memorie folosita de bootloader in pace.Nu stiu cum e la compilerul de la uChip (banui ca asta reprezinta MCC18); la compilerele de la hi-tech poti "rezerva" memorie cu optiuni de compilare (ceva gen -RESROM1E00-1EFF). Banui ca si pentru MCC18 exista asa ceva, da' trebuie sa te uiti in documentatie. Si daca rezervi o zona de memorie la inceput, ar trebui sa-si "adapteze" singur "originea", nu?Ma rog,bootloaderul meu se aseaza la sfarsitul memoriei, ceea ce, cred, imi usureaza viata.A, inca ceva, s-ar putea sa ai nevoie de o functie pentru intreruperi (eventual goala). Din cate tin eu minte, la mine n-a functionat bootloaderul corect pana n-am facut chestia asta (acum se poate ca problema sa fi fost in cu totul alta parte, da' eu cu senzatia asta am ramas).

Link spre comentariu

bootloaderul se pune la sfirsit ptr ca toti vectori pic-ului sunt la inceput si trebuie sa ai acces la eibootloaderul este doar ca sa te ajute sa programezi picul in circuit nu ca sa te incurce

Link spre comentariu
Cel pe care-l folosesc eu pentru 16f877 asa face, se aseaza cuminte in ultimii 256 bytes, Da' din cate stiu eu nu-s toate la fel (parca cel de la uChip se aseaza la inceput).
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări