uz
Feedback
C 4 any Time

C 4 any Time

Kanalga Telegram’da o‘tish

آموزش زبان سی و نکات کلیدی آن @C_4_any_Time ادمین: @Alma_Electronic آموزشها به ترتیب اراعه شده لذا بهتره از ابتدای کانال مطالعه بشه ❗️انتشار اطلاعات فقط با ذکر منبع مجاز است !!!

Ko'proq ko'rsatish
1 614
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
تابعی ساده و بسیار بهینه برای محاسبه رادیکال uint16_t sqrt32(uint32_t a) { uint32_t rem = 0, root = 0; for (int i = 32 / 2; i > 0; i--) { root <<= 1; rem = (rem << 2) | (a >> (32 - 2)); a <<= 2; if (root < rem) { rem -= root | 1; root += 2; } } return root >> 1; }

نمونه مثال و خروجی xprintf("%d", 1234); /* "1234" */ xprintf("%6d,%3d%%", -200, 5); /* " -200, 5%" */ xprintf("%-6u", 100); /* "100 " */ xprintf("%ld", 12345678); /* "12345678" */ xprintf("%llu", 0x100000000); /* "4294967296" <XF_USE_LLI> */ xprintf("%lld", -1LL); /* "-1" <XF_USE_LLI> */ xprintf("%04x", 0xA3); /* "00a3" */ xprintf("%08lX", 0x123ABC); /* "00123ABC" */ xprintf("%016b", 0x550F); /* "0101010100001111" */ xprintf("%*d", 6, 100); /* " 100" */ xprintf("%s", "abcdefg"); /* "abcdefg" */ xprintf("%5s", "abc"); /* " abc" */ xprintf("%-5s", "abc"); /* "abc " */ xprintf("%.5s", "abcdefg"); /* "abcde" */ xprintf("%-5.2s", "abcdefg"); /* "ab " */ xprintf("%c", 'a'); /* "a" */ xprintf("%12f", 10.0); /* " 10.000000" <XF_USE_FP> */ xprintf("%.4E", 123.45678); /* "1.2346E+02" <XF_USE_FP> */

معرفی توابع xprintf که یک کتابخانه ورودی/خروجی رشته ای فشرده است. این کتابخانه نوشته اقای چان بوده و برای میکروکنترلرهای کوچکی که حافظه برنامه کافی برای عملکرد printf معمولی ندارند ایده آل است. همچنین توابع xprintf را می توان با گزینه های پیکربندی برای کاهش اندازه ماژول پیکربندی کرد. حجم فلش مورد نیاز برای این کتابخانه در کرتکس M0 و در ساده ترین حالت 789 بایت و در صورت استفاده از متغیر های long long به حافظه 880 بایت و هم چینین در صورت استفاده از سویچ float حدود 1816 بایت خواهد بود یعنی به کمتر از 2 کیلو بایت فلش نیاز دارد. منبع

Fix for add AVR & ARM Toolchain v2.0.exe184.63 MB

EmBitz_1.11.exe49.69 MB

معرفی ورژن جدید ادیتور EmBitz v2.6 پشتیبانی از نسخه های مختلف ارم های شرکت های Atmel Infineon NXP PIC18 PIC32 dsPIC Nordic ST Texas ,

با توجه به اینکه ترکیب بیتی فرمت متغیر های فلوت به صورت باینری نیست لذا به راحتی نمیشه از این متغیر ها برای ارسال یا دریافت توسط یوارت یا واحد های ارتباطی متداول بایتی استفاده کرد برای این کار یکی از راحت ترین روش ها تفکیک متغیر به 4 بایت هست برای این منظور استفاده از اشاره گر ها میتواند بسیار مفید باشد این صورت که ادرس متغیر فلوت رو بعد از تبدیل به اشاره گر از نوع 8 بیت برابر متغیر 8 بیت کنیم به کد زیر توجه کنید TX_Buffer[0] = *((uint8_t *)&float_val ); TX_Buffer[1] = *((uint8_t *)&float_val + 1); TX_Buffer[2] = *((uint8_t *)&float_val + 2); TX_Buffer[3] = *((uint8_t *)&float_val + 3);

Turn Any Question to {Code}. https://www.useblackbox.io/search

یکی از قابلیت های جالب بسیار و کار بردی اما متاسفانه ناشناخته در زبان سی اشاره گر از نوع تابع هست به کد زیر توجه کنید void add(int a, int b) {     printf("Addition is %d\n", a+b); } void subtract(int a, int b) {     printf("Subtraction is %d\n", a-b); } void multiply(int a, int b) {     printf("Multiplication is %d\n", a*b); } int main() {     void (*fun_ptr_arr[])(int, int) = {add, subtract, multiply};     unsigned int ch=2, a = 15, b = 10;     (*fun_ptr_arr[ch])(a, b);     return 0; }

photo content

گاهی اوقات نیازه که یه اشاره گر به اشاره گر داشته باشیم برای مثال int main() {     int a = 5;     int* ptr = &a;     int** d_ptr = &ptr;     printf("Value of var = %d\n", var);     printf("Value of var using single pointer = %d\n", *ptr2);     printf("Value of var using double pointer = %d\n", **ptr1);        return 0; } خروجی تابع فوق میشه Value of var = 5 Value of var using single pointer = 5 Value of var using double pointer = 5

با توجه به اینکه تلگرام کانال هایی را که برای مدت مشخصی غیر فعال بوده اند را private کرده ادرس لینک کانال حذف شده و برای استف
با توجه به اینکه تلگرام کانال هایی را که برای مدت مشخصی غیر فعال بوده اند را private کرده ادرس لینک کانال حذف شده و برای استفاده مجدد ازش نیازمند پرداخت 320 دلار بود لذا با استفاده از پیشنهاد خوب اقای کینژاد تغییری جزیی در اسم و ادرس کانال مجددا لینک ها ویرایش شد و در اختیار شما عزیزان قرار گرفت لطفا با ارایه سوالات و پیشنهادات خود در تکمیل شدن اطلاعات کانال همراه ما باشید

فهرست اموزش های مخصوص زبان C ۵ مورد از دلایل اهمیت یادگیری برنامه نویسی نکته هایی که میتونم برای بالابردن تخصص در برنامه نویسی اشاره کنم پیشینه برنامه نویسی و زبان سی برنامه نویسی ساختار یافته دستورات پیش پردازنده کلاس حافظه متغیر ها تعریف و مقدار دهی چنتا نکته در مورد سی اصل نام گذاری متغیر ها در سی عملگرها و انواع آن تبدیل متغیر ها ساختار تصميم if ساختار تصميم switch حلقه while حلقه do...while حلقه for عملگر علامت سوال ؟ تعریف متغیر ها تعریف و مقدار دهی رشته ها دستور goto دستور break دستور continue ثابت های Escape Sequences توابع استاندارد سی رشته ها در زبان سی رشته_ های چند بعدی در زبان سی تعریف و نوشتن توابع دستور Return رشته ها در ورودی توابع تابع بازگشتی یا recursion دامنه و طول عمر متغیرها مثال برای درک بشتر نوشتن توابع اشاره گرها اشاره گرها در ورودی توابع حافظه پویا در سی چند مثال در خصوص حافظه های پویا و رشته ها رشته های کاراکتری دستکاری رشته در زبان C با استفاده از توابع کتابخانه نمونه مثال های عملی در خصوص رشته های کاراکتری استراکچر یا ساختار استراکچر در استراکچر انتقال ساختار به یک تابع یونیونها دسترسی به اعضا در یونیونها فرق یونیونها و ساختارها ارسال union به یک تابع پیش پردازنده ها و ماکرو ها در سی پیش پردازنده های Conditional Compilation ماکرو های Predefined Macros ماکرو هایی برای تغییر بیتی در پورت یا متغیر ها توضیحاتی در خصوص کتابخانه اقای چان و نکات آموزشی آن نکته های اموزشی در فایل integer.h کتابخانه فت اقای چان کتابخانه xprintf اقای چان تمرین برنامه نویسی c و نمونه سوال دستور پیش پردازنده #pragma once روش نصب کامپایلر GCC و ادیتور کدبلاک نمونه سوال و تمرین برنامه نویسی چند مثال برای ایجاد هرم و الگو با اعداد و کارکتر ها تکنیک برنامه نویسی اشاره گر به تابع معرفی کامپایلر GCC به صورت انلاین استیت ماشین توضیح و نمونه کد نمونه کد های مختلفی بر مبنای اموزش های قبلی انسی سی و روند کامپایل در زبان سی ادامه نمونه کد ها معرفی لینک کامپایلر انلاین gcc فایل maikfile و کاربرد ان سوالی برای درک بیشتر اسراکچر ها و چیدمان اعضا سوالی برای اموزش دستور شرط

آغاز C از مبتدی تا حرفه ای نوشته ایور هورتون

تابع فوق برای فیلتر کردن مقدار adc یا موارد مشابه مناسب هست این فیلتر به نام MA یا Moving Average Filter شناخته میشود با این تابع به راحتی میتونید چند کانال مختلف رو فیلتر کنید ورودی تابع newValue مقدار خونده شده جدید و channel شماره کانال خروجی تابع مقدار فیلتر شده در این تابع مقدار خروجی با یه شیب بالا یا پایین میره و با هر ورودی که بهش بدید یه مقدار میتونید ازش داشته باشید نیازی به تعداد زیادی از نمونه های اندازه گرفته شده یا بافر نداره و حافظه رم کمتری اشغال میکنه توجه داشته باشید برای استفاده از این فیلتر بهتره ازش در بازه های زمانی ثابت استفاده بشه برای مثال هر 1 میلی ثانیه یک بار

uint16_t calc_filter (uint16_t newValue, uint8_t channel){ #define FILTER_LENGTH 32 #define MAX_CHANNEL 3 #define HYSTERSIS 0 static uint32_t Sum[MAX_CHANNEL]; static uint16_t Array[MAX_CHANNEL][FILTER_LENGTH]; static uint8_t Index[MAX_CHANNEL]; static uint16_t oldValue[MAX_CHANNEL]; Sum[channel] -= Array[channel][Index[channel]]; Array[channel][Index[channel]] = newValue; Sum[channel] += newValue; Index[channel]++; if (Index[channel] >= FILTER_LENGTH)Index[channel] = 0; newValue = Sum[channel] / FILTER_LENGTH; if ((newValue > (oldValue[channel] + HYSTERSIS)) || (oldValue[channel] > (newValue + HYSTERSIS))) { oldValue[channel] = newValue; } return(oldValue[channel]); }

photo content

کدی ساده برای تبدیل اعداد فلوت به رشته void reverse(char* str, int len){ int i = 0, j = len - 1, temp; while (i < j) { temp = str[i]; str[i] = str[j]; str[j] = temp; i++; j--; } } int itoa(int x, char str[], int d){ int i = 0; while (x) { str[i++] = (x % 10) + '0'; x = x / 10; } while (i < d) str[i++] = '0'; reverse(str, i); str[i] = '\0'; return i; } void ftoa(float n, char* res, int afterpoint){ int ipart = (int)n; float fpart = n - (float)ipart; int i = itoa(ipart, res, 1); if (afterpoint != 0) { res[i] = '.'; fpart = fpart * pow(10, afterpoint); itoa((int)fpart, res + i + 1, afterpoint); } }