سؤال

وأنا أحاول إلى رمز الميناء على تجميع باستخدام مترجم 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 بت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top