Cortex Flashcards

1
Q

Hva står ARM for?

A

Advanced RISC machines

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Cortex-M mikroprosessorer har alle en (64, 16, 32, 8)-bits arkitektur. Hva er korrekt svar?

A

32-bits

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Hvilken Cortex-M prosessor har fokus på lavt strømforbruk og lav kostnad? (M35P, M7, M55, M4, M0+, M3)

A

M0+

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Register SP er forkortelse for (Soft Pointer, Stack Pointer, Significant Pointer, Set Pointer). Hva er korrekt svar?

A

Stack Pointer er korrekt, da SP i ARM-arkitekturen refererer til Stack Pointer-registeret som brukes til å administrere stakken.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Cortex-M mikroprosessorer bruker et Thumb-2 instruksjonssett. Hva betyr dette?
(En blanding av 32- og 64-bits, en blanding av 8-, 16- og 32-bits, en blanding av 8- og 16-bits, en blanding av 16- og 32-bits)

A

En blanding av 16 og 32-bits arkitektur

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Hvor stort er adresserommet til Cortex-M mikroprosessorene?
(2 GB, 8 GB, 4 GB, 1 GB)

A

4 gb

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Hvilken Cortex-M prosessor er designet for applikasjoner innen kunstig intelligens og maskinlæring?
(M23, M33, M85, M0, M7, M3)

A

M85

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Register LR er forkortelse for (Leave Register, Last Register, Load Register, Link Register). Hva er korrekt svar?

A

LR står for Link Register, som holder returadressen under kall til funksjoner (subrutiner).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Hva er NVIC forkortelse for? (Next Vector Intermediate Controller, New Vector Inter Collector, Nested Value Internal Computer, Nested Vector Interrupt Controller)

A

NVIC står for Nested Vector Interrupt Controller, som håndterer avbrudd i ARM Cortex-M-mikroprosessorer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Hva er adressen som vises av PC-registeret under eksekvering?
(Antall instruksjoner i instruksjonskøen.
Adressen til den eksekverte instruksjonen pluss 4.
Adressen til neste instruksjon, antall kjørte programmer).

A

PC (Program Counter) viser adressen til den gjeldende instruksjonen, med en forskyvning på 4 for å reflektere pipelining.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hvilke kjøremoduser har Cortex-M mikroprosessorene?

A

I Cortex-M mikroprosessorer kjøres betjeningsrutiner i “Handler Mode,” og prosessoren kan settes til uprivilegert “Thread Mode.” I “Handler Mode” har den alltid privilegert tilgang.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Hva gjør NVIC for Cortex-M mikroprosessorer?

A

NVIC prioriterer og håndterer avbrudd, og lagrer en avbruddsvektor i LR under avbrudd.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Hva er formålet med vektortabellen i Cortex-M mikroprosessorer? Velg riktig påstand(er).
1. NMI_Handler kan ikke maskeres bort.
2. Reset_Handler har høyest prioritet.
3. PendSV_Handler brukes til standardisert avslutning av unntak.
4. UsageFault_Handler kjøres når prosessoren oppdager en feil i minnehåndtering.
5. HardFault_Handler håndterer alle unntak som ikke har en spesifikk unntakshåndterer definert.
6. Vektortabellen kan omdirigeres ved hjelp av NVIC.

A

Alternativ 1 (NMI_Handler kan ikke maskeres bort): Dette er korrekt. NMI (Non-Maskable Interrupt) er en avbruddskilde som ikke kan blokkeres eller ignoreres, og dette reflekteres i vektortabellen.
Alternativ 2 (Reset_Handler har høyest prioritet): Korrekt. Reset_Handler er den første rutinen som kjøres etter en oppstart eller omstart og har høyest prioritet i systemet.
Alternativ 3 (PendSV_Handler brukes til standardisert avslutning av unntak): Korrekt. PendSV (Pendable Service Call) er en lavprioritetsavbrudd som brukes for kontektsbytte eller andre avslutningsoperasjoner.
Alternativ 4 (UsageFault_Handler kjøres når prosessoren oppdager en feil i minnehåndtering): Delvis korrekt. Dette gjelder, men mer spesifikt for feil som misbruk av instruksjoner eller tilgang til ugyldige områder i minnet. For minnehåndtering alene brukes MemManage_Handler.
Alternativ 5 (HardFault_Handler håndterer alle unntak som ikke har en spesifikk unntakshåndterer definert): Korrekt. HardFault brukes som en generell avbruddshåndterer når spesifikke unntak ikke har definert sin egen.
Alternativ 6 (Vektortabellen kan omdirigeres ved hjelp av NVIC): Korrekt. NVIC kan brukes til å omdirigere eller prioritere vektorer ved å endre på adresser i vektortabellen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Spørsmål: Hva skjer når en tråd venter på en semafor i CMSIS-RTOSv2?

A

Når en tråd venter på en semafor, settes den i en ventetilstand av operativsystemet (CMSIS-RTOSv2) inntil semaforen gir tilgang (et “token” blir tilgjengelig). En semafor brukes til å styre tilgang til delte ressurser eller synkronisere tråder.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Hva er et buffer, og hva brukes det til i programmering?

A

Et buffer er et midlertidig lagringsområde i minnet som brukes til å holde data mens de flyttes mellom to steder, for eksempel mellom maskinvare og programvare.
Buffere brukes for å håndtere forskjeller i hastighet eller arbeidsbelastning mellom systemkomponenter.
Eksempel: I en ADC (Analog-to-Digital Converter) med DMA (Direct Memory Access) brukes et buffer til å samle inn digitaliserte verdier fra ADC-en før de behandles av CPU-en.
Et buffer kan være sirkulært (roterer dataene) eller lineært (lagrer data sekvensielt).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Spørsmål: Hva er “duty cycle” til et PWM-signal med en lavtid på 0,3 sekunder og høytid på 0,2 sekunder?

A

40%
“duty cycle” = (Høytid / Total periodetid) * 100 = (0,2 / 0,5) * 100.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Hva er formålet med lampSemaphore i lamp_control.c?

A

Den begrenser hvor mange lamper som kan blinke samtidig. Antallet settes ved initialisering av semaforen i BlinkControlInit()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Hvordan håndteres knappetrykk i switch_monitor.c?

A

Når en knapp trykkes, genereres en melding med pin-nummer og tilstand som legges i meldingskøen. Event-flaggene settes basert på hvilken knapp som trykkes

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Hva er ADC, og hva står forkortelsen for?

A

ADC står for Analog-to-Digital Converter.
Det er en enhet som konverterer et analogt signal (som spenning) til et digitalt signal representert med binære verdier.
ADC brukes for å gjøre analoge verdier forståelige for digitale systemer, som mikrokontrollere.
Eksempel: I en STM32-mikrokontroller brukes ADC til å lese verdier fra sensorer og konvertere dem til digitale data for videre behandling.
Viktige parametere for ADC inkluderer oppløsning (f.eks. 10-bit, 12-bit) og referansespenning (VREF+), som bestemmer nøyaktigheten og området for konverteringen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Hva gjør HAL_ADC_Start_DMA i my_adc.c?

A

Den starter ADC med DMA-støtte for å fylle et buffer kontinuerlig med ADC-verdier​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Hvordan håndterer MyHardFault_Handler i my_hardfault_handler.c en hardfault?

A

Den blinker en rød LED og teller ned før den utfører en systemreset med NVIC_SystemReset()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Hva er et PWM-signal?

A

Et PWM-signal (Pulse Width Modulation) er et digitalt signal der pulsbredden (høy andel tid i forhold til lav andel tid) justeres for å kontrollere mengden energi som leveres til en last. PWM brukes ofte til å styre motorhastighet, lysstyrke på LED-er, eller som en analog signalemulering ved å variere pulsens varighet i et digitalt signal.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Hva brukes funksjonen MyADC_PrintCalibratedVREF til i my_adc.c

A

Den beregner og skriver ut den målte inngangsspenningen basert på ADC-data og en referansespenning​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Hva er DMA, og hvordan brukes det i mikroprosessorer?

A

DMA står for Direct Memory Access. Det er en teknologi som gjør det mulig for periferiutstyr(Hardware) som ADC, UART eller SPI å overføre data direkte til eller fra minnet uten å belaste CPU-en.
I mikroprosessorer som STM32 brukes DMA for å avlaste CPU-en ved store datamengder, slik at CPU kan håndtere andre oppgaver.
Eksempel i kode: I my_adc.c brukes HAL_ADC_Start_DMA til å konfigurere ADC for automatisk å fylle et buffer med målte verdier uten CPU-intervensjon​(my_adc).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Hva gjør osEventFlagsWait i funksjonen BlinkControl i lamp_control.c?

A

Den venter på at et spesifikt event-flag blir satt før den starter blinkingen av en bestemt lampe. Event-flagget indikerer at en tilknyttet knapp er trykket​(lamp_control).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Hvordan kontrolleres “duty cycle” for et PWM-signal i my_adc.c?

A

Duty cycle for et PWM-signal justeres ved å oppdatere verdier i timerens compare-register (f.eks. CCRx), som bestemmer hvor lenge signalet er høyt i hver periode. I my_adc.c brukes DMA til å overføre disse verdiene direkte til timeren, noe som gjør det mulig å justere duty cycle dynamisk uten CPU-intervensjon. Dette effektiviserer prosessen og frigjør CPU-en til andre oppgaver.

27
Q

Hva er en MUTEX?

A

En MUTEX (Mutual Exclusion) er en synkroniseringsmekanisme som brukes i programmering for å sikre at kun én tråd eller prosess kan få tilgang til en delt ressurs om gangen. Dette forhindrer datakorrupsjon og løser problemer med samtidighet i systemer med flere tråder. MUTEX-en fungerer som en lås som må “tas” før en ressurs kan brukes, og “frigjøres” etter bruk.

28
Q

Hva er CMSIS-RTOSv2?

A

CMSIS-RTOSv2 (Cortex Microcontroller Software Interface Standard Real-Time Operating System Version 2) er en standardisert API (Application Programming Interface) for å bruke RTOS-funksjonalitet på ARM Cortex-M-mikrokontrollere. Det gir et felles grensesnitt for ulike RTOS-implementasjoner, noe som gjør det lettere å utvikle portabel og konsistent kode. CMSIS-RTOSv2 inkluderer funksjoner for trådbehandling, synkronisering, tidsstyring og meldingshåndtering.

29
Q

Hva er en stack i sammenheng med Cortex-M-arkitekturen, og hvordan brukes den?

A

En stack er et minneområde som brukes til midlertidig lagring av data, som funksjonsparametere, returadresser og lokale variabler.
I Cortex-M brukes stacken i en LIFO (Last In, First Out)-struktur, der data legges til med en PUSH-operasjon og hentes med en POP-operasjon.
Stack Pointer (SP) peker alltid til toppen av stacken og oppdateres automatisk ved hver PUSH og POP.
Stacken brukes også under avbrudd for å lagre registerverdier slik at prosessorens tilstand kan gjenopprettes etter avbruddshåndtering.

30
Q

Hvordan initialiseres hendelsesflaggene i SwitchMonitorInit?

A

Hendelsesflaggene opprettes ved hjelp av osEventFlagsNew, som returnerer en peker til en ny event-flag struktur hvis vellykket​(switch_monitor).

31
Q

Hva skjer hvis en knapp trykkes flere ganger i switch_monitor.c

A

Hver knappetrykk vil generere en ny melding i meldingskøen og sette tilhørende event-flag, som behandles i SwitchMonitor tråden​(switch_monitor)​(switch_monitor).

32
Q

Hva skjer hvis en Mutex er låst av en tråd i CMSIS-RTOSv2, og en annen tråd prøver å låse den?

A

Den andre tråden må vente til Mutexen blir frigitt av den første tråden før den kan få tilgang​(lamp_control).

33
Q

Hva skjer når en Cortex-M prosessor går i “Handler Mode”?

A

Prosessoren håndterer betjeningsrutiner for unntak, og har alltid privilegert tilgang til alle interne registre og busser​(lamp_control).

34
Q

Hva brukes Reset_Handler til i Cortex-M mikroprosessorer?

A

Reset_Handler er den første rutinen som kjøres etter oppstart eller omstart, og den har høyest prioritet blant unntakene​(lamp_control).

35
Q

Hvordan er unntaksprioritet definert i Cortex-M mikroprosessorer?

A

Unntaksprioritet er hierarkisk organisert i NVIC, der lavere tall representerer høyere prioritet. NMI og Reset_Handler har faste, høyeste prioriteter​(lamp_control).

36
Q

Hvordan beregnes verdien for PSC (“prescaler”) for å generere en PWM med 50 Hz når TIM1 har en klokke på 80 MHz?

A

Verdien for PSC beregnes ved formelen:
PSC=(CK_PSC/
(Frekvens ×CK_CNT)) − 1
For å oppnå høyest mulig CK_CNT og en frekvens på 50 Hz:
PSC=(80MHz /
(50×64000)) − 1 = 24
Derfor må PSC settes til 24 for å oppnå ønsket frekvens.

37
Q

Hva er en tråd i konteksten av sanntidsoperativsystemer som CMSIS-RTOSv2?

A

En tråd er en separat utføringsenhet i et program som kan kjøre uavhengig eller parallelt med andre tråder.
I sanntidsoperativsystemer som CMSIS-RTOSv2 brukes tråder for å dele CPU-tid mellom forskjellige oppgaver.
Hver tråd har sin egen stakk og kan ha forskjellige prioriteter, noe som lar operativsystemet styre hvilken tråd som kjører til enhver tid.
Eksempel: I koden brukes tråder til å håndtere oppgaver som blinking av lamper (BlinkControl) og overvåking av brytere (SwitchMonitor)​(lamp_control)​(switch_monitor).

38
Q

Hva må verdien i Auto-reload registeret (ARR) settes til for å generere et event nærmest 1 sekund hvis prescaler-verdien (PSC) er satt til 7999?

A

ARR-verdien beregnes ved formelen:
ARR = (Clock_Frequency / ((Prescaler + 1) * Desired_Frequency)) - 1

Derfor må ARR settes til 9999 for å oppnå et event nærmest 10 sekunder med en prescaler-verdi på 7999.

39
Q

Hva er spenningen i mV når VREF+ = 3300 mV, ADC-oppløsningen er 10-bits, og verdien fra RDATA-registeret er 0x0200?

A

V_input = (V_REF+ * ADC_Value) / (2^Resolution - 1)
Der:
V_REF+ = 3300 mV
ADC_Value = 512
Resolution = 10
Regnestykket blir:
V_input = (3300 * 512) / (2^10 - 1) ≈ 1651.6 mV

40
Q

Hvor store er meldingene (i antall bytes) som utveksles mellom tråd og callback-funksjonene?

A

Meldingene som utveksles mellom tråd og callback-funksjonene er 2 bytes store

41
Q

Hva er spenningen i mV når VREF+ = 3300 mV, ADC-oppløsningen er 12-bits, og verdien fra RDATA-registeret er 0x0080?

A

penningen beregnes som:
V_input = (V_REF+ * ADC_Value) / (2^Resolution - 1)
Der:
V_REF+ = 3300 mV
ADC_Value = 128
Resolution = 12
Regnestykket blir:
V_input = (3300 * 128) / (2^12 - 1) ≈ 103.15 mV

42
Q

Hva er VREF+ i mV når VREFINT måles til 0x0601, og VREFINT_CAL er 0x0668?

A

VREF+ beregnes som:
V_REF+ = (V_CAL * VREFINT_CAL) / VREFINT
Der:
V_CAL = 3300 mV
VREFINT = 1537
VREFINT_CAL = 1640
Regnestykket blir:
V_REF+ = (3300 * 1640) / 1537 ≈ 3521 mV

43
Q

Hvor mange ADC-klokkesykluser tar en konvertering når SMP = 0x2 og ADC-oppløsningen er 10-bits?

A

Antall klokkesykluser beregnes som:
Clock_Cycles = Sampling_Period + Conversion_Period + 3 (datablad)
Der:
Sampling_Period = 10 klokkesykluser (for SMP = 0x2)
Conversion_Period = 28 klokkesykluser (for 10-bits oppløsning)
Regnestykket blir:
Clock_Cycles = 10 + 28 +3 = 41

44
Q

Hva er de ulike stegene i en 3-stegs instruksjonskø?

A
  1. Henting: Instrukser blir hentet fra minne og lagt i kø.
  2. Dekoding: Instruksjoner blir dekodet, og kontrollsignaler for databussen blir forberedt for neste syklus.
  3. Utførelse: Instruksjonen blir kjørt.
45
Q

Hvilke Cortex-M-prosessorer har en 3-stegs instruksjonskø?

A

Cortex-M3, Cortex-M0 og Cortex-M4.

46
Q

Hvilken prosessor i Cortex-M-familien har den beste ytelsen?

A

Prosessoren i M-serien med best ytelse er Cortex-M85, som ble lansert i 2022.

47
Q

Hvor mange registre finnes til generelt bruk og hvem bestemmer bruken av disse?

A

ARM Cortex-M prosessorer har 13 generelle formål registre (R0-R12) som kan brukes til forskjellige operasjoner. Bruken av disse registrene bestemmes av kompilatoren og operativsystemet for å optimalisere ytelsen.

48
Q

Nevn noen CMSIS-Core funksjoner som kan benyttes for å kaste rundt på bit-ene.

A

Noen CMSIS-Core funksjoner for bitmanipulering inkluderer:
* __RBIT(): Reverserer bitene i en verdi.
* __REV(): Bytter om rekkefølgen på byte i en 32-bit verdi.
* __ROR(): Utfører rotasjon av bitene til høyre.

49
Q

Hvor stort er adresserommet til en Cortex-M prosessor?

A

Adresserommet til Cortex-M prosessorer er 4 GB, altså 32-bit adressering (0x00000000 til 0xFFFFFFFF).

50
Q

Hva inneholder Program Status Register (PSR)?

A

Program Status Register (PSR) inneholder tilstandsinformasjon om prosessoren. Den består av flere flagg, inkludert:
* N (Negative flagg)
* Z (Zero flagg)
* C (Carry flagg)
* V (Overflow flagg)
* ISR (Interrupt Service Routine nummer)

51
Q

Hva er en stakkpeker (SP – «Stack Pointer»)?

A

En stakkpeker (SP) er et register i en CPU som peker til den øverste adressen i en stakk. Stakken er en datastruktur som brukes til å lagre midlertidige verdier som funksjonskall, lokale variabler og returadresser under programkjøring. Stakkpekeren hjelper prosessoren å holde orden på hvor disse dataene ligger i minnet.

52
Q

SP-registeret viser enten MSP («Main Stack Pointer») eller PSP («Program Stack Pointer»). Hva er hensikten med å ha to ulike stakkpekere?

A

ARM Cortex-M har to stakkpekere: MSP (Main Stack Pointer) for systemnivå, som brukes ved interrupts og privilegert kode, og PSP (Program Stack Pointer) for brukerprogrammer. Dette gir bedre isolasjon mellom bruker- og systemkode, samt raskere kontekstbytter.

53
Q

Hvilke av følgende utsagn op SP (stack-pointer) er korrekt?
1. SP flytter seg når data legges på stakken (PUSH) og når data hentes fra stakken (POP).
2. SP peker inn i flashminnet hvor statiske data som tekststrenger ligger lagret.
3. SP peker til toppen av stakken, et minneområde for mellomlagring av lokale variabler og registre.
4. SP kontrollerer rekkefølgen på eksekveringen av instruksjoner i instruksjonskøen.
5. SP flytter seg når statiske data sendes til en periferenhet som UART.

A
  1. SP flytter seg når data legges på stakken (PUSH) og når data hentes fra stakken (POP).
  2. SP peker til toppen av stakken, et minneområde for mellomlagring av lokale variabler og registre.
54
Q

Hva er en Nested Vectored Interrupt Controller (NVIC) og gi en oppsummering av denne enhetens hovedoppgaver?

A

En Nested Vectored Interrupt Controller (NVIC) er en enhet i ARM Cortex-M-prosessoren som håndterer interrupts. Hovedoppgavene til NVIC er å prioritere, administrere og håndtere flere interrupts på en effektiv måte. Den støtter nestede interrupts, slik at høyere prioriterte interrupts kan avbryte lavere prioriterte, og sikrer rask responstid ved å bruke vektortabeller for å direkte hoppe til riktig interrupt-håndterer.

55
Q

En Cortex-M prosessor har to operasjonsmoduser, «Handler Mode» og «Thread Mode». I hvilken modus er prosessoren når den behandler ett unntak?

A

Når en Cortex-M-prosessor behandler et unntak, bytter den til Handler Mode. Dette er modusen som brukes for å håndtere interrupts og unntak, mens Thread Mode brukes til vanlig applikasjonskjøring.

56
Q

Hva er forskjellen på trådflagg og hendelsesflagg?

A

Trådflagg brukes til å synkronisere ulike tråder ved å vente på at en annen tråd setter flagget. Hendelsesflagg signaliserer spesifikke hendelser mellom tråder, og en tråd kan vente på ett eller flere slike flagg for å fortsette kjøringen.

57
Q

Hva begrenser størrelsen på en meldingskø?

A

Størrelsen på meldingskøen er begrenset av tilgjengelig minne (RAM) og den maksimale størrelsen du har satt for hver melding, samt antallet meldinger som kan lagres i køen samtidig.

58
Q

Er det mest fordeler eller mest ulemper ved å sende store meldinger via en meldingskø? Begrunn svaret.

A

Det er flest ulemper ved å sende store meldinger via en meldingskø fordi det kan føre til større forsinkelser, høyere minnebruk, og mulig blokkering hvis køen blir full. Det er mer effektivt å sende små meldinger eller pekere til data for å redusere ressursbruk.

59
Q

Hvorfor må avbruddsrutiner som skal gjøre systemkall til RTOS ha prioritet 5 eller lavere?

A

Avbruddsrutiner må ha prioritet 5 eller lavere for å unngå konflikter med RTOS, siden systemkall som håndterer synkronisering og planlegging krever at avbrudd med høyere prioritet ikke forstyrrer RTOS-kjernens drift.

60
Q

En tråd allokerer et buffer fra en minnepool. Hvordan sjekker tråden at den virkelig fikk et buffer, og hvorfor er det viktig?

A

Når en tråd allokerer et buffer fra en minnepool i et RTOS, skjer dette vanligvis gjennom en funksjon som returnerer en peker til den allokerte minneblokken. Tråden må sjekke om denne pekeren er gyldig, altså om den ikke er null (null-pointer). En null-peker indikerer at minneallokeringen feilet fordi det ikke var tilgjengelige blokker i minnepoolen.
Dette er viktig fordi:
* Sikkerhet og stabilitet: Hvis tråden ikke sjekker om den fikk allokert et buffer, kan det føre til krasj eller uventet oppførsel i systemet.
* Ressurshåndtering: Det sikrer at systemet ikke prøver å skrive til eller lese fra et område som ikke er allokert, noe som kan føre til korrupt data eller minnefeil.

61
Q

Hva skjer om tråden fyller mer data inn i allokert buffer enn det er plass til?

A

Hvis en tråd skriver mer data til en buffer enn det som er allokert, vil dette resultere i en buffer overflow. Konsekvensene inkluderer:
* Korrupt data: Data utenfor bufferens grenser kan bli overskrevet, noe som kan føre til at andre kritiske data blir ødelagt.
* Uforutsigbar oppførsel: Programmet kan oppføre seg uforutsigbart eller krasje, avhengig av hvilke data eller minneområder som overskrives.
* Sikkerhetsproblemer: Buffer overflows er en kjent sårbarhet som kan utnyttes til å kjøre skadelig kode hvis minne som inneholder instruksjoner overskrives.
For å unngå dette bør programmerere alltid sjekke at data som skrives til bufferet er innenfor grensene for det allokerte bufferet, eller bruke sikre funksjoner som håndterer grenser på bufferet.

62
Q

Vi bruker ch4 til å genere PWM-signalet. “Auto-reload”(TIM1) ARR Register er satt til 64000. Hvilken verdi må vi sette inn i CC registeret for å få et pwm signal med 40% duty cycle ut.

A

CCx= D(ARR+1) = 0.4(64000 + 1) = 25600.4 = 25600.

63
Q

Hva forventer vi ut som Z data fra akselerometeret når ADXL343 er satt i -+2g modus, og kretsen ligger flatt på bordet?

A

(2^(bit-range)/2^(g)) - 1 = (2^10/2^2)-1 = 255

All g ranges (Full resolution): 10 Bits
-+2g(Full resolution): 10 Bits
-+4g(Full resolution): 11 Bits
-+8g(Full resolution): 12 Bits
-+16g(Full resolution): 13 Bits