कुछ खोज के बाद जानकारी के लिए कुछ:।
" एआरएम कॉर्टेक्स-एम 3 बिट बैंडिंग एआरएम के माइक्रोकंट्रोलर कोर संकेतबाहु लागू करने के लिए अभी तक एक और तरीका प्रदान करता है बिट बैंड उर्फ क्षेत्र में चर लिखने की पहुंच एक परमाणु का कारण बनता है सिस्टम बस स्तर पर बिट-बैंड क्षेत्र में स्मृति स्थान पर पढ़ने-संशोधित-लेखन पहुंच। यह सेमफोरों में अनुवाद कैसे करता है? बिट-बैंड क्षेत्र में एक चर सेमेफोर के लिए कंटेनर के रूप में कार्य कर सकता है। प्रत्येक ग्राहक "का मालिक" उस कंटेनर में थोड़ा सा। जब भी किसी क्लाइंट को सेमफोर का दावा करने की आवश्यकता होती है, तो यह बिट-बैंड उपनाम क्षेत्र में संबंधित स्थान पर 1 लिखकर अपना स्वयं का सेट सेट करता है। फिर यह कंटेनर (बिट-बैंड क्षेत्र) को पढ़ेगा डी जांचें कि कोई अन्य बिट सेट नहीं है, जिसका अर्थ है कि ग्राहक ने सैमफोर पर सफलतापूर्वक दावा किया है। यदि अन्य बिट्स सेट किए गए हैं, तो क्लाइंट को फिर से अपना खुद का साफ़ करना होगा, और फिर से प्रयास करना होगा (शायद प्रतीक्षा के बाद)। " (source)
यहाँ मेरी कच्चे तेल है (untested) व्याख्या:
/*
* Frees a lock.
*
* @note lock must point to a fully aligned 32 bit integer.
* (atomically set to 0)
*
* @returns 1 if successfull
*/
int rwl_FreeLock(volatile uint32_t *lock){
*lock = 0;
return 1; // always successful
}
/*
* Attempts to acquire a lock
* @param who is the client taking the lock
* @lock pointer to the mutex (uint32_t value in memory)
* @note lock must point to a fully aligned 32 bit integer.
* (atomically set to 1 only if set to 0)
*/
int rwl_TryLock(volatile uint32_t *lock, int who){
// initial check of lock
if(*lock == 0){
Var_SetBit_BB((uint32_t)lock, who);
if(*lock == (1<<who)){ // check that we still have exclusive access
// got the lock!
return 1;
} else {
// do not have the lock
Var_ResetBit_BB((uint32_t)lock, who); // clear the lock flag
return 0;
}
}
}
Var_Set_BB/Var_Reset_BB:। सेट/साफ एक बिट का उपयोग कर बिट बैंडिंग (परमाणु)
हालांकि, यह करता है काम नहीं !!!
, दोनों पहुंच तरह विफलता की रिपोर्ट कर सकता है यह प्रतीत होता है । एक बेहतर दृष्टिकोण एक ldrex/strex spinloop का उपयोग करना होगा। ऐसा कहा जा रहा है कि, बिट-बैंड किस हद तक डीएमए जैसी चीजों की उपस्थिति में गारंटीकृत परमाणु तक पहुंचता है? यदि कोई डीएमए लिखना और बिट-बैंड लिखना लगभग एक साथ होता है, तो डीएमए लिखने की गारंटी बिट-बैंड लिखने के 'पढ़ने' और 'लिखने' पहलुओं के बीच नहीं होने की गारंटी है? – supercat