عازلة في Fifo جيم

G

GrandAlf

Guest
كل من يساعد على ذلك ، ليست جيدة جدا في جيم بعد.ما قلته هو AT89s8252 المبرمجة مع ** ك ل صغيرة ومنظمات البحث والتكنولوجيا.لدي مهمة واحدة في أن يجلس واستخدامات _getkey
، ويحيله بعد ذلك إلى 8 بت int عالمية متغيرة.هذا المتغير ثم تلاه آخر من العمليات المهمة التي لو> 0.مشكلة لدي هو أنه إذا كان أكثر من هذا العدد وردت في فترة أقل من الوقت اللازم للتجهيز ، وأنا أجد في عداد المفقودين.ما أود أن أفعله هو ل_getkey مهمة الكتابة إلى فصل 10 من يقول ، ثم قراءة في مهمة أخرى ، وبالطبع عند موقع معين هو قراءتها ومن ثم ينبغي تدميرها والقادمة في الطابور وتصعد سيتم تجهيزها ، حتى الفاصلة كانت فارغة.لقد فتشت على شبكة الإنترنت ، لكنها لا تستطيع العثور على أي شيء مناسب لMCUs.واعتقدت أن هذه الرقائق كان المعدات الاحتياطية ، ولكن هذا الطلب يبدو أنه ليس لديه أي أثر.شاكرين على أي مساعدة في هذا الشأن.

مايك

 
وعادة ما تفعل شيئا مثل هذه المدونة شظايا :

الرمز :

# تحديد BUFSIZE 16 / * السلطة اثنين بتجميع بكفاءة * /تشار fifo المتفجرة غير موقعة [BUFSIZE] ؛

غير موقعة المتفجرة الثالثة = 0 ، wr = 0 ؛ / * القراءة والكتابة وظائف * // * كتابة البايت في FIFO * /

fifo [wr] = get_input_byte () ؛

wr = (wr 1) ٪ BUFSIZE ؛/ * قرأ حرفا من FIFO * /

في حين أن (الثالثة! = wr)

(

do_something_with_byte (fifo [الثالثة]) ؛

= الثالثة (الثالثة 1) ٪ BUFSIZE ؛

)

 
باهرا ، تماما على ما ظللت أبحث عنه.انها تشبه ما كنت احاول ان افعله ، لكني اعتقد انني سكران في عدد قليل من الأماكن ، وأستطيع أن أرى فيها الآن.شكرا جزيلا.

 
هناك القليل آخر trik مع FIFO العازل.

إذا كنت تستخدم الجيدة FIFO الأحجام (16 ، 32 ، 64 أو 128 بايت) يمكنك استخدام>> مشغل بدلا ٪.

ولكن اذا كنت تستخدم FIFO الحجم 256 بايت
، والبايت واحد FIFO نقطة فاصلة لا تحتاج أي تقسيم المشغل ، إلا مؤشر الزيادة.

# تحديد FIFO_BUFFER_SIZE 256

غير موقعة تشار FIFO [FIFO_BUFFER_SIZE] ؛
غير موقعة فاصلة تشار [2048] ؛

unisgned شار ال * * العلاقات العامة ؛ / / استخدام مجمع التوجيه المناسب لنقطة واحدة البايت
* unisgned شار ع ؛ / / اثنين بايت نقطة

interrupt_service_routine باطل ()
(
* ال = get_input_byte () ؛
)

باطلة الرئيسي () (
= & FIFO ال [0] ؛ / / كتابة الحرف الأول FIFO نقطة
العلاقات العامة = & FIFO [0] ؛ / / الحرف الأول FIFO قراءة المؤشر

ع = & عازلة [0] ؛/ / وفي بعض عملية تفتيش روتينية حالة FIFO وتلقت بايت لتخزين
/ / خطية عازلة.

في حين أن (العلاقات العامة! = ال) (
* ع =* العلاقات العامة ؛ / / المتجر تلقى البايت
)

/ / وفي آخر عملية تفتيش روتينية ، وعملية فارغة عازلة

إذا كان (ع! عازلة = 0]) (
check_buffer () ؛
إذا كان (condition_to_empty_buffer) (
ع = عازلة [0] ؛
)
)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top