Ciao! avrei un problema: è possibile compilare una funzione .C con Scilab?
io ho una funzione.c che legge da un file tramite fread (il nome del file da leggere devo passarlo da Scilab alla funzione C). In esecuzione la funzione C scrive in un altro file chiamato output.txt. Infine la funzione Scilab deve andare a leggere il file output.txt. Come faccio a fare tutto ciò?
1) passare parametro (nome file) da scilab a C
2) compilare funzione C (come se attraverso prompt digitassi gcc funzione.c) e creazione del file .exe
3)collegamento Scilab file .exe così creato
Ho già letto il manuale e l'help di Scilab.
Thx !
Traduzione Matlab-Scilab
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[31] Re: Traduzione Matlab-Scilab
0
voti
[32] Re: Traduzione Matlab-Scilab
fabrileroy ha scritto:è possibile compilare una funzione .C con Scilab?
Detta così non ha senso, Scilab non è un compilatore C.
E' possibile caricare una libreria dinamica da Scilab e chiamare una qualsiasi funzione pubblica, questa libreria può essere scritta con un qualsiasi linguaggio che integra API di Scilab, ad esempio il C.
Nei sorgenti di Scilab ci sono gli esempi. La documentazione spiega i vari passaggi:
http://wiki.scilab.org/howto/Create_a_toolbox
API di Scilab:
http://tinyurl.com/654qlly
Anche in altri siti sono presenti esempi di moduli esterni per Scilab, basta cercare:
http://jblopen.com/node/18
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[33] Re: Traduzione Matlab-Scilab
quindi mi stai dicendo che non c'è un modo più rapido e intuitivo per legare il C a Scilab? Ottimo!!! guarderò la documentazione, Thx!
0
voti
[34] Re: Traduzione Matlab-Scilab
fabrileroy ha scritto:quindi mi stai dicendo che non c'è un modo più rapido e intuitivo per legare il C a Scilab
Mica ho detto questo, per me è rapido e intuito (parlo da programmatore). E' possibile utilizzare altri linguaggi non solo il C per scrivere moduli esterni. Ci sono metodi per generare dal codice di Scilab un modulo binario nativo. E' possibile da programmi esterni richiamare Scilab. E' tutto scritto nella documentazione basta leggerla con attenzione.
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[35] Re: Traduzione Matlab-Scilab
ciao, ho letto le cose che mi hai linkato, volevo chiederti una cosa inerente al seguente link:
http://jblopen.com/node/18
ho seguito le istruzioni e il risultato è stato quello che mi aspettavo e che volevo fare.
Vorrei apportare però una modifica:
nel link postato la compilazione mediante la seguente stringa: gcc -fPIC -O2 -shared -o libfract.so fract.c
viene inserita manualmente nel compilatore (l'utente la digita), io vorrei invece che fosse Scilab a inviare la stringa al prompt per la compilazione, è fattibile una cosa del genere?
http://jblopen.com/node/18
ho seguito le istruzioni e il risultato è stato quello che mi aspettavo e che volevo fare.
Vorrei apportare però una modifica:
nel link postato la compilazione mediante la seguente stringa: gcc -fPIC -O2 -shared -o libfract.so fract.c
viene inserita manualmente nel compilatore (l'utente la digita), io vorrei invece che fosse Scilab a inviare la stringa al prompt per la compilazione, è fattibile una cosa del genere?
1
voti
[36] Re: Traduzione Matlab-Scilab
fabrileroy ha scritto:compilazione mediante la seguente stringa: gcc -fPIC -O2 -shared -o libfract.so fract.c
...
io vorrei invece che fosse Scilab a inviare la stringa al prompt per la compilazione
Si puoi farlo, la solita documentazione ufficiale descrive come, puoi usare la funzione "host" ma non è la sola:
http://help.scilab.org/docs/5.3.0/en_US/host.html
Francamente io non lo fai mai, di solito per compilare i programmi si usa il comando "make" con i Makefile, ad esempio per compilare il modulo che hai segnalato io ho scritto il seguente Makefile:
Codice: Seleziona tutto
CC=gcc
CFLAGS=-fPIC -O2
all: libfract.so
libfract.so: fract.o
$(LD) -shared -o $@ $?
fract.o: fract.c
clean:
-rm libfract.so core *.o *~è per me la scelta migliore per compilare programmi anche molto complessi (insieme a autoconf e automake).
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[37] Re: Traduzione Matlab-Scilab
Ti ringrazio per il suggerimento, alla fine ho usato "host" visto che la funzione non era troppo articolata.
Non capisco perché quando faccio il call da scilab passando come parametro la stringa
"C:/Documents and Settings/User/Desktop/San Raffaele/Scilab/spm/nLaragione_A_MBqcc_f.hdr" e riprendendola tramite un puntatore (vedi allegato) Scilab si chiude!
Io faccio:
compilo la funzione C nel prompt con il comando gcc -fPIC -O2 -shared -o liborigin.so origin.c (oppure usando "host" in Scilab);
linko a scilab: so1 = link('liborigin.so', 'read', 'c' );
quando poi faccio il call: call('read', P, 1, 'c'); con P="C:/Documents and Settings/User/Desktop/San Raffaele/Scilab/spm/nLaragione_A_MBqcc_f.hdr"
Scilab si chiude e naturalmente non esegue la call
Non capisco perché quando faccio il call da scilab passando come parametro la stringa
"C:/Documents and Settings/User/Desktop/San Raffaele/Scilab/spm/nLaragione_A_MBqcc_f.hdr" e riprendendola tramite un puntatore (vedi allegato) Scilab si chiude!
Io faccio:
compilo la funzione C nel prompt con il comando gcc -fPIC -O2 -shared -o liborigin.so origin.c (oppure usando "host" in Scilab);
linko a scilab: so1 = link('liborigin.so', 'read', 'c' );
quando poi faccio il call: call('read', P, 1, 'c'); con P="C:/Documents and Settings/User/Desktop/San Raffaele/Scilab/spm/nLaragione_A_MBqcc_f.hdr"
Scilab si chiude e naturalmente non esegue la call
- Allegati
-
nLaragione_A_MBqcc_f.zip- (786 Byte) Scaricato 142 volte
0
voti
[38] Re: Traduzione Matlab-Scilab
Hai chiamato la funzione C col nome "read", questa funziona fa' parte delle funzioni base della libreria C fin dai tempi del primo Unix System V, quindi è meglio non usare mai nomi di funzioni presenti nella libc.
Utilizzi la funzione "exit" per uscire, può andare bene per un programma stand-one ma per una libreria dinamica di solito è meglio non usarla, visto che chiude immediatamente il programma in caso d'errore. Di solito è meglio un semplice "return".
Da quello che ho provato una funziona come l'hai concepita non funziona, serve almeno un ritorno altrimenti Scilab non genera bene la chiamata, qualcosa del tipo in C:
per poi chiamarla da Scilab con:
Scilab può generare in automatico da un sorgente C il Makefile per compilarlo è il wrapper per usare la libreria dentro Scilab con la funzione "ilib_for_link":
http://help.scilab.org/docs/5.3.0/en_US ... _link.html
Utilizzi la funzione "exit" per uscire, può andare bene per un programma stand-one ma per una libreria dinamica di solito è meglio non usarla, visto che chiude immediatamente il programma in caso d'errore. Di solito è meglio un semplice "return".
Da quello che ho provato una funziona come l'hai concepita non funziona, serve almeno un ritorno altrimenti Scilab non genera bene la chiamata, qualcosa del tipo in C:
Codice: Seleziona tutto
void myread(int y[], char *file)
{
*y = 0;
}
per poi chiamarla da Scilab con:
Codice: Seleziona tutto
P='nome_file';
call('myread', P, 2, "c", "out", [1,1], 1, "i");
Scilab può generare in automatico da un sorgente C il Makefile per compilarlo è il wrapper per usare la libreria dentro Scilab con la funzione "ilib_for_link":
http://help.scilab.org/docs/5.3.0/en_US ... _link.html
-
fabrileroy
10 3 - New entry

- Messaggi: 54
- Iscritto il: 1 feb 2011, 13:22
0
voti
[39] Re: Traduzione Matlab-Scilab
Ciao, secondo te se ho che V:
V =
fname: ""
dim: [0,0,0,0]
mat: [4x4 constant]
pinfo: [3x1 constant]
descrip: "spm - 3D normalized - conv (8,8,8)"
v:
fname: "C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm\nLaragione_A_MBqcc_f.img"
dim: [79,95,68,4]
mat: [4x4 constant]
pinfo: [3x1 constant]
descrip: "spm - 3D normalized - conv (8,8,8)"
f:
f =
!fname !
! !
!dim !
! !
!mat !
! !
!pinfo !
! !
!descrip !
qual è l'equivalente Scilab di questa espressione di Matlab:
ho provato a vedere sul manual ma sinceramente non ho capito come potrei convertirla
V =
fname: ""
dim: [0,0,0,0]
mat: [4x4 constant]
pinfo: [3x1 constant]
descrip: "spm - 3D normalized - conv (8,8,8)"
v:
fname: "C:\Documents and Settings\User\Desktop\San Raffaele\Scilab\spm\nLaragione_A_MBqcc_f.img"
dim: [79,95,68,4]
mat: [4x4 constant]
pinfo: [3x1 constant]
descrip: "spm - 3D normalized - conv (8,8,8)"
f:
f =
!fname !
! !
!dim !
! !
!mat !
! !
!pinfo !
! !
!descrip !
qual è l'equivalente Scilab di questa espressione di Matlab:
Codice: Seleziona tutto
for j=1:size(f,1),
eval(['V(i).' f{j} ' = v.' f{j} ';']);
end; ho provato a vedere sul manual ma sinceramente non ho capito come potrei convertirla
0
voti
[40] Re: Traduzione Matlab-Scilab
fabrileroy ha scritto:Codice: Seleziona tutto
for j=1:size(f,1),
eval(['V(i).' f{j} ' = v.' f{j} ';']);
end;
La documentazione di Scilab contiene l'equivalenza tra le funzioni di Matlab a Scilab (se possibile), "eval" di Matlab equivale al "evstr" di Scilab:
http://www.scilab.org/product/dic-mat-sci/eval.html

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

