نمونه ای از کدنویسی عجیب در cmsis:
در تابع زیر که به عنوان نمونه از کتابخانه lpc177x_8x_gpio.c نوشته شده، در صورت ارسال یک عدد ناصحیح در ورودی تابع به عنوان شماره پورت، بجای استفاده از روش هایی مانند تعریف ورودی تابع از نوع enum که تنها مقادیر خاصی را بتواند بپذیرد و یا برگشت یک مقدار بازگشتی به عنوان وضعیت خطا در صورت وارد کردن آرگومان غلط، اجرای برنامه در یک حلقه بی نهایت while قرار می گیرد و هیچ گاه از آن خارج نمی شود. حاصل این می شود که اگر برنامه نویس عددی اشتباه به غیر از 0 یا 2 را موقع نوشتن برنامه به عنوان شماره پورت قرار دهد، این اشتباه بدون ایجاد خطا در کامپایل باعث معطل شدن در حلقه while و هنگ کردن عملکرد برنامه می شود. شبیه همین نوع کدنویسی در بسیاری از توابع دیگر cmsis هم قابل مشاهده است.
void GPIO_ClearInt(uint8_t portNum, uint32_t bitValue)
{
if(portNum == 0)
LPC_GPIOINT->IO0IntClr = bitValue;
else if (portNum == 2)
LPC_GPIOINT->IO2IntClr = bitValue;
else
//Invalid portNum
while(1);
}
@KnowledgePlus
Post #753
6.09K