Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Adattamento esempio CDC serial emulator a nuovo PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Adattamento esempio CDC serial emulator a nuovo PIC

Messaggioda Foto Utentedemos81 » 25 ott 2015, 17:42

Salve a tutti,
questo weekend sto provando (ahimè senza successo) ad impiegare il framework USB offerto dalla Microchip per emulare una porta seriale con un PIC .
l'ambiente di sviluppo è MPLABX con compilatore XC8 e ho deciso di partire dall'esempio denominato CDC_serial_emulator presente come esempio nella libreria e funzionante per un PIC 18F14K50 per adattarlo a un PIC18F4550.

Ho duplicato tutti i file in apposita cartella ed ho iniziato a collegare a un nuovo progetto i file header di riferimento per USB e classe CDC.
Una volta finito di includere tutti gli header che mi apparivano necessari ho provato la compilazione con una funzione main vuota (senza righe di codice o comandi) e sembrava andar bene ...
Ho fatto questo passo perché ho notato che i file header son gestiti un po' come scatole cinesi nelle librerie Microchip.

successivamente ho provato un esempio di codice molto banale che riporto di seguito:

Codice: Seleziona tutto
#include <xc.h>
#include "USB.h"
#include "usb_device.h"
#include "usb_device_cdc.h"

void main(void) {
if(!USBUSARTIsTxTrfReady()){
  putsUSBUSART("hello");
    }
    return;
}

Sfortunatamente a questo punto va tutto in malora e ottengo il seguente errore di compilazione

Codice: Seleziona tutto
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
make  -f nbproject/Makefile-default.mk dist/default/debug/Emularore_USB_Seriale.X.debug.elf
make[2]: Entering directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
"C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1  --chip=18F14K50 -Q -G  -D__DEBUG=1 --debugger=none  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"    -obuild/default/debug/main.p1  main.c
main.c:16: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
"C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe"  --chip=18F14K50 -G -mdist/default/debug/Emularore_USB_Seriale.X.debug.map  -D__DEBUG=1 --debugger=none  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s"       --memorysummary dist/default/debug/memoryfile.xml -odist/default/debug/Emularore_USB_Seriale.X.debug.elf  build/default/debug/main.p1     
Microchip MPLAB XC8 C Compiler (Free Mode) V1.35
Build date: Jul  7 2015
Part Support Version: 1.35
Copyright (C) 2015 Microchip Technology Inc.
License type: Node Configuration

:: warning: (1273) Omniscient Code Generation not available in Free mode
[b]:0: error: (500) undefined symbols:[/b]
   _cdc_trf_state(dist/default/debug\Emularore_USB_Seriale.X.debug.obj) _putsUSBUSART(dist/default/debug\Emularore_USB_Seriale.X.debug.obj)
(908) exit status = 1
[b]nbproject/Makefile-default.mk:113: recipe for target 'dist/default/debug/Emularore_USB_Seriale.X.debug.elf' failed[/b]
make[2]: Leaving directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
[b]nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed[/b]
make[1]: Leaving directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
[b]nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed[/b]
[i]make[2]: *** [dist/default/debug/Emularore_USB_Seriale.X.debug.elf] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)[/i]


chiedo a chi possa aiutarmi un eventuale chiarimento sulla natura degli errori, e inoltre se conoscete una guida
valida alla creazione di un proprio progetto tipo per l'uso della classe CDC.
Ho già letto la AN956 della Microchip ma è poco esaustiva per quel che riguarda le impostazioni (inoltre credo che faccia riferimento a vecchie versioni di librerie Microchip).
Avatar utente
Foto Utentedemos81
1.479 1 6 8
Expert EY
Expert EY
 
Messaggi: 601
Iscritto il: 16 mar 2009, 20:56

0
voti

[2] Re: Adattamento esempio CDC serial emulator a nuovo PIC

Messaggioda Foto Utentedemos81 » 25 ott 2015, 17:44

Scusate, ripubblico l'errore del compilatore con la formattazione visibile in maniera più chiara.

make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
make -f nbproject/Makefile-default.mk dist/default/debug/Emularore_USB_Seriale.X.debug.elf
make[2]: Entering directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
"C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --pass1 --chip=18F14K50 -Q -G -D__DEBUG=1 --debugger=none --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s" -obuild/default/debug/main.p1 main.c
main.c:16: warning: (359) illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
"C:\Program Files (x86)\Microchip\xc8\v1.35\bin\xc8.exe" --chip=18F14K50 -G -mdist/default/debug/Emularore_USB_Seriale.X.debug.map -D__DEBUG=1 --debugger=none --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,-plib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto:auto "--errformat=%f:%l: error: (%n) %s" "--warnformat=%f:%l: warning: (%n) %s" "--msgformat=%f:%l: advisory: (%n) %s" --memorysummary dist/default/debug/memoryfile.xml -odist/default/debug/Emularore_USB_Seriale.X.debug.elf build/default/debug/main.p1
Microchip MPLAB XC8 C Compiler (Free Mode) V1.35
Build date: Jul 7 2015
Part Support Version: 1.35
Copyright (C) 2015 Microchip Technology Inc.
License type: Node Configuration

:: warning: (1273) Omniscient Code Generation not available in Free mode
:0: error: (500) undefined symbols:
_cdc_trf_state(dist/default/debug\Emularore_USB_Seriale.X.debug.obj) _putsUSBUSART(dist/default/debug\Emularore_USB_Seriale.X.debug.obj)
(908) exit status = 1
nbproject/Makefile-default.mk:113: recipe for target 'dist/default/debug/Emularore_USB_Seriale.X.debug.elf' failed
make[2]: Leaving directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
make[1]: Leaving directory 'C:/PIC/esperimenti/PROGRAMMI IN C/PIC 18F4550/04_emulatore seriale USB/Emularore USB Seriale.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
make[2]: *** [dist/default/debug/Emularore_USB_Seriale.X.debug.elf] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)
Avatar utente
Foto Utentedemos81
1.479 1 6 8
Expert EY
Expert EY
 
Messaggi: 601
Iscritto il: 16 mar 2009, 20:56

0
voti

[3] Re: Adattamento esempio CDC serial emulator a nuovo PIC

Messaggioda Foto Utentebobina » 25 ott 2015, 22:01

Il tuo main è troppo generico devi definire delle funzioni che vengono cercate dal framework prova ad usare il main dell'esempio e poi metterci il tuo codice
Devi includere nel tuo progetto anche i file .C come Microchip/USB/usb_device.c e Microchip/USB/CDC Device Driver/usb_function_cdc.c
La variabile cdc_trf_state è definita dentro usb_function_cdc.c
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[4] Re: Adattamento esempio CDC serial emulator a nuovo PIC

Messaggioda Foto Utentedemos81 » 26 ott 2015, 9:35

Ciao e grazie per la risposta,
aggiungo alcune info al lavoro che ho fatto: i file .C usb_device.c e USB/CDC Device Driver usb_function_cdc.c sono inclusi nella cartella del progetto source.
In pratica ho incluso un po' tutto il framework USB in maniera massiccia.
Per quanto riguarda il tuo consiglio sul fatto che il main sia troppo generico c'è qualcosa che non capisco:
le funzioni che richiamo fan parte del framework in teoria, da quel che leggevo sulle application note e sul file help_mla_usb.pdf Microchip pensavo che fossero direttamente richiamabili. non è cosi?

Insomma mi trovo un po' spaesato perché dalla documentazione sembava un framework molto plug & play e invece mi sa che non è proprio così..

Quel che mi consigli è copiare un intero progetto demo e iniziare a cancellare i file header e impostazioni che non mi interessano fino a ridurlo all'osso? (es: file tipo leds.h, ADC.h eccetera)
Avatar utente
Foto Utentedemos81
1.479 1 6 8
Expert EY
Expert EY
 
Messaggi: 601
Iscritto il: 16 mar 2009, 20:56

0
voti

[5] Re: Adattamento esempio CDC serial emulator a nuovo PIC

Messaggioda Foto Utentebobina » 26 ott 2015, 23:33

Non tutto il progetto ma solo il main.c. Se vedi l'esempio "Device - CDC - Serial Emulator", nel main.c ci sono funzioni come USER_USB_CALLBACK_EVENT_HANDLER che richiamano altre funzioni, a seconda dell'evento USB che si è scatenato, senza di questo non riuscirai mai a fare l'inizializzazione.
Inoltre nel tuo main manca anche l'invocazione della funzione USBDeviceInit(), insomma non sarà Plug and Play ma non puoi pretendere che ti legga nel pensiero! Forse eri abituato a MikroC dove con un semplice segno di spunta di ritrovavi una libreria inclusa nel progetto, qui non è così per alcuni sarà per fortuna per molti per sfortuna. Per me è per fortuna almeno tutto il codice che finisce dentro il micro lo puoi vedere ed eventualmente modificare.
Hai messo gli include path nel progetto?
L'errore che non riconosce il simbolo potrebbe essere dato anche dalla mancanza di qualche header, anche se in realtà ci doveva essere un altro errore.
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[6] Re: Adattamento esempio CDC serial emulator a nuovo PIC

Messaggioda Foto Utentedemos81 » 27 ott 2015, 9:25

..intanto ancora grazie per le info. :ok:
gli include path li ho inseriti tutti nelle impostazioni generali delle proprietà di progetto di MPLABX.
A questo punto stasera riparto da zero e ricomincio seguendo le tue indicazioni.
In tutta sincerità voglio approfondire la via prospettata in MPLAB proprio per imparare un po' di più (non voglio qualcosa del tipo clicchi, includi e prendi tutto a scatola chiusa).
Avatar utente
Foto Utentedemos81
1.479 1 6 8
Expert EY
Expert EY
 
Messaggi: 601
Iscritto il: 16 mar 2009, 20:56


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti