home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


MikroC e ottimizzazione
     
Autore Messaggio opzioni
merco




una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli una ogni 10 livelli


postato il:
22.12.2022, alle ore 20:51
MikroC e ottimizzazione 

Ciao. Mi rivolgo specialmente a chi conosce mikroC.
Vorrei un consiglio su come poter ottimizzare l'accesso ad una matrice: mi spiego meglio.
Vorrei provare a generare un segnale VGA con un linguaggio ad alto livello, sfruttando un PIC18 a 64Mhz (P18F46K20).

Restando coi piedi per terra e 2 rapidi conti il problema maggiore è quello del generae i pixel per ogni riga.

L'utopia è quella di avere una matrice 24colonne*10righe di caratteri e una mappa caratteri di 128 (o al più 96) di 8 bit che verranno portati su una porta e ruotati. Ovviamente monocolore.


Lavorando con MikroC :

unsigned short idxrow
unsigned int vLine
una istruzione tipo... idxrow= ((vLine-116)>>5); viene esequita in 59 cicli xkè trasformata in questo modo dal compilatore:


;VgaTest.c,69 ::  idxrow= ((vLine-116)>>5);
$0062 $0E74      MOVLW 116
$0064 $5C15      SUBWF _vLine, 0, 0
$0066 $6E03      MOVWF STACK_3, 0
$0068 $0E00      MOVLW 0
$006A $5816      SUBWFB _vLine+1, 0, 0
$006C $6E04      MOVWF STACK_3+1, 0
$006E $0E05      MOVLW 5
$0070 $6E02      MOVWF STACK_2, 0
$0072 $C003 F000 MOVFF STACK_3, STACK_0
$0076 $C004 F001 MOVFF STACK_3+1, STACK_0+1
$007A $5002      MOVF STACK_2, 0, 0
$007C $ L_main_10:
$007C $0102      MOVLB 2
$007E $E005      BZ L_main_11
$0080 $3201      RRCF STACK_0+1, 1, 0
$0082 $3200      RRCF STACK_0, 1, 0
$0084 $9E01      BCF STACK_0+1, 7, 0
$0086 $0FFF      ADDLW 255
$0088 $D7F9      BRA L_main_10
$008A $ L_main_11:
$008A $0102      MOVLB 2
$008C $C000 F200 MOVFF STACK_0, _idxrow


quando invece una cosa come sotto la fa in 11 cicli


idxrow= (vLine-116);
     asm {
      rrncf  _idxrow,1
      rrncf  _idxrow,1
      rrncf  _idxrow,1
      rrncf  _idxrow,1
      rrncf  _idxrow,1
      MOVLW 15
     ANDWF _idxrow, 1, 1
    }


Quello da super ottimizzare è la parte dei puntatore per accedere alla mappa caratteri e memoria video

volatile const unsigned short *cset;
volatile unsigned short *vrow;
PORTD = cset[*vrow++]; <<=== QUESTA

l'istruzione viene esequita in circa 1.31us.... a cui poi devo aggiungere lo shift... sarà possibile ottimizzare ?

Posso condindividere sorgente se interessa.



Merco
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale