C18 مترجم typedef وحجم البيانات التعداد
سؤال
وأنا أحاول إلى رمز الميناء على تجميع باستخدام مترجم C18 رقاقة لمتحكم PIC. ويتضمن رمز تتضمن التعدادات مع القيم الكبيرة المخصصة (> 8-بت). انها لا تعمل بشكل صحيح، مشيرا إلى أنه على سبيل المثال، 0x02 هو نفس 0x2002.
وكيف يمكنني إجبار القيم التي تم تعدادها لتكون مرجعا كقيم 16 بت؟
المحلول 2
ولقد وجدت هذه المشكلة.
لتكون مرجعا في المستقبل، ومترجم C18 لن تعزيز المتغيرات أو الثوابت عند تنفيذ عملية الرياضيات، على الرغم من أنها ANSI C القياسية. هذا هو لزيادة سرعة في حين تعمل على معالجات 8 بت.
لقوة الامتثال ANSI، واستخدام "-Oi" خيار مترجم.
<وأ href = "http://www.microchip.com/Microchip.WWW.SecureSoftwareList/secsoftwaredownload.aspx؟device=en010014&lang=en&ReturnURL=http://www.microchip.com/stellent/idcplg؟IdcService= SS_GET_PAGE وNODEID = 1406 & dDocName = en010014 # "يختلط =" نوفولو noreferrer "> راجع صفحة 92 من دليل C18.
نصائح أخرى
في رؤوس دايركت، كل التعداد لديه قيمة FORCE_DWORD
في ذلك مع قيمة 0xffffffff
. انا اعتقد ان هذا في الأساس ما تريد، وأنه يفرض على المترجم للسماح للتعداد يكون <م> على الأقل م> 32 بت. وذلك في محاولة إضافة FORCE_WORD
بقيمة 0xffff
.
وهذا لن يحل مشكلتك، وبطبيعة الحال، إذا كان هذا المترجم فقط لا يدعم تتضمن التعدادات أكبر من 8 بت.