Pages: [1] 2   Go Down
Author Topic: Assembly inline  (Read 1966 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, sto cercando di trasformare tvtext http://benryves.com/projects/tvtext (scritto in C) in una libreria da compilare con l' IDE di Arduino.
Ho provato l'hex scaricato su un 328p su basetta con quarzo da 20Mhz e funziona perfettamente, per flashare ho usato un programmatore usb e avrstudio.
allora il pacchetto scaricabile contiene:
main.c
config.h
font_6.h e font_8.h
tvtext.c
tvtext.h
ed il file - driver.S - contenente una serie di istruzioni scritte in assembly

Alla svelta, il file main.c è diventato lo sketch, ho creato la classe tvtext ed ho inserito le procedure, papocchiando qua e la l'IDE compila il tutto senza errori, ma ovviamente non funziona, perchè non è possibile creare il tab driver.S, cioè mancano quella serie di istruzioni assembly, vorrei inserirlo dove viene chiamata l'extern void per l'inizializzazione usando il codice assembly inline.
Il file driver.S :
Code:
#include <avr/io.h>
#include "config.h"

; Registers.
#define r_font_row           r15 /* Stores a row of pixels from the font data temporarily. */
#define r_characters_left    r16 /* Stores the number of characters left to draw on a scanline. */
#define r_font_data_l        r17 /* Points to the LSB of the font data table, offset by the current scanline. */
#define r_font_data_h        r18 /* Points to the MSB of the font data table, offset by the current scanline. */
#define r_font_invert_mask   r19 /* Stores a mask used to invert the display. Set to 0x00 (normal) or 0xFF (inverted). */
#define t_short_vsync          4 /* Length of the "short" sync pulses. */
#define t_long_vsync          28 /* Length of the "long" sync pulses. */
#define t_active_sync          4 /* Length of the sync pulse on active display. */
#define t_active_picture      60 /* Length of the picture data on active display. */

; Variables.
.lcomm timer1_compa_handler, 2   ; Function pointer to current TIMER1_COMPA_vect handler.
.lcomm scan_region_repeat, 2     ; Used to count down display regions when rasterising.
.lcomm cursor_cell, 2            ; Pointer to the buffer cell that contains the cursor.
.lcomm cursor_char, 1            ; Character to draw in the cursor's cell.
.lcomm scanline_counter, 2       ; Refers to the current scanline.

#define cycles_us(us) (us)*20-1

.global tvtext_driver_init
tvtext_driver_init:
push r20
ldi r20, lo8(pm(long_vsync_sync))
sts timer1_compa_handler+0, r20
ldi r20, hi8(pm(long_vsync_sync))
sts timer1_compa_handler+1, r20
ldi r20, 5
sts scan_region_repeat, r20
pop r20
ret

.global TIMER1_COMPA_vect
TIMER1_COMPA_vect:
in r_sreg_save,_SFR_IO_ADDR(SREG) ; [1]
push ZL                           ; [2]
push ZH                           ; [2]
push YL                           ; [2]
push YH                           ; [2]

; Disable CTC.
ldi ZL, _BV(CS10)
sts _SFR_MEM_ADDR(TCCR1B),ZL

lds ZL,_SFR_MEM_ADDR(TCNT1L) ; [2]
sbrs ZL,0                    ; [2/1] \_ bit 0 = 0: 3cc \  00 -> 7
rjmp .                       ; [2]   /  bit 0 = 1: 2cc  | 01 -> 6
sbrs ZL,1                    ; [2/1] \_ bit 1 = 0: 4cc  | 10 -> 5
lpm ZL,Z                     ; [3]   /  bit 1 = 1: 2cc /  11 -> 4

lds ZL, timer1_compa_handler+0      ; [2]
lds ZH, timer1_compa_handler+1      ; [2]
ijmp                                ; [2]

; Exits the interrupt handler and sets the screen colour back to black.
exit_timer1_compa_vect:
sts timer1_compa_handler+0, ZL
sts timer1_compa_handler+1, ZH
sts _SFR_MEM_ADDR(OCR1AH), YH
sts _SFR_MEM_ADDR(OCR1AL), YL
exit_timer1_compa_vect_no_store:
; Re-enable CTC.
ldi ZL, _BV(WGM12) | _BV(CS10)
sts _SFR_MEM_ADDR(TCCR1B),ZL

; Clear interrupts (if any happened).
sbi _SFR_IO_ADDR(TIFR1), OCF1A

pop YH
pop YL
pop ZH
pop ZL
out _SFR_IO_ADDR(SREG),r_sreg_save ; [1]
reti

; 30uS of sync.
long_vsync_sync:
cbi _SFR_IO_ADDR(TVTEXT_SYNC_PORT),TVTEXT_SYNC_BIT
ldi YL,lo8(cycles_us(t_long_vsync))
ldi YH,hi8(cycles_us(t_long_vsync))
ldi ZL,lo8(pm(long_vsync_black))
ldi ZH,hi8(pm(long_vsync_black))
jmp exit_timer1_compa_vect

; 2uS of black.
long_vsync_black:
sbi _SFR_IO_ADDR(TVTEXT_SYNC_PORT),TVTEXT_SYNC_BIT
; Is this the last long vsync?
lds YL, scan_region_repeat
dec YL
brne long_vsync_not_finished
; Long sync is always followed by 5x short sync.
ser YL
sts scan_region_repeat+1, YL ; Used to denote that we're entering short sync from long sync.
ldi YL, 5
ldi ZL,lo8(pm(short_vsync_sync))
ldi ZH,hi8(pm(short_vsync_sync))
jmp long_vsync_finished
long_vsync_not_finished:
ldi ZL,lo8(pm(long_vsync_sync))
ldi ZH,hi8(pm(long_vsync_sync))
long_vsync_finished:
sts scan_region_repeat, YL
ldi YL,lo8(cycles_us(t_short_vsync))
ldi YH,hi8(cycles_us(t_short_vsync))
jmp exit_timer1_compa_vect

; 2uS of sync.
short_vsync_sync:
cbi _SFR_IO_ADDR(TVTEXT_SYNC_PORT),TVTEXT_SYNC_BIT
cbi _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),TVTEXT_PICTURE_BIT
ldi YL,lo8(cycles_us(t_short_vsync))
ldi YH,hi8(cycles_us(t_short_vsync))
ldi ZL,lo8(pm(short_vsync_black))
ldi ZH,hi8(pm(short_vsync_black))
jmp exit_timer1_compa_vect

; 30uS of black.
short_vsync_black:
sbi _SFR_IO_ADDR(TVTEXT_SYNC_PORT), TVTEXT_SYNC_BIT
; Is this the last short vsync?
lds YL,scan_region_repeat
dec YL
brne short_vsync_not_finished
; Short sync is either followed by 5x long sync or active display.
lds YL,scan_region_repeat+1
inc YL
breq short_vsync_enter_active_display
short_vsync_enter_long_sync:
; We've just finished a frame!
lds ZL,tvtext_frame_counter+0
lds ZH,tvtext_frame_counter+1
adiw ZL,1
sts tvtext_frame_counter+0,ZL
sts tvtext_frame_counter+1,ZH

ldi YL, 5
ldi ZL,lo8(pm(long_vsync_sync))
ldi ZH,hi8(pm(long_vsync_sync))
jmp short_vsync_finished
short_vsync_enter_active_display:
; We're about to enter active display.
call set_up_cursor
; Initialise the scanline counter, skipping the first few lines.
ldi YL,lo8(-(32+1))
ldi YH,hi8(-(32+1))
lds ZL,tvtext_offset_y+0
lds ZH,tvtext_offset_y+1
sub YL,ZL
sbc YH,ZH
; If the screen is blanked, hide the display by using a scanline counter offset that would result in the display never being shown.
lds ZL,tvtext_flags
sbrs ZL,TVTEXT_VISIBLE
ldi YH,0x80
sts scanline_counter+0, YL
sts scanline_counter+1, YH
; 304 lines in PAL.
ldi YH,hi8(-304)
sts scan_region_repeat+1, YH
ldi YL,lo8(-304)
ldi ZL,lo8(pm(active_sync))
ldi ZH,hi8(pm(active_sync))
jmp short_vsync_finished
short_vsync_not_finished:
ldi ZL,lo8(pm(short_vsync_sync))
ldi ZH,hi8(pm(short_vsync_sync))
short_vsync_finished:
sts scan_region_repeat, YL
ldi YL,lo8(cycles_us(t_long_vsync))
ldi YH,hi8(cycles_us(t_long_vsync))
jmp exit_timer1_compa_vect

set_up_cursor:
; Calculate the cursor offset and character.
push r0
push r1
lds r0,tvtext_cursor_row
ldi YL,TVTEXT_BUFFER_WIDTH
mul r0,YL
lds YL,tvtext_cursor_column
clr YH
add r0,YL
adc r1,YH
ldi YL,lo8(tvtext_buffer)
ldi YH,hi8(tvtext_buffer)
add r0,YL
adc r1,YH
sts cursor_cell+0,r0
sts cursor_cell+1,r1
movw YL,r0
ld YL,Y
lds YH,tvtext_flags
; Is the cursor visible?
sbrs YH,TVTEXT_CURSOR_ENABLED
rjmp found_cursor_char
sbrs YH,TVTEXT_CURSOR_VISIBLE
rjmp found_cursor_char
lds YL,tvtext_cursor
found_cursor_char:
sts cursor_char,YL
; Do we need to blink the cursor?
lds YL,tvtext_cursor_flash_timer
dec YL
brne no_flash_cursor
; Blink the cursor.
ldi YL,_BV(TVTEXT_CURSOR_VISIBLE)
eor YH,YL
sts tvtext_flags,YH
lds YL,tvtext_cursor_flash_period
no_flash_cursor:
sts tvtext_cursor_flash_timer,YL
pop r1
pop r0
ret

; 4uS of sync.
active_sync:
cbi _SFR_IO_ADDR(TVTEXT_SYNC_PORT),TVTEXT_SYNC_BIT
cbi _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),TVTEXT_PICTURE_BIT

; Increment the scanline counter. [10]
lds YL,scanline_counter+0 ; [2]
lds YH,scanline_counter+1 ; [2]
adiw YL,1                 ; [1]
sts scanline_counter+0,YL ; [2]
sts scanline_counter+1,YH ; [2]

ldi YL,lo8(cycles_us(t_active_sync))
ldi YH,hi8(cycles_us(t_active_sync))
ldi ZL,lo8(pm(active_back_porch))
ldi ZH,hi8(pm(active_back_porch))
jmp exit_timer1_compa_vect

« Last Edit: August 07, 2012, 04:33:32 pm by Francesco_MIRM » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
; 8uS of back porch.
active_back_porch:
sbi _SFR_IO_ADDR(TVTEXT_SYNC_PORT),TVTEXT_SYNC_BIT ; [1]

; Have we finished scanning the active display? [25]
lds YL,scan_region_repeat+0             ; [2]
lds YH,scan_region_repeat+1             ; [2]
adiw YL,1                               ; [2]
sts scan_region_repeat+0,YL             ; [2]
sts scan_region_repeat+1,YH             ; [2]
brne active_display_not_finished        ; [2/1]

active_display_finished:
ldi ZL,lo8(pm(short_vsync_sync))        ; [1] \.
ldi ZH,hi8(pm(short_vsync_sync))        ; [1]  |
ldi YL,6                                ; [1]  |_ [7]
sts scan_region_repeat,YL               ; [2]  |
jmp active_display_exit                 ; [2] /'
active_display_not_finished_delay:
rjmp .                                  ; [2] \.
rjmp .                                  ; [2]  |_ [6]
rjmp .                                  ; [2] /'
active_display_not_finished:
ldi ZL,lo8(pm(active_sync))             ; [1] \_ [2]
ldi ZH,hi8(pm(active_sync))             ; [1] /

rjmp .                                  ; [2] \.
rjmp .                                  ; [2]  |_ [5]
nop                                     ; [1] /'

active_display_exit:
ldi YL,lo8(cycles_us(t_active_picture)) ; [1] \_ [2]
ldi YH,hi8(cycles_us(t_active_picture)) ; [1] /

sts timer1_compa_handler+0,ZL           ; [2] \.
sts timer1_compa_handler+1,ZH           ; [2]  |_ [8]
sts _SFR_MEM_ADDR(OCR1AH),YH            ; [2]  |
sts _SFR_MEM_ADDR(OCR1AL),YL            ; [2] /'

push r0
push r1
push r_font_data_l
push r_font_data_h
push r_characters_left
push r_font_row
push r_font_invert_mask
push XL
push XH

active_display:

; Delay by the screen offset value.
lds r_characters_left,tvtext_offset_x
inc r_characters_left
1: dec r_characters_left
brne 1b

; Is the screen inverted?
lds r_font_row,tvtext_flags                              ; [1]
clr r_font_invert_mask                                   ; [1]
sbrc r_font_row,TVTEXT_INVERTED                          ; [2/1]
ser r_font_invert_mask                                   ; [1]
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_invert_mask ; [1]

; Are we on the screen?
lds r_characters_left,scanline_counter+1
or r_characters_left,r_characters_left
breq 1f
jmp active_display_skip_scanline
1:

.if TVTEXT_SKIP_ALTERNATE_ROWS
lds r_characters_left,scanline_counter+0 ; [2]
sbrc r_characters_left,0                 ; [2/1]
jmp active_display_skip_scanline         ; [2]
.endif

; Handle the cursor.
lds YL,cursor_cell+0 ; [2]
lds YH,cursor_cell+1 ; [2]
ld r0,Y              ; [1]
push r0              ; [2]
lds r0,cursor_char   ; [2]
st Y,r0              ; [2]

; Get font data offset.
ldi r_font_data_l,lo8(tvtext_font_data)
ldi r_font_data_h,hi8(tvtext_font_data)

; Offset the font data by the scanline number.
lds XL,scanline_counter+0
lsr XL
andi XL,7
clr XH
add r_font_data_l,XL
adc r_font_data_h,XH

; Calculate the position in the text buffer:
lds XL,scanline_counter+0  ; [2]
swap XL                    ; [1]
andi XL,15                 ; [1]
ldi XH,TVTEXT_BUFFER_WIDTH ; [1]
mul XH,XL                  ; [2]

ldi XL,lo8(tvtext_buffer) ; [1]
ldi XH,hi8(tvtext_buffer) ; [1]
add XL,r0                 ; [1]
adc XH,r1                 ; [1]
; Fetch first character.

ldi ZL, 8             ; [1]
ld r0, X+             ; [2]
mul r0, ZL            ; [2] Multiply character index by 8.
add r0, r_font_data_l ; [1] \_ Offset font data row by scanline number.
adc r1, r_font_data_h ; [1] /
movw ZL, r0           ; [1]

; Display first five columns of first character and fetch second one.

; (1)
lpm r_font_row,Z                                 ; [3]
eor r_font_row,r_font_invert_mask                ; [1]
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
nop                                              ; [1]
rol r_font_row                                   ; [1]

; (2)
rjmp .                                           ; [2] <- [2] before.
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
ldi ZL,8                                         ; [1] \_ [2] after.
rol r_font_row                                   ; [1] /

; (3)
ld r0,X+                                         ; [2] <- [2] before.
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
mul r0,ZL                                        ; [2] <- [2] after. (Multiply character index by 8).

; (4)
rol r_font_row                                   ; [1] \_ [2] before.
add r0,r_font_data_l                             ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
nop                                              ; [1] \_ [2] after.
adc r1,r_font_data_h                             ; [1] /  Offset font data row by scanline number.
; (5)
movw ZL,r0                                       ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
ldi r_characters_left,TVTEXT_BUFFER_WIDTH-1      ; [1] \_ [2] after.
nop                                              ; [1] /

Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
output_scanline_loop:                                ; Clock out the rest of the scanline.

; (6)
nop                                              ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]

.ifeq TVTEXT_CHARACTER_WIDTH-8

; Shift out an extra two pixels.
rjmp .                                           ; [2] <- [2] after.

; (7)
nop                                              ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
.if TVTEXT_SQUASHED_HORIZONTALLY
nop                                              ; [1] <- [1] after.
.else
rjmp .                                           ; [2] <- [2] after.
.endif

; (8)
nop                                              ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]

.endif
lpm r_font_row,Z                                 ; [3] <- One of these clock cycles is used below.

; (1)
/* One clock cycle left over from LPM */         ; [1] \_ [2] before.
eor r_font_row,r_font_invert_mask                ; [1]
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
ldi ZL,8                                         ; [1] \_ [2] after.
rol r_font_row                                   ; [1] /

; (2)
ld r0,X+                                         ; [2] <- [2] before.
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
mul r0,ZL                                        ; [2] <- [2] after. (Multiply character index by 8).

; (3)
rol r_font_row                                   ; [1] \_ [2] before.
nop                                              ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
add r0,r_font_data_l                             ; [1] \_ [2] after.
adc r1,r_font_data_h                             ; [1] /  Offset font data row by scanline number.

; (4)
movw ZL,r0                                       ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
.if TVTEXT_SQUASHED_HORIZONTALLY
nop                                              ; [2] <- [2] after.
.else
rjmp .                                           ; [1] <- [1] after.
.endif

; (5)
rol r_font_row                                   ; [1] \_ [2] before.
dec r_characters_left                            ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
brne output_scanline_loop                        ; [2/1] \_ [2] after.
nop                                              ; [1]   /

; Output final pixel(s).
; (6)
nop                                              ; [1]
rol r_font_row                                   ; [1]
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]

.ifeq TVTEXT_CHARACTER_WIDTH-8

; Shift out an extra two pixels.
rjmp .                                           ; [2] <- [2] after.

; (7)
nop                                              ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]
.if TVTEXT_SQUASHED_HORIZONTALLY
nop                                              ; [1] <- [1] after.
.else
rjmp .                                           ; [2] <- [2] after.
.endif

; (8)
nop                                              ; [1] \_ [2] before.
rol r_font_row                                   ; [1] /
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_row ; [1]

.endif

pop r0                                           ; [2] (Restore character under cursor part 1).

; Blank rest of scanline.
st Y,r0                                                  ; [2] (Restore character under cursor part 2).
out _SFR_IO_ADDR(TVTEXT_PICTURE_PORT),r_font_invert_mask ; [1]

active_display_skip_scanline:

pop XH
pop XL
pop r_font_invert_mask
pop r_font_row
pop r_characters_left
pop r_font_data_h
pop r_font_data_l
pop r1
pop r0

jmp exit_timer1_compa_vect_no_store

A me per come sta andando mi sembra fattibile, certo aggiustare tutto questo codice sarebbe un problema, qua è spiegato abbastanza però ho poca dimestichezza : http://www.nongnu.org/avr-libc/user-manual/assembler.html
Se a qualcuno interessa aiutare magari posto gli altri file che ho modificato.
Probabilmente a causa del quarzo differente non sarà possibile flashare l'hex su Arduino (semmai con Arduino), ma visto che devo usare altre librerie scritte per l'IDE in questione, mi piacerebbe portare a termine il tutto.
Grazie, grandi come sempre!!
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 328
Posts: 22762
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai provato col comando asm()?
Include una porzione di assembly direttamente nel firmware finale. Però non so come si comporta con tutte quelle etichette, se cioè poi il compilatore sistema tutto per i previsti salti.
Logged


0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non credo che basti mettere tutto tra parentesi, ogni comando deve essere tra " ", ma devono essere nei posti giusti!!, il codice c'è, devo provare a renderlo digeribile e vedere che succede, secondo me è tutto qua, alla fine è scritto in C per essere flashato su un 168, provato sul 328p l'hex va benissimo, magari creare una versione a 16mhz..
leo sei una garanzia!
Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nella versione 0.22 dell'ide c'è la possibilità di compilare anche codice in asm, però ora non ricordo se l'estensione deve essere .S o .s
prova a cambiare estensione. Sono arrivato a questa conclusione visionando il codice java dell'ide, che si comporta in modo differente se trova un file .c o .cpp o appunto asm. Ora ci sarebbe da vedere il codice java attuale della versione 1.0.
Il file da visionare ha un nome simile a build... non ricordo.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Stavo vedendo proprio quello, ma mannaggia non trovo il file da modificare, dal forum:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1222355444
I am using .S assembler files in my core. follower is right, you have to modify you IDE.
A first step is to find this line in Target.java:
if (files.endsWith(".c") || files.endsWith(".cpp"))
and replace it with this line:
if (files.endsWith(".S") || files.endsWith(".c") || files.endsWith(".cpp"))
and then you have to modify the Compiler.java and get the .S files into the build process.
I have a modified Arduino IDE that can compile the assembler files, I will try to create a patch if you are still interested.

sarebbe l'ideale, ma il file Target.java non lo trovo..
Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quel post è cosa vecchia, tanto che io nel 2008 non sapevo dell'esistenza di una board Arduino.
Posso assicurarti che la versione 0.22 ha già codice simile a quello che si vede a quel link, però nellla nuova versione dell'ide potrebbero aver stravolto tutto. Comunque anche nella versione 0.22 ci è voluto tanto per trovare i file giusti da esaminare, forse a causa dei meandri di cartelle e sotto cartelle che bisogna navigare.

Io non posso guardare il codice del nuovo IDE perchè non ho i sorgenti in locale, quindi dovrei scaricare e andare a caccia di file e la mia allergia nei confronti di java non è scomparsa.

Certo che se nella nuova versione dell'ide hanno tolto la caratteristica di compilare file asm si è trattato di un errore, per questo penso proprio che sia prevista la possibilità, magari non apre file .S ma se il file è presente nella dir di progetto lo compila.

Appena trovi qualcosa posta che commentiamo.

Ciao e...... buona caccia!

Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Mauro, volevo chiederti, magari mi sono perso io qualche pezzo, questi file Target, Compiler dovrebbero essere comunque in una sottocartella della IDE Arduino-00XX ??
Io non li trovo proprio, ho esaminato cartella per cartella la 0022 e la 0023 e non ci sono, tu hai parlato di sorgenti, sono fuori strada?
Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si sei un pò fuori strada se vuoi trovare quei file nella distribuzione binaria dell'ide.
Quindi devi scaricare il pacchetto sources dell'ide e naviagare nelle cartelle per trovare qui file, ma nota che nella versione uno quei file potrbbero chiamarsi diversamente.

Nella versione (credo 22 o 23, non lo so perchè lo scaricate dal repo con git) io trovo quei file in questo percorso:
arduino-Arduino-4c26e07/app/src/processing/app/debug

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie ci ero arrivato anche io, adesso sono al lavoro col cellulare, domani scarico i sorgenti, quello è l'ultimo tentativo, inserire tutto quell'assembly inline a patto che venga compilato è troppo difficile per me, luminair (versione mod dell'ide che accetta file .S) crasha apena avviato.
Grazie dell'interessamento comunque, ci aggiorniamo, ciao!
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi qua, ho scaricato i sorgenti, trovato i files da modificare, ora, scusate la domanda, quale è il file da compilare?? ci capisco veramente troppo poco di java..
Abbiate pazienza!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A giudicare da
[Arduino src]/app/src/processing/app/debug/Compiler.java : 131
sembrerebbe che l'IDE attuale sia capace di compilare file asm con restrizione .S

Spulciando il change log / history su git
https://github.com/arduino/Arduino/commit/048143f3d5b61544811634243902fcc74ab0d845
pare che la patch sia stata applicata nel 2009...

Puoi postare l'output di compilazione dell'IDE?
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi, credo di esserci, o quasi..
Per arrivare a questo punto ho dovuto mettere il file .h della chiamata esterna e il file .S contenente assembly nella cartella library/driver, il resto della libreria è nella cartella dello sketch, grazie per avermi schiarito un po' le idee, tra le altre avevo confuso la possibilità di aprire un tab .S (non possibile) con l'effettiva compilazione dello stesso in caso di chiamata, comunque, ricevo una miriade di errori, ma almeno ho capito che prova a compilare.
Gli errori:[cancellato]
Il file l' ho postato sopra se volete dare un occhiata.
Grazie.
« Last Edit: August 07, 2012, 04:34:19 pm by Francesco_MIRM » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 144
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate, ma stavo usando una versione del file che non includeva il file di configurazione, questi gli errori:

C:\Users\Francesco\Documents\Arduino\libraries\driver\driver.S: Assembler messages:
C:\Users\Francesco\Documents\Arduino\libraries\driver\driver.S:38: Error: register name or number from 0 to 31 required
C:\Users\Francesco\Documents\Arduino\libraries\driver\driver.S:148: Error: constant value required
C:\Users\Francesco\Documents\Arduino\libraries\driver\driver.S:189: Error: constant value required
C:\Users\Francesco\Documents\Arduino\libraries\driver\driver.S:191: Error: constant value required
C:\Users\Francesco\Documents\Arduino\libraries\driver\driver.S:289: Error: constant value required

 smiley
Logged

Pages: [1] 2   Go Up
Jump to: