Somo 1Kuchagua mkakati wa mgongano kwa mazingira ya hali ya kudumu: anwani wazi dhidi ya kuunganishwa tofauti kwa hali ya kudumu na safuInalinganisha anwani wazi na kuunganishwa tofauti kwa hali ya kudumu kwa mifumo ya kumbukumbu iliyorekebishwa, ikichanganua tabia ya cache, mgawanyiko, ugumu wa utekelezaji, na miongozo ya kuchagua mkakati wa mgongano katika miradi ya C ya embedded.
Ukaguzi wa sifa za anwani waziUkaguzi wa kuunganishwa tofauti kwa hali ya kudumuMpangilio wa kumbukumbu na urafiki wa cacheUgumu na juhudi za utekelezajiMiongozo ya kuchagua mkakatiSomo 2Kumbukumbu na ugumu wa wakati: kufafanua uchunguzi mbaya na uliotarajiwa, mapendekezo ya kipimo cha jedwali cha mzigo kwa embeddedInachanganua kumbukumbu na ugumu wa wakati wa jedwali la hash la hali ya kudumu, ikifafanua hesabu za uchunguzi mbaya na uliotarajiwa, mipaka ya kipimo cha mzigo, na mapendekezo ya kupima yanayofaa programu za sensor za embedded.
Changanuo la urefu wa uchunguzi mbayaUchunguzi uliotarajiwa chini ya hashing ya nasibuAthari za kipimo cha mzigo kwenye utendajiNyayo za kumbukumbu na kupima jedwaliMiongozo ya kurekebisha maalum ya embeddedSomo 3Kushughulikia viashiria kwa usalama: kutumia fahirisi badala ya viashiria, ukaguzi wa mipaka, na kuepuka dereferences za NULLInashughulikia kushughulikia viashiria kwa usalama katika jedwali la hash la hali ya kudumu kwa kutumia fahirisi badala ya viashiria vya ghafi, kutekeleza ukaguzi wa mipaka, na kubuni API zinazozuia dereferences za NULL na marejeleo yanayotegemea katika msimbo wa C.
Fahirisi dhidi ya viashiria katika jedwali la hali ya kudumuKutekeleza ukaguzi thabiti wa mipakaKuepuka marejeleo ya NULL na yanayotegemeaKubadilisha fahirisi kuwa viashiria kwa usalamaMifumo ya API inayotekeleza usalamaSomo 4Mbinu za anwani wazi: uchunguzi wa linear, quadratic probing, tombstones, na semantiki za kufuta bila kumbukumbu ya nguvuInaelezea anwani wazi katika jedwali la hali ya kudumu, ikiwa ni pamoja na linear na quadratic probing, alama za tombstone, na sheria za kufuta zinazoe puka ugawaji wa nguvu huku zikidumisha minyororo ya uchunguzi na utendaji wa kutabirika katika utekelezaji wa C.
Linear probing: algoriti na maubadilifuQuadratic probing: tabia ya clusteringKubuni na kutumia alama za tombstoneSemantiki za kufuta na urekebishaji wa minyororo ya uchunguziKugundua jedwali lililojaa na hali za kushindwaSomo 5Kuunganishwa na buffer ya mviringo: kuweka soma ya hivi karibuni na sera kwa usawaziko (mpangilio wa kuandika, timestamps)Inachunguza jinsi jedwali la hash la hali ya kudumu linavyoshirikiana na buffer ya mviringo ili kuweka soma za sensor za hivi karibuni, kufafanua mpangilio wa kuandika, kutumia timestamps kwa ubichi, na dudumisha usawaziko wakati wa sasisho au upatikanaji unaofanana na mfululizo.
Kupanga ID za sensor kwa nafasi za buffer ya mviringoKuhifadhi soma ya hivi karibuni pekee kwa kila sensorUwanja wa timestamp na mpangilio wa monotonicKushughulikia kufuta na visa vya kuzungukaSheria za usawaziko kwa upatikanaji unaofanana na mfululizoSomo 6init_table: kuweka alama za tupu, kuanzisha orodha za bure au tombstonesInaelezea majukumu ya init_table, kama kuweka alama za tupu, kuanzisha orodha za bure au tombstones, kufuta metadata, na kuhakikisha jedwali linaanza katika hali thabiti, inayoweza kuthibitishwa kabla ya matumizi ya kwanza.
Kuchagua na kuweka alama za tupuKuanzisha tombstone na alama za haliKujenga miundo ya orodha ya bure ya awaliKufuta au kusafisha kumbukumbu ya jedwaliUkaguzi wa uthibitisho baada ya uanzishajiSomo 7insert_or_update_reading: kuingiza, kusasisha, kushughulikia jedwali lililojaa, na nambari za kurudiInaelezea API ya insert_or_update_reading, ikiwa ni pamoja na kuingiza, kusasisha mahali, kushughulikia jedwali lililojaa, nambari za kurudi, na jinsi ya kuunganishwa na kushughulikia mgongano huku ukiweka kiolesura rahisi na thabiti katika C.
Muundo wa function na chaguo za vigezoNjia ya kuingiza kwa ID mpya za sensorNjia ya kusasisha kwa ID zilizopo za sensorKushughulikia jedwali lililojaa na kurudi makosaKubuni nambari za hali na makosa waziSomo 8Kubuni safu ya ndoo: kuchagua ukubwa wa jedwali, kupima prime, na kudumu za wakati wa kuandikaInaelezea jinsi ya kubuni safu ya ndoo, ikiwa ni pamoja na kuchagua ukubwa wa jedwali, kupima prime au nguvu-ya-pili, kudumu za wakati wa kuandika, na maubadilifu kati ya matumizi ya kumbukumbu, kasi, na unyenyekevu wa function ya hash.
Prime dhidi ya ukubwa wa jedwali wa nguvu-ya-piliKuhusisha ukubwa wa jedwali na uwepo wa ufunguoKutumia kudumu za wakati wa kuandika katika CKusawazisha kumbukumbu na utendajiKupanga marekebisho ya ukubwa wa baadayeSomo 9Kuunganishwa kwa hali ya kudumu na safu: ubuni wa dimbwi la nodi, fahirisi za baadaye, na udhibiti wa orodha ya bure katika kumbukumbu ya hali ya kudumuInashughulikia kuunganishwa tofauti kwa hali ya kudumu kwa kutumia safu, ikiwa ni pamoja na mpangilio wa dimbwi la nodi, viungo vya fahirisi vya baadaye, udhibiti wa orodha ya bure, na jinsi ya kutekeleza kuingiza, kufuta, na kuvuka bila ugawaji wa lundo katika mazingira yenye vikwazo.
Kubuni mpangilio wa safu ya dimbwi la nodiKutumia fahirisi za baadaye badala ya viashiriaKudhibiti orodha ya bure katika kumbukumbu ya hali ya kudumuKuingiza na kufuta katika minyororo ya hali ya kudumuKugundua udhibiti wa dimbwi na makosaSomo 10Uwakilishi wa ufunguo na thamani: kutumia uint8_t id ya sensor na semantiki za kunakili za SensorReadingInaelezea jinsi ya kuwakilisha funguo na thamani kwa kutumia ID za sensor za uint8_t na struct za SensorReading, likilenga semantiki za kunakili, upangaji, upakiaji, na kuepuka aliasing au masuala ya maisha katika jedwali la hash la hali ya kudumu.
Kuchagua uint8_t kwa funguo za ID za sensorKubuni struct ya SensorReadingSemantiki za kunakili dhidi ya semantiki za viashiriaUpangaji, upakiaji, na mpangilio wa structKuthibitisha na kusawazisha ID za sensorSomo 11Chaguo za function ya hash kwa nafasi ndogo ya ufunguo: utambulisho, multiplicative, na masking kwa id za 0–255Inajadili function za hash kwa nafasi ndogo za ufunguo za uint8_t, ikiwa ni pamoja na pembejeo ya utambulisho, hashing ya multiplicative, masking, na jinsi ya kusawazisha unyenyekevu, ubora wa usambazaji, na gharama ya hesabu kwa ID za sensor za 0–255.
Hash ya utambulisho kwa anuwai za ID zenye msongamanoHashing ya multiplicative kwa funguo za uint8_tKufunika biti na kutokana na fahirisi ya jedwaliKuepuka mifumo ya clustering ya kimfumoKupima usambazaji kwa data ya sampuliSomo 12find_reading_by_id: mifuatano wa uchunguzi, majibu ya not-found dhidi ya found, na mifumo ya kunakili-baja salamaInazingatia find_reading_by_id, ikiwa ni pamoja na mifuatano wa uchunguzi, kutofautisha iliyopatikana kutoka isiyopatikana, kunakili kwa usalama ya SensorReading nje ya jedwali, na kuepuka tabia isiyofafanuliwa au udhihirisho wa data ya zamani katika C.
Saini ya function na mifumo ya kurudiKutekeleza mifuatano wa uchunguzi kwa lookupKushughulikia matokeo ya not-found dhidi ya foundKunakili-baja salama ya thamani za SensorReadingKuepuka data ya zamani au iliyoandikwa kwa sehemu