HAUSTUS telephonum in STM32F7-Inventionis

Omnis salve.

Dudum scripsit quomodo potuimus mittere telephonum HAUSTUS in STM32F4-Inventionis cum 1 MB ROM et 192 KB RAM) fundatur Embox. Hic dicendum est illam versionem minimam fuisse et duas telephonicas directe sine servo et cum voce transmissione in unum tantum directum conexum esse. Propterea telephonum pleniorem cum vocatione per calculonem transmissionis in utraque parte mittere decrevimus, sed simul intra magnitudinem quam minimam memoriam retinere decrevimus.


In telephono, applicationem eligere placuit simple_pjsua ut pars bibliothecae PJSIP. Haec est minima applicatio quae in calculonis servi potest, accipere et respondere vocat. Infra statim descriptionem dabo quomodo eam in STM32F7-Inventione persequar.

Quam ad launch

  1. Vestibulum Embox
    make confload-platform/pjsip/stm32f7cube
  2. HAUSTUS pone requiritur ratio in lima conf/mods.config.
    
    include platform.pjsip.cmd.simple_pjsua_imported(
        sip_domain="server", 
        sip_user="username",
        sip_passwd="password")
    

    quibus Server est servo HAUSTUS (exempli gratia sip.linphone.org); More ΠΈ Password - Ratio username et password.

  3. Embox ut a team convenientes facere. Circa tabulam firmware habemus in wiki quod articulus.
  4. Curre mandatum "simplex_pjsua_importatum" in console embox
    
    00:00:12.870    pjsua_acc.c  ....SIP outbound status for acc 0 is not active
    00:00:12.884    pjsua_acc.c  ....sip:[email protected]: registration success, status=200 (Registration succes
    00:00:12.911    pjsua_acc.c  ....Keep-alive timer started for acc 0, destination:91.121.209.194:5060, interval:15s
    

  5. Demum restat ut oratores vel headphones in output audio inserere, et in duas parvas MEMS microphones iuxta ostentationem loqui. a Linux per applicationem simple_pjsua, pjsua vocamus. Bene, vel alia specie linphone uti potes.

Haec omnia descripta sunt in nostro wiki.

Quomodo nos illuc

Itaque initio quaestio orta est de suggestu ferrario eligendo. Cum constaret STM32F4-Inventum memoria minime idoneum esse, STM32F7-Inventio electa est. I MB mico coegi et 1 KB of RAM habet (+ 256 memoriam specialem ieiunium, qua etiam utemur). Item non multum vocat per servo, sed placuit experiri idoneus.

Sibi sub conditione, negotium in plures gradus divisum est.

  • Cursor PJSIP in QEMU. Commodum erat debugging, plus iam in AC97 cod ibi habuimus.
  • Voice recording and playback on QEMU and on STM32.
  • Tuere applicationem simple_pjsua ex PJSIP. Te permittit in calculonis servo sorbere et facere vocat.
  • Tuam asterisco substructam ministrantem explica et in ea experire, deinde externas experire quales sip.linphone.org

Sanus in Embox per Portaudio operatur, quae etiam in PISIP adhibetur. Primae difficultates in QEMU - WAV bene in 44100 Hz luserunt, sed in 8000 clare erravit. Evenit ut res frequentiae instituendae - defalta 44100 in apparatu fuit, et hoc programmatice non mutavit.

Hic fortasse paulo explicandum est quomodo sonus generatim lusit. Sonus card potest alicui monstratori apponi ad memoriam e qua voles ludere vel recordari in praefinita frequentia. Post quiddam finit, interrumptura generatur et executio pergit ad quiddam proximum. Re vera haec buffers in antecessum impleri necesse est dum prior agitur. Hoc problema infra occurremus in STM32F7.

Deinde cultorem locavimus et Asteriscum in ea explicavimus. Cum necesse erat multum debug, sed in tortor ligula multa loqui nolui, necesse erat ut autocinetum autocinetum et memoria retineret. Ad hoc faciendum simplex_pjsua coagmentavimus ut tabellas elabi pro artificiis audilibus possis. In PJSIP, hoc simpliciter fit, quia conceptum portum habent, qui vel fabrica vel fasciculus esse potest. Atque hi portus aliis portibus mollius coniungi possunt. Codicem in nostro pjsip . videre potes repositoria. Quam ob rem schema talis erat. De servo Asterisco, duas rationes coepi - pro Linux et pro Embox. Deinde mandatum fit in Embox simple_pjsua_imported, Embox in calculonis servi relatus est, quem Embox ab Linux appellamus. Instante connexionis, servo Asterisco inspicimus nexum constitutum esse, et post tempus sonum audiemus ab Linux in Embox, et in Linux servamus tabellam quae ab Embox defertur.

Postquam in QEMU laboravit, ad STM32F7-Inventum ad portandum venimus. Primum problema est quod in 1 MB de ROM non convenerunt sine optimization compilator "-Os" pro magnitudine imaginis. Quam ob rem "-Os" comprehendimus. Praeterea, commissura debilis sustentaculum pro C++, ita pjsua tantum opus est, et simplici_pjsua utimur.

Post posita simple_pjsuastatuisse iam ibi occasionem deducendi. Sed prius necesse fuit de vocis et recordatione et lusu agere. Quaeritur ubi scribat? Elegimus memoriam externam - SDRAM (128 MB). Hoc ipsum experiri potes;

Facit stereo WAV cum frequentia 16000 Hz et durationem 10 seconds:


record -r 16000 -c 2 -d 10000 -m C0000000

Amittimus;


play -m C0000000

Circa primum quaeruntur duo. Prima cum codec - WM8994 adhibetur, et tale habet pro socors, et sunt quattuor foramina. Ergo per defaltam, si hoc non configuratur, tunc cum audio ludere, accidit in omnibus quatuor foraminibus playback. . Itaque, in frequentia 4 Hz, recepimus 16000 Hz, sed pro 8000 Hz, playback simpliciter non laboramus. Cum solum foramina 8000 et 0 delecti sunt, laboraverunt ut debet. Alia quaestio erat interfaces audio in STM2Cube, in qua opera audio output per SAI (Serial Audio Interface) synchrone cum initus auditionis (pertinentia non intellexi, sed evenit ut horologium commune et cum communicant. audio output is initialized, audio quodammodo adhaeret ei introitus). Hoc est, eas separatim currere non potes, sic nos sequentia fecerunt - audio input et audio output semper operari (including interrupts generantur). Cum autem nihil in systemate luditur, tunc simpliciter inane quiddam labi in output audio, et cum playback incipit, honeste incepimus illud implere.

Praeterea, occurrit quod sonus in memoria vocis valde quietus erat. Hoc accidit ex eo quod MEMS microphones in STM32F7-Inventa nescio quo modo in frequentiis infra 16000 Hz bene laborant. Ideo constituimus 16000 Hz, etiamsi 8000 Hz venerit. Ad hoc tamen faciendum, necesse fuit unius frequentiae in aliam conversionem programmatum addere.

Deinde ad augendam acervum, qui in RAM. Secundum calculos nostros, pjsip circa 190 KB requiri, et tantum remanet circa 100 KB. Hic uti aliqua externa memoria habui - SDRAM (circiter 128 KB).

Post omnes has emendationes vidi fasciculos primas inter Linux et Embox, et sonum audivi! Sonus autem terribilis, nec omnino idem ac QEMU, nihil potuit efficere. Tunc de re quid posset cogitabamus. Debugging demonstravit Embox solum tempus non habere ad implendum / exonerare buffers audio. Dum pjsip unum corpus expediebat, 2 obloquitur tempus evenire circa complementum processus quiddam, quod nimium est. Prima celeritatis cogitatio fuit compilator optimizationis, sed iam in PJSIP comprehendebatur. Secundum est punctum volitare hardware, nos de eo collocuti sumus articulus. Sed ut praxis demonstravit, FPU notabile incrementum in cursu non dedit. Proximus gradus filorum prioritize erat. Embox varias schedulingas strategias habet, et unam inclusam potioribus sustinens et rivos audio ad summa prioritatem. Hoc vel non auxilium.

Proxima opinio fuit nos cum memoria externa operari et pulchrum esset ibi structuras movere, quae saepissime accesserunt. Sum praevia analysis de quando et sub quo simple_pjsua memoriam collocans. Evenit ut ex 190 Kb, primae 90 Kb pro internis necessitatibus PJSIP partita sint et saepissime non accesserint. Praeterea, per advenientem vocationem, munus pjsua_sponsorium appellatur, in quo buffers tunc partita sunt ad operandum cum tabulis advenientis et exitu. C de eo adhuc Kb. et sequentia postea fecimus. Donec tempus vocationis, notitias in memoria externa ponimus. Simulac vocamus, statim cum alio acervo repone - IN RAM. Sic omnia "calida" data ad citius et praevidiori memoria translata sunt.

Quam ob rem haec omnia simul efficere potuerunt simple_pjsua et invoca per servo tuo. Et tunc per alios servientes ut sip.linphone.org.

Inventiones

Quam ob rem fieri potuit simple_pjsua cum voce transmissa in utramque partem per servo. Problema cum 128 KB of SDRAM additis solvi potest adhibitis paulo potentioribus Cortex-M7 (exempli gratia STM32F769NI cum 512 KB of RAM), sed simul adhuc non desperavimus ut in 256 ingrediatur. KB Laetemur si quis est, aut melius tamen experiri. Omnes fontes, ut mos est, in nostro sunt repositoria.

Source: www.habr.com