Documente Academic
Documente Profesional
Documente Cultură
LogicielTempsrel
SylvainMONTAGNY
sylvain.montagny@univsmb.fr
Btimentchablais,bureau13
0479758686
TP1
LogicielTempsrel
DSPTMS320C5416
Objectif:Crationdunprojetsimple,monotchesurplateformeDSP.
Fichiermisdisposition(MoodleScienceBourget)
Fichierdecommande:dsp.cmd
Fichierdelibrairie:rts.lib
Crerunnouveauprojetdsp.pjtdanslerpertoiredevotrechoix.Expliquez:
ProjectName:....................................................
Location:.......................................................
ProjectType:....
Target:
Aprscration,expliquez:
DependentProjects:.
Documents:
|1
DSP/BIOSConfig:...................................................
GeneratedFiles:..
Include:..
Librairies:..
Sources:....
Note : Tous les fichiers que vous rajouterez au projet devront se trouver dans votre
rpertoiredetravail.
2 Ralisation du code
2.1 Etape 1
Crerunnouveaufichiersourcedsp.c,rentrerlecodesuivant(quinesertrien!!!),et
ajouterlefichierauprojet.(ClicdroitsurSources>AddFilestoproject>dsp.c)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
voidmain(void)
{
inta=2,b=3;
a=2;
b=3;
a=b+10;
b=a+1;
while(1);
}
Question2:
Expliquerlesactionsde:(Help>Contents)
CompileFile:....................................................
IncrementalBuild:................................................
|2
RebuildAll:.
2.2 Etape 2
Compilerleprojet.VousallezobtenirleWarningsuivant.
>>Warning:TheprojecthasnocmdfilewhiletheTextLinkerisselected:
Rajouterlefichierdsp.cmd
Question3:
Questcequunfichierdecommandedefaonprcise.
....
>>warning:entrypointsymbol_c_int00undefined(Help>Content:_c_int00)
CewarningestdaufaitquequilmanqueunelibrairiespcifiqueauDSPquenousutilisons.En
effet,lesfonctionsCstandardsnepeuventpastreconnu(printf(),etc).Deplus,lepointdentre
duprogrammemain()doittreprcis.Lalibrairyrts.lib(RunTimeSupportLibrary)doitdonctre
rajout.
>>warning:creating.stacksectionwithdefaultsizeof400(hex)words.
Question4:
Aquellezonemmoire,cewarningfaitilrfrence?
........................................................
Spcifiervousmmesacapacit:Project>BuildOptions>Linker>StackSize>0x400.
DEBUG:..
|3
RELEASE:....
ModifierlecodeparlecodesuivantetlecompilerenmodeDEBUG.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include<stdio.h>
voidmain(void)
{
inta=2,b=3;
a=2;
b=3;
a=b+10;
b=a+1;
while(1){
if(a==2){
printf("a=2!!\n");
}
else{
printf("adifferentde2\n");
}
}
}
>>warning:creating.sysmemsectionwithdefaultsizeof400(hex)words.
Question5:
Aquellezonemmoire,cewarningfaitilrfrence?(Help>Contents>sysmen)
......................................................
Spcifiervousmmesacapacit:Project>BuildOptions>Linker>HeapSize>0x400.
|4
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
voidcalc(void);
voidmain(void)
{
inta=2,b=3;
a=2;
b=3;
a=b+10;
b=a+1;
while(1){
if(a==2){
calc();
}
else{
calc();
}
}
}
voidcalc(void){
intc=0,d=0;
c=d+12;
d++;
d=c+12;
}
Raliserunprojetmultifichiersendportantlafonctioncalc()dansunautrefichier.
ExcuterlecodeprcdentsurlacibleDSPetexpliquerlesmthodesdexcutionpaspas
singlestepetstepoverdanslesdeuxmodes(modesourceetmodeassembleur).
Faitesdiffrentsessaispourbiencomprendrelefonctionnement.
Singlestep:
StepOver:..
|5
5 Directives pr-processeur
5.1 #include
Question6:
Questcequunedirectiveprprocesseur?
.........................................................
Allervoirlefichierstdio.h:C:\CCStudio_v3.1\c5400\cgtools\include.Onretrouvedans
cefichiernonpaslecodemachinedesfonctionsmaisseulementleursdclarations.Ceci
nous permet donc de les utiliser. Au cours de la compilation, les codes machines des
fonctionsutilisesserontassemblsavecnotrefichiercompilpourcrerlexcutable.
Ilexistedeuxfaonsdinclureunfichierlaidelaprimitive#include
#include<xxx.h>:Silechemindaccsestconnuparlecompilateur.
#includec:/./xxx.c:Lorsquevoussouhaitezspcifiervousmmelechemindaccs.
|6
TP2
LogicielTempsrel
DSPTMS320C5416
Objectif:UtilisationdeDSPBIOS,utilisationdesfonctionsduBoardSupportLibrary(BSL)etduChip
SupportLibrary(CSL).
Fichiermisdisposition(Moodle)
FichierdaideCSL:ChipSupportLibrary
FichierdaideBSL:BoardSupportLibrary
Fichierdeconfigurationconf_MCBSP
Include&libraries:
DSK5416.h
dsk5416_led.h
dsk5416_pcm3002.h
dsk5416f.lib
1 DSP/BIOS
LirelaidedeDSPBIOSsurlechapitreWhatisDSP/BIOS?
Question1:
ExpliquercequestDSP/BIOSenprcisantenquelquesmotslescaractristiquesqui
vousparaissentlespluspertinentes.
.........................................................
.........................................................
|1
Ouvrirlefichierdeconfigurationetfaiteuntourdetouslesmodulesquisontrpertoris.Alleraussi
voirlesfichiersgnrs(GeneratedFiles)aprslacompilation.
Chargervotrecodeenmmoire:File>LoadProgram
Note:Afindassocierlacompilationetlechargementducodeenmmoire,vouspouvez
modifierlesoptionsdeCCS:Option>Customize>Cochez:LoadProgramafterBuild
Question2:
Pourquoinatonpaseubesoindefournirdefichierdecommande(*.cmd)?
..........................................................
1. Utilisation du BSL
Reprer les diffrents groupes de fonctions disponibles dans laide (5416DSK>Board
SupportLibrary),etexpliquerlerleduBSL.
..........................................................
..........................................................
|2
FairelinitialisationdespriphriquesdelacarteDSK(BoardSetup)enutilisantlafonction
adquate. A la place de la librairie dsk5416.lib, vous utiliserez la librairie dsk5416f.lib
fournie.
LacarteDSK5416possde4LEDset4switchs,quipermettentlutilisateurdinteragiravecleDSP.
Raliserunprogrammequifaitclignoteruneled.Vousraliserezlatemporisationlaide
duncompteur(de01000000,bouclefor)pourvoirleclignotement.Vousutiliserezles
fonctionsduBSLpourlagestiondesLEDs.
Laprioritdecettetche
LafonctionCassociecettetche(nomdelafonctionprcddun_/underscore)
quevouscoderezdansleprogrammesource.
NotrefonctionsappelleraBlink0(),donc_Blink0danslefichierdeconfiguration.
Lecodeassocivotretcheseralasuivante:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
voidBlink0()
{
intdelay=500;//SetdelaybetweenLEDtransitions
while(1)
{
/*TurntheLEDon*/
DSK5416_LED_on(0);
TSK_sleep(delay);
/*TurntheLEDoff*/
DSK5416_LED_off(0);
TSK_sleep(delay);
}
}
Raliserdelammemanireunesecondetachetask1permettantdefaireclignoterla
LED1avecuntempsdeclignotementde1s.
DSP/BIOSRealtime,.MultitaskKernel.NousvenonsdedmontrerlaspectMultitask
Kernel,parlasuite,nousnousattacheronslapartieRealtime.
|3
Faireunschmatemporelreprsentantletempsenabscisseetlestchesquisexcutent
enordonne(main,TSK_idle,task0,task1).Pourchaquetchevousutiliserezdescouleurs
diffrentessuivantlestats(quevousprciserez)decelleci.
ExpliquerlerleduCSL:
............................................................
.....
Question4:
QuelleestladiffrenceentreleCSLetleBSL?
...........................................................
..........................................................
Crerunnouveauprojetdsp2.pjtavecunnouveaufichierdeconfigurationdsp2.cdb.
Raliserlacompilationcompltedevotreprojet.
|4
ChipSupportLibray>MCBSP>MCBSPconfigurationmanager>mcbspCfg0>Clicdroit>Copy.
Dansvotrefichierdeconfiguration:
ChipSupportLibray>MCBSP>MCBSPconfigurationmanager>mcbspCfg0>Clicdroit>Paste.
Editer les proprits du module McBSP2 (MCBSP>MCBSP ressource Manager>McBSP2).
Danscemodule,cocherlesdeuxcasesetrentrerlaconfigurationsuivante:
SpecifyHandleName:C54XX_DMA_MCBSP_hMcbsp
Preinitialize:mcbspCfg0(votrefichierdeconfigurationquevousvenezdecrer)
Remarque: Nous utilisons le MCBSP2, car cest le numro 2 qui a t connect au Codec audio
(convertisseurAN/NA:PCM3200).AinsilobjectifestderaliserundialogueavecceCodec.
Question5:
Quelles sont les deux dclarations qui ont t rajoutes au fichier dspcfg.haprs
compilationdevotreprojet?
........................................................
Question6:
EnvousrfrantlaidesurleCSLetplusparticulirementlintroduction,direce
questunhandleenprogrammationsystme?
Handle:.
Question7:
Quelleestleffetdelidentificateurexternsurladclarationdunevariable?
Extern:.....................................................
Note:Sinousnavionspasutilislaconfigurationstatiquedanslefichierdeconfiguration
de DSP/BIOS, nous aurions pu le faire de faon dynamique, pendant lexcution du
programmeaveclesfonctions:
MCBSP_open() OpensaMcBSPport
MCBSP_start()
Startatransmitand/orreceiveforaMCBSPport
Question8:
Grcelaide,expliquerlerledelafonctionMCBSP_open()etvaliderlefaitquelle
fassebienlammechosequecequenousavonsconfigurstatiquementdanslefichierdsp.cdb.
|5
........................................................
DSK5416_PCM3002_Configconfig={
0x010d,//SetUpReg0LeftchannelDACattenuation
0x010d,//SetUpReg1RightchannelDACattenuation
0x0000,//SetUpReg2Variousctle.g.powerdownmodes
0x0000//SetUpReg3Codecdataformatcontrol
};
Toute la gestion de cette application sera ralise dans une tche dont la fonction sera void
UserTask(void).
Combienfautilcalculerdchantillondusinusafindobtenirunefrquencede1khz.
Faitelecalculentierdeschantillonsdunsinusdamplitude32766,etremplissezuntableau
appel:intsinetable[SINE_TABLE_SIZE].
Attentionlaconversiondetypeentrelesvariablesdoubledelafonctionsinusetvotre
tableaudentier.
Affichezlegraphiquedevotresinus(View>Graph>Time/Frequency)ladressesinetable,
pourvalidercettepartie.
|6
Utiliserlesfonctionsdcrituredeschantillonsdevotresinusodeaucodecaudio.
Faire une mesure loscilloscope de la sortie du codec audio. Relever lamplitude et la
priodedusignal.
Figure1:Schmadujackaudiostro
Quesepassetiletpourquoi?Trouvezunesolutionceproblme.
|7
TP3
LogicielTempsrel
DSPTMS320C5416
Objectifs:Mesuredutempsdexcutiondestchesetfonctions
1 Profiling
ReprendreetfairefonctionnerleprojetduTPprcdent.
Si cela na pas dj t ralis, vous ferez une fonction simple (boucle for) qui permet
dinitialiserzroletableaudesinusavantleremplissagedeceluici:
voidreset_sinus_tab(void);
Lobjectif est de connatre le nombre de cycles que le processeur met pour excuter cette
initialisation.PourcelanousallonsutiliserunemthodeappeleProfing.Cettemthodenefaitpas
partieintgrantedunoyauDSP/BIOS.LoutilestseulementimplmentdansCCS.Voicilextraitde
ladocumentationprsentantleprofiling.
When you run a program to generate profile data, resume and halt breakpoints are set at the
beginningandendofeachprofilerange.Whentheprogramcounter(PC)encounterstheresume
breakpoint, the profiler obtains the value of the profile clock. When the PC encounters the halt
breakpoint,theprofileragainobtainsthevalueoftheprofileclock.Theprofilerusesthesetwovalues
tocalculatetheprofilingresults.
Question1:
Leprogrammesexcuteratilentempsrel?Pourquoi?
..........................................................
..........................................................
CompilervotreprogrammeetchargerledansleDSP.
|1
InitSineTable()
DSK5416_PCM3002_write16()
Question2:
Donner le nombre de cycle que met la fonction InitSineTable( ) pour sexcuter:
CPU_cycle:incl.total.
Note:Aprsuncertaintempsleprofilingsestop.
1.2.2 Mesuredecertaineszonesduprogramme
PlacezunHelloWorld\nlentredevotrefonctionInitSineTable().
Slectionner la ligne de votre fonction printf ( ): Clicdroit sur la ligne
slectionne>Profile>Range.
VotrelignesajouteauchampRangedelongletRangedelafentreProfiler.Uneicne apparat
gauchesurlalignedevotreprogramme.Vouspouvezaussifairedirectementunglisserdposer
unedeszonesconcernes:Range,FunctionouLoopdelafentreProfiler.
Excutervotreprogramme.
Question3:
Noterlenombredecycleduprintf().SachantqueleDSPunefrquencede160
Mhz,donnerletempsdexcutionduprintf().
Comparerlenombredetempscyclemoyen(CPUCycle:average)pour:
Lafonctionreset_sinus_tab()complte>>function:
|2
Laboucleforralisantlaffectation>>Loop:.
Laligneseuledaffectationzrodesinustable[i]>>Range:.
1.2.3 Rductiondestempsdecycleparoptimisation
Mettreunpointdarrtsurvotrefonctionreset_sinus_tab().Afficherlecodeassembleur
gnr (Clic droit dans lditeur>mixedmode) et faite du pas pas (Debug >
Assembly/SourceStepping>AssemblyStepInto).Vouspouvezaussiutiliserleboutonvert
.
Ouvrezlavisualisationdevotremmoire(View>Memory)ladressedevotretableaude
sinusetregardercommentsontaffecteszrolescasesmmoires.
ModifierlesoptionsdoptimisationdeCCS.Project>BuildOption>OptLevel>Functiono2.
Refaiteslammemanipulationqueprcdemment.
Question4:
tableau?
Quelleinstructionassembleurperformantetutiliseicipourlinitialisationdu
.........................................................
Modifier les options doptimisation de CCS. Project>Build Option>Opt Level > File o3.
Mettre un point darrt lendroit o vous appelez votre fonction reset_sinus_tab( ) et
visualiserlecodeassembleur.
Question5:
Que remarquezvous de spciale pour lappel de la fonction? Comment
linitialisationatellepusefaire?
.........................................................
.........................................................
Faites une mesure de temps de cycle (Profiling) de la fonction printf( ) avec et sans
optimisation.
Question6:
Queremarquezvous?
.........................................................
1.2.4 RductionparutilisationdesoutilsDSP/BIOS
Lesoptionsdoptimisationnedonnentaucunrsultatauniveaudesfonctionstellequeprintf().On
comprendalorsquilestabsolumentindispensabledetrouverunealternativelutilisationdela
fonctionCstandardpourlaffichagedechanedecaractredepuislacibleDSPverslePC.Pourcela
nousallonsutiliserleLOGmodulefourniaveclesAPIDSP/BIOSetconfigurableaveclefichierxxx.cdb
devotreprojet.
Eneffet,lafonctionstandardprintf(),raliseellemmeleformatagedesdonnesetlenvoiversle
PC.C'estdirequelafonctiongrelecommunicationdeboutenbout,cequientermedetemps
daccs(etdoncdecyclemachineutilis)estcatastrophique.Danslecasdelutilisationdumodule
LOG,lacibleDSPsecontentedcriredansunbufferpralablementdclar,etlePChtevalui
mmechercherlesinformationsbrutesdontilabesoin.
|3
Figure1:TransfertdedonneauPCl'aidedumoduleLOG
CrerunnouvelobjetLOGappeltrace(Instrumentation>LOG).Inclurestd.h(obligatoire
pourtoututilisationdesmodules)etlog.h(pourcemoduleenparticulier).
FaiteunessaidelutilisationdelafonctionLOG_printf(),Exemple:
LOG_printf(&trace,helloworld);
Question7:
FaiteunemesuredutempsdexcutiondelafonctionLOG_printf()etcompareravec
lafonctionprintf().
NousnepouvonspasvoirlemessagepourlinstantcarlafonctionLOG_prinf()utilisele
moduleRTDX(inhibprcdemment).
.........................................................
.........................................................
RactiverRTDX:Tools>RTDX>ConfigurationControletactiverlacaseEnableRTDX.
LemessagehelloworldapparatdansleMessageLog:DSP/BIOS>MessageLog.
Sivotreapplicationutilise100%dutempsprocesseur(siparexemplevoustresdansune
boucle infinie en scrutation), il nest pas possible DSP/BIOS davoir le temps de
transmettrevotremessage.Ilestdoncutiledeforcerlepassageenutilisantlafonction
IDL_run()dansvotretcheUserTask().
Relancerlapplication.
|4
TP4
LogicielTempsrel
DSPTMS320C5416
Objectifs:Visualiserlordonnancementdesdiffrentestchesduneapplication.
Fichiermisdisposition(MoodleBourget):
DatasheetTMS320C54x_Archi_vol1
DSPBIOSUserGuide
Fichierdelapplicationannulationdcho
Vous utiliserez le code suivant afin de mettre en vidence la faon dont le systme gre les
diffrentestchesquilexcute.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include"idlecfg.h"//Mettrelenomcorrespondentvotreprojet
#include<std.h>
#include<log.h>
/*
*========main========
*/
Voidmain()
{
LOG_printf(&trace,"helloworld!");
/*fallintoDSP/BIOSidleloop*/
return;
}
|1
Aprslasquencededmarrageetlexcution delafonction main( ),une applicationDSP/BIOS
tombedansunetchedefondappelidleloop.Cettetchesexcutejusqu'quevousarrtiez
votreprogramme.Cettetcheestlamoinsprioritairedevotreapplication.Cestdanscettepartie
quesedroulelesinstructionsdelordonnanceuretlestransfertsdinformationverslePC.Dans
notrecas,cettetchesexcutetouteseulepuisquenousnavonspasdfinidautreprocessus
excuter.Cependant,ellepourraittrepremptepardesinterruptionshardware,ousoftware.
ChargervotrecodeenmmoireduDSPetmettreunpointdarrtsurlaligneduLOG_printf.
Mettre un autre point darrt sur ladresse IDL_F_loop (Debug>Breakpoints> taper
ladresseIDL_F_loop).IDL_F_loopcorrespondlafonctionexcuteparlelatcheIDL.
Aulancementduprogramme,leCPUsarrtesurlepremierpointdarrt.
Question1:
AlaidedeladocumentationduDSPfournie,donnerlerledubitINTM?
..........................................................
Question2:
Quelleestsavaleur(View>Registers>CPURegisters)?
..........................................................
Relancerleprogramme,leCPUsarrtesurleprochainpointdarrt.
Question3:
Quel est la nouvelle valeur du bit INTM (View>Registers>CPU Registers)? Quelle
sourcedinterruptionpeutnousinterrompre?
..........................................................
Question4:
Quesepassetilsionrelancenotreapplicationencoreetencore?Estcelogique
daprslapplicationquenousavonsralisecidessus?
..........................................................
..........................................................
2 Ordonnancement
Nous allons voir comment raliser une application contenant des tches de mme priorit. Ces
tchesauronttoujoursuneprioritplusfaiblequelesinterruptionshard(HWI)ousoft(SWI).La
diffrenceprincipaleentrelestchesTSKetlesinterruptionsmatrielles(HWI)etlogiciel(SWI),est
quunetcheTSKpeutbloquersapropreexcutionpourattendreuncertaintemps,ousimplement
librerleprocesseurparsoucisdquitenverslestchesdemmeprioritquelle.
Essayezdestimerlersultatdelapplicationsuivanteparmilespropositionsquivoussont
fatesTableau2?VrifierensuitevotrerponseenlanantlapplicationsurleDSP.
|2
CrerunprojetDSP/BIOSnommtest_task.pjtdontlefichiersourceestcidessous.Crer
troisnouvellestches.Chacunedestchesexcuteralafonctiontask().
ObjectName Taskfunction
task0
task1
task2
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Taskfunctionargument0
_task
_task
1
_task
2
Tableau1:Listedestches
#include"test_taskcfg.h"
#include<std.h>
#include<log.h>
#include<tsk.h>
#defineNLOOPS5
voidtask(Argid_arg);/*FunctionfortaskscreatedwithConfigTool*/
/*========main========*/
Voidmain()
{
}
/*========task========*/
Voidtask(Argid_arg)
{
Intid=ArgToInt(id_arg);
Inti;
for(i=0;i<NLOOPS;i++){
LOG_printf(&trace,"Loop%d:Task%dWorking",i,id);
TSK_yield();
}
LOG_printf(&trace,"Task%dDONE",id);
}
RponseA
Loop0:Task0Working
Loop1:Task0Working
Loop2:Task0Working
Loop3:Task0Working
Loop4:Task0Working
Task0DONE
Loop0:Task1Working
Loop1:Task1Working
Loop2:Task1Working
Loop3:Task1Working
RponseB
Loop0:Task0Working
Loop0:Task1Working
Loop0:Task2Working
Loop1:Task0Working
Loop1:Task1Working
Loop1:Task2Working
Loop2:Task0Working
Loop2:Task1Working
Loop2:Task2Working
Loop3:Task0Working
RponseC
Loop0:Task0Working
Loop1:Task1Working
Loop2:Task2Working
Task0DONE
Task1DONE
Task2DONE
|3
Loop4:Task1Working
Task1DONE
Loop0:Task2Working
Loop1:Task2Working
Loop2:Task2Working
Loop3:Task2Working
Loop4:Task2Working
Task2DONE
Loop3:Task1Working
Loop3:Task2Working
Loop4:Task0Working
Loop4:Task1Working
Loop4:Task2Working
Task0DONE
Task1DONE
Task2DONE
Tableau2:Propositionsdursultatdel'application
RponseA:Latche0excutelafonctiontask()entirement,puislatche1excutela
fonctiontask()entirement,puislatche2excutelafonctiontask()entirement.
RponseB:Leprogrammeafficheles3messagesdes3tchespourlaboucle0,puisles3
messagespourlaboucle1,etc
Question5:
AquoicorrespondlatcheKNL_swi?Quelestsonrle?(Help>Content)
..........................................................
Ouvrirlefichierdeconfigurationetincrmenterlaprioritdunedestches.Avantdelancer
lapplication,essayerdestimerlenouveaudiagrammedexcutiondestches.
Unetchequivientdtreprempteparuneautretchedeprioritplusimportanteest
positionneenttedelalistedattente.
Donnerlediagrammedexcutiondestchesdelaffirmationprcdente,ensupposantque
vousayezdonnunepriorithautelatche2,quelatche0estencoursdexcutionet
quelatche1estprteaumomentdelapremption.
|4
..........................................................
Question9:
QuellefonctionfautilutiliserdanslemoduleCLKpourrcuprerlesvaleurs
dulowethighresolutiontime?
..........................................................
..........................................................
Complter le projet prcdent avec NLOOPS=3, pour valuer les horaires o les tches
sexcutent.VousafficherezleshorairesdanslemessageLOG(laidedeLOG_printf())de
lafaonsuivante:
Lowresolutiontime:xxxxticks,Taskx
Highresolutiontime:xxxx
Note1:LafonctionLOG_printf()accepteaumaximumdeuxvariablesparamtrables(par
exempledeux%d).
Note2 : Pour faire laffichage de valeur sur 32 bits (long int), nous devons effectuer
laffichageendeuxtemps,dabordlepoidsfaible,puisensuitelepoidsfort.
Note3:Ilpeuttreutiledaugmenterlatailledubuffertrace.
Objettrace>Property>bufflen:512.
Pourcethorodatagedestches,vousdevriezavoirunlowresolutiontimede0.Eneffet,lexcution
delensembledesbouclespourtouteslestchesseraliseenmoinsde1tick.
|5
4 Echo Canceler
4.1 Prsentation
CetteapplicationestunexempledesystmetempsreldonndanslestutorialsdeDSP/BIOS,on
seproposeicidereprendrelaproblmatique.
Lesystmedannulationdchoestcomposdespartiessuivantes:
Undcodeur,quicompresselesdonnesreuesenPCM(PulseCodeModulation)
Unencodeurquiretransmetlesdonnesaprslannulationdcho.
Uneannulationdcho.
Danslafiguresuivante,nousretrouvonslesdiffrentsblocs.Lestempsetlenombredinstruction
sontdonnsapproximativement.
Nous nexpliquons pas ici pourquoi le cahier des charges impose une priode de 2,5 ms pour la
fonctiondannulationdchoet22,5mspourlesfonctionsdudcodeuretdelencodeur.
Afindesefocalisersurlordonnancementdestchessanslacomplexitdelencodeur,dudcodeur
etdelalgorithmedannulationdcho,nousallonstravailleravecdesfonctionspriodiquesquise
dclenchentgrceautimerduDSPtoutesles2,5msou22,5ms(suivantlafonction).
Deplus,lachargeprocesseurdestroistchesserasimuleparunebouclequiconsommedutemps
CPU.CettechargeseraconfigurableencoursdutilisationdevotreapplicationparCCS.
|6
DansDSP/BIOS,ilexiste4typesdethreadsprincipaux(HWI,SWI,TSKetIDL).Deplus,2autrestypes
defonctionsexistent.IlsagitdesfonctionsCLKetPRD.
Dessinerunechelledesprioritsenplaantles4typesdethreadquiexistent,puisrajouter
lesdeuxtypesdefonctionsCLKetPRDdaprsladocumentationproposcidessous.
IlestbienprcisericiquetouteslesfonctionsPRDontlammepriorit.Cetteprioritest
dfinieparlaprioritdePRD_SWI.
Fichierecho.h:Dfinilesconstantesduprogramme
Fonctionmain:Nefaitrien
Fonctioncanceler:Cettefonctionrcuprelespointeurssurlaprochainetrameutilise.
CettefonctionlanceaussicancelerAlgquisimulelachargeprocesseurdelalgorithme
dannulationdcho.
FonctioncancelerAlg:Simulationdelachargeprocesseurpourlannulationdcho.
Fonctionencoder:Cettefonctionrcuprelespointeurssurlaprochainetrameutilise.
CettefonctionlanceaussiencoderAlgquisimulelachargeprocesseurdelalgorithme
dencodage.
FonctionencoderAlg:Simulationdelachargeprocesseurpourlencodage.
Fonctiondecoder:Cettefonctionrcuprelespointeurssurlaprochainetrameutilise.
CettefonctionlanceaussidecoderAlgquisimulelachargeprocesseurdelalgorithme
dencodage.
FonctiondecoderAlg:Simulationdelachargeprocesseurpourledcodage
CrerunprojetDSP/BIOSnommecho.pjt.Intgrerlensembledesfichierssourcesdans
votreprojet.
4.2.1 Misejourdelunitdetemps(ticks)
NousallonschangerlavaleurdelowresolutiontimeduDSP,afinquelunitdemesurenomm
ticksreprsenteuntempsde2500ms,aulieudes1000msseconde(pardefault):
|7
Fichierdeconfiguration>PropritsdeCLKClockManager>Microseconde/Interruption=2500.
NoterqueleregistrePRDdutimerintgrauDSP changeautomatiquement.Lanouvellevaleur
dpenddelavitessedecadencementduDSPrentredanslesparamtres(System>GlobalSettings)
quiesticide160Mhz.
4.2.2 CrationdesobjetsPRD
LesobjetsPRDservent excuterdestchesdefaonrguliredslorsquuneinterruptiondu
timersurvient.Nousallonsdoncutilisercetypedobjetpourlancerlestchesdelencodeur,du
dcodeuretdelannulationdcho.
Crer trois PRD Object avec les noms suivants et les proprits suivantes. Complter le
champresultingperiod(ms)dutableausuivant:
ObjectName
period(ticks)
function
Resultingperiod(ms)
cancelerPrd
_canceler
encoderPrd
decoderPrd
9
9
_encoder
_decoder
ModifierlespropritsduLOG_system(buflen:512,logtype:circular).
4.2.3 Visualisationdelexcutiondestches
Lancerlapplicationetvisualiser:
Lediagrammedordonnancementdestches:
DSP/BIOS>Executiongraph
LachargeduCPU:
DSP/BIOS>LoadGraph
Lesstatistiquessurlesobjetscrs:
DSP/BIOS>Statistiqueview
LafentredesortiedesMessageLog:
DSP/BIOS>MessageLog
VisualiserlavariabledecoderLoad
Clicdroit>Addtowatchwindow
4.2.4 Etudedugraphedexcution:
Question10: CombiendefoisestexcutCancelerPrdpendantuneexcutiondeencoderPrdet
decoderPrd?
..........................................................
Question11:
QuelleestlachargeCPU?
..........................................................
Question12: Lesystmefonctionnetilentempsrelenrapportaucahierdeschargesquenous
noussommesfix?
..........................................................
|8
4.2.5 Etudedesstatistiques:
Lecountfieldcorrespondaunombredefoisoulesobjetssontexcuts.Leschampstotal,Max
etAveragerestentzro.Eneffet,lunitestletickpourlesPRDObject(contrairementauSWI
Objectdontlunitestlecycleinstruction).Sachantquelesfonctionssexcutentenmoinsde1tick,
ellesrestentdonczro.Anoterquenousnavonspasencoreaugmentlachargedesfonctions.
(variabledecoderLoad,encoderLoadetcancelerLoad)
4.2.6 Augmentationdelachargedestches
Dans la watch window, mettre la valeur de decoderLoad 1000. Cela provoque une
excution de 1000 x decoderLoad instruction dans la tche du dcodeur, soit 1000000
cyclesinstructions.
Question13: QuelestlachargeCPU?Lesystmefonctionnetilencoreentempsrel?Expliquer
commentilpeuttrepossibledeperdrelaspecttempsrelduneapplicationetdenepasutiliser
touteslesressourcesduprocesseur.
..........................................................
Question14: QuelleestlavaleurmaximalededecoderLoadquevouspouvezmettreafinquevotre
processeurfonctionneentempsrel?
..........................................................
Question15: Quelleestlavaleurmaximalededecoderloadquevouspouvezmettreafinquevotre
processeur fonctionne 100% de ces capacits CPU? Que se passetil pour laffichage des
messageLoglorsquevotreprocesseuraatteintles100%?Endduirelaprioritdelatche
grantletransfertdesdonnesdelacibleDSPverslePC.
..........................................................
..........................................................
Question16:
Quandsontgreslestchesquiontmanquesleursdeadline?
..........................................................
Question17:
Quefaudraitilchangerafindesolutionnerceproblme.
..........................................................
4.2.7 1recorrectiondelordonnancement
Nous allons maintenant utiliser une tche de type SWI pour lannulation dcho. En effet, dans
lexempleprcdent,lestroistchessexcutentaveclammepriorit.Decefaitlorsquunetche
possde la ressource processeur, elle empche les autres de lobtenir, ce qui provoque le
manquementdunedeadline.
NousallonsdonctoujoursutiliserdestchesPRDpourencoderetdecoder.Enrevanche,pourle
canceler(quiestlatchelapluscritiqueentermedetemps),nousallonsutiliseraussiunetche
PRDmaisquiferalappelunobjetSWI[SWI_post()].
|9
ModifierlespropritsdecancelerPRD:
Function=_SWI_post
arg0=cancelerSwi
CrerunobjetSWI
Name=cancelerSwi
Function=_canceler
Priority=1
Question18:
AquoisertlafonctionPRD_swi?(Help>Content)
..........................................................
Analysedelexcution:
LemodulePRDpilotelesfonctionspriodiquesdelafaonsuivante:
ThePRD_swiSWIispostedonceforaPRDtick.
PRD_swiloopsthroughPRDobjects.
IfitistimeforaPRDobjecttorun:RunthatPRDobjectsfunction.
PRD_swicontinuesloopofallPRDobjects.
Renseignerlesdiffrentsscnariossuivants,vousdeveztrecapabledtablirlacohrence
delexcutionquiseproduit.OnrappellequelaprioritdelafonctionPRD_SWImodifiela
prioritde touteslesfonctionsPRD.decoderLoadseraremiszrodans unpremier
temps.
Scnario
Fonctions
Priorit
PRD_swi
Canceler_Swi
PRD_swi
Droulementdelapplication
Canceler_Swi
PRD_swi
|10
Canceler_Swi
RemettrelachargedudecoderLoad1000.
Question19:
QuelestlachargeCPU?Lesystmefonctionnetilencoreentempsrel?
..........................................................
Avantdelirelesexplicationssuivantes,analyserlecomportementdelapplicationetnoterlendroit
oletempsrelnestpasrespect.
LeproblmeestquetouteslestchesPRDsexcutentaveclemmeniveaudepriorit.Lorsque
lobjetPRDdelannulationdchosouhaitepostersoninterruptionSWI,lafonctiondcodeurest
entraindetourneretnelaissepaslamaincancelerPrd.Eneffet,mmesilafonctioncancelerSwi
possdeunepriorittrslev,ellenepourrapassexcuterpuisquelobjetPRDcancelerPrdnaura
paspuposterlinterruptionsoftware[SWI_post(cancelerSwi)].
NousdevonsdonctrouverunmoyendtablirdesprioritsentrelesdiffrentesfonctionsPRD.
Conclusion: Les actions ralises au sein dune fonction PRD doivent obligatoirement
mettre moins de 1 tick pour sexcuter (puisque dans notre cas la frquence de
cancelerPrdestde1tick).Danslecascontraire,ilfautpasserpardesSWIafindespcifier
desprioritsentreslestchesetainsipermettrecequellepuissesinterrompreentres
elles.
4.2.8 2mecorrectiondelordonnancement
RajouterlesdeuxobjetsSWIsuivant:
ObjectName
function
encoderSwi
_encoder
decoderSwi
_decoder
ModifierlesobjetsPRDencoderPrdetdecoderPrddelafaonsuivante(mmeprocdure
queprcdemmentpourlecasdecancelerPrd).
ObjectName
period(ticks)
function
arg0
encoderPrd
_SWI_post encoderSwi
decoderPrd
_SWI_post decoderSwi
ModifierlesprioritsdesobjetsSWIdelafaonsuivante.
|11
Lorsque vous utilisez un nouveau niveau de priorit, vous pouvez avoir un message
derreursuivant:"Systemstacksize(seeMEM)istoosmalltosupportanewSWIpriority
level.".Eneffet,unniveaudeprioritsupplmentaireamnelesystmesauvegarder
uncontextedenvironnementsupplmentairelorsdunchangementdetche.Ilfautdonc
quevousaugmentiezlavaleurdelastacksystmedevotreapplication:
System>MEM(MemorySectionManager)>clicdroit(Property)>StackSize:0x400
Question20:
AnalyserlesystmeavecdecoderLoad=0,puisavecdecoderLaod=1000.
..........................................................
Question21: AugmenterlachargedudecoderLoadjusqu'arriverperdrelaspecttempsrelde
lapplication.Quelleestlachargeduprocesseurpourlaquellelapplicationnestplustempsrel.
Conclure
..........................................................
|12
TP5
LogicielTempsrel
DSPTMS320C5416
Objectif:Raliserunequeuedemessage.Comprendreetutiliserdessmaphorespoursynchroniser
destchessurlaccsuneressourcepartage(queuedansnotrecas).
...
}MsgObj;
//Partieimpose
//Champschoisisparlutilisateur
LepremierlmentnestpasmodifiableetestdetypeQUE_Elemdontleformatestlesuivant:
typedefstructQUE_Elem{
structQUE_Elem*next;
structQUE_Elem*prev;
}QUE_Elem
Ilsagitdespointeurssurllmentsuivantetdupointeursurllmentprcdent.Celapermetde
raliserunelistedoublementchane.
Question1:
RappelerlefonctionnementdunemmoiredetypeFIFOenlaschmatisant.
1.2 Application
Nous nous proposons de raliser une application dcriture et de lecture dans une queue de
message. Le seul but est de vrifier le fonctionnement et lutilisation de lobjet Queue. Nous
souhaitonsdoncobtenirlersultatsuivantsurleMessageLog.
|1
Figure1:Objectifdel'applicationdetestd'unequeuedemessage
1.3 Ralisation
1.
2.
3.
4.
Crerunprojetqueue.pjt.
Insrerunenouvelletachequiexcuteraunefonction:voidreader_writer(void)
InsrerunobjetQUEdanslefichierdeconfiguration.
Dfinissezvotrestructuredemessagequinecontiendraquuncaractre:
typedefstructMsgObj{
QUE_Elemelem;
//champimpos
charval;
//champcaractrepourl
}MsgObj;
5.
ViderlaqueuedemessagelaidelafonctionQUE_new(.)(facultatif)
6.
Utiliser la fonction MEM_alloc(0,sizeof(MsgObj),0), pour allouer de la mmoire une
nouvellestructureMsgObjquinousallonsinsrerdanslaqueue.
7.
MettrecemessagedanslaqueueaveclafonctionQUE_put(,)
8.
Afficherlavaleurducaractreenvoydanslaqueue:LOG_printf()
9.
RcuprerlemessagedelaqueueaveclafonctionQUE_get()
10. Affichezlavaleurducaractrercuprer:LOG_printf()
11. Librerlammoireallouepourlastructuredemessage:
MEM_free(0,,sizeof(MsgObj))
Vouspouvezalorsraliservotreapplicationenstockant4messageslasuite(a,b,c,d),puisenlisant
lesmessages(a,b,c,d).
@ structure message lu
Question2:
Quelle est le nom gnrique de la zone mmoire ou lallocation dynamique est
ralise?
..........................................................
|2
Visualiser les segments mmoire que vous avez votre disposition dans le fichier de
configuration:System>MEM
Question3:
Enlesparcourantunparun,nommlesegmentolazonedallocationdynamique
estralise.Quelleestlataillerservepourlallocationdynamique?
..........................................................
Question4:
Daprsladressedelapremirestructuredemessagequiatrservenmmoire,
pouvezvousestimerladressededbutdelazonedallocationdynamique.Donnerladressede
finsachantquelutilisationdelallocationdynamiquesefaitendcrmentantlesadresses.Est
cecohrent?
..........................................................
..........................................................
Question5:
Raliserunschmareprsentanttouteslesdonnesquevousavezrelev:
Nomdusegmentosetrouveleheap,@dedbut,@defin
Tailleduheap,@dedbut,@defin
|3
Visualiserlammoireladressedudbutdevotreheap.Relancervotreprogramme,et
remplir dynamiquement sur votre feuille (avec un crayon de papier!!!) les zones
mmoire lors de chaque allocation dynamique des 3 premiers messages. Vrifier le
fonctionnementdeslistesdoublementchanes.
@ mmoire
Champs
*next
*next
*prev
char
Nousallonsmodifierlatailledutas0x0CMADU(MemoryAdressableDataunit):
System>MEM>IDATA>clicdroitProperty>HeapSize:0x0C
RelancervotreapplicationetouvrirloutildevisualisationdesObjetsprsentsenmmoire:
DSP/BIOS>Kernel/ObjectView
NousallonsnousintresserlapartieMEM
Noterlesvaleursetvaluerlacohrencede:
StartAddress:...
EndAddress:
Totalsize:.
FreeMem:
Lancervotreprogrammeaveclespointsdarrtsetvisualiserlaplacerestanteaufuret
mesuredesallocationsralises.
Question6:
Quesepassetillorsquelesystmedpasselespacemmoiredisponible.
..........................................................
|4
2.3 Ralisation
Enreprenantleprojetprcdent,modifiervotrefichierdeconfigurationencrant5tches
aveclescaractristiquessuivantes:
ObjectName
Priority
Taskfunction Taskfunctionargument0
initTsk
15
_initTask
reader0
_reader
writer0
_writer
writer1
_writer
writer2
_writer
ChangerlespropritsduLOG_system:
Instrumentation>LOG>LOG_system:buflen:512,buftype:fixed
Remplacerlefichier.cdevotreprojetparceluiquivousestfourni:semaphore.c
Nousallonsutiliserunsmaphorepoursynchroniserlestchesdcritureetlatchedelecturedans
laqueuedemessage.
Crerunsmaphore:Synchronization>SEM
|5
Question8:
Quellesfonctionsallezvousutiliserpourgrerlesmaphore?
..........................................................
..........................................................
Question9:
Afin de lancer votre programme, estimer ce quil va tre crit dans le message
Log.Vrifierenexcutantvotreprogramme.Vrifieraussienutilisantlegraphedexcution
(DSP/BIOS>ExcutionGraph)
Lordre dapparition des tches writer dpendent exclusivement de lordre dans
lesquellesvouslesavezcresdanslefichierdeconfiguration.
Pourlesplusavances:
PositionnerunTSK_yield()danslatchecrivainjusteaprsavoirpostlesmaphore.
Question10:
Commentvotreprogrammevatilragir,vrifierenlexcutantsurlacible?
..........................................................
Modifierlesprioritsdestchesettester.
|6