C 4 any Time @c_4_any_time Channel on Telegram

C 4 any Time

@c_4_any_time


آموزش زبان سی و نکات کلیدی آن
@C_4_any_Time
ادمین:
@Alma_Electronic

آموزشها به ترتیب اراعه شده لذا بهتره از ابتدای کانال مطالعه بشه

❗️انتشار اطلاعات فقط با ذکر منبع مجاز است !!!

C 4 any Time (Persian)

آیا دوست دارید زبان سی را به طور کامل یاد بگیرید؟ آیا به دنبال نکات کلیدی در زمینه زبان سی هستید؟ اگر پاسخ شما بله است، کانال Telegram با نام "C 4 any Time" مناسب شماست! در این کانال، تمام آموزش‌های مربوط به زبان سی به شما ارایه می‌شود. از مباحث پایه تا نکات پیشرفته، همه چیز را در اینجا پیدا خواهید کرد. ادمین این کانال آموزشی، @Alma_Electronic، آموزش‌ها را به ترتیب ارایه می‌دهد تا به شما کمک کند تا بهترین نتیجه را بگیرید. حتما از ابتدای کانال شروع کنید تا هیچ چیز از شما فرورفته نشود. برای عضویت در این کانال و دسترسی به تمام محتوا، به @c_4_any_time مراجعه کنید. همچنین لطفا توجه داشته باشید که انتشار اطلاعات این کانال فقط با ذکر منبع مجاز است! برای یادگیری زبان سی، همین حالا به کانال "C 4 any Time" بپیوندید و از بهترین آموزش‌ها بهره ببرید!

C 4 any Time

22 Nov, 13:07


#Cpp

The C++ Programming Language

- 4th Edition
- By Bjarne Stroustrup
- 1366 Pages

@DevTwitter

C 4 any Time

22 Nov, 13:07


The C++ Programming Language

C 4 any Time

09 Aug, 10:06


تابعی ساده و بسیار بهینه برای محاسبه رادیکال

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;
}

C 4 any Time

27 Apr, 15:11


نمونه مثال و خروجی

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> */

C 4 any Time

27 Apr, 15:11


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

منبع

C 4 any Time

27 Apr, 12:41


همونطوری که قبلا هم معرفی شده با استفاده از این افزونه میتونید کامپایلر GCC AVR رو به نسخه 1.11 اضافه کنید

روش نصب

C 4 any Time

27 Apr, 12:31


معرفی ادیتور ساده و سبک embitz

C 4 any Time

27 Apr, 11:32


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

همراه GDB debugger اختصاصی با امکانت بسیار کار بردی

با توجه به اینکه قابلیت پشتیبانی از کامپالیر های غیر از ARM در ورژن های بالاتر از 2 حذف شده دیگر امکان استفاده از این ادیتور برای میکرو های 8 بیتی مثل AVR و ... ممکن نیست
جهت استفاده از این ادیتور طبق اموزش های قبلی برای میکروهای 8 بیتی بهتر است از ورژن 1.11 استفاده شود

C 4 any Time

16 Apr, 00:32


با توجه به اینکه ترکیب بیتی فرمت متغیر های فلوت به صورت باینری نیست لذا به راحتی نمیشه از این متغیر ها برای ارسال یا دریافت توسط یوارت یا واحد های ارتباطی متداول بایتی استفاده کرد برای این کار یکی از راحت ترین روش ها تفکیک متغیر به 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);

C 4 any Time

11 Jan, 23:52


Turn Any Question to {Code}.

https://www.useblackbox.io/search

C 4 any Time

04 Dec, 23:33


یکی از قابلیت های جالب و بسیار کاربردی اما متاسفانه ناشناخته در زبان سی اشاره گر از نوع تابع هست
به کد زیر توجه کنید
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;
}

C 4 any Time

04 Dec, 23:17


گاهی اوقات نیازه که یه اشاره گر به اشاره گر داشته باشیم
برای مثال
int main()
{
    int a = 5;
    int* ptr = &a;
    int** d_ptr = &ptr;

    printf("Value of var = %d\n", a);
    printf("Value of var using single pointer = %d\n", *ptr);
    printf("Value of var using double pointer = %d\n", **d_ptr);
  
    return 0;
}

خروجی تابع فوق میشه

Value of var = 5
Value of var using single pointer = 5
Value of var using double pointer =
5

C 4 any Time

02 Dec, 13:23


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

لطفا با ارایه سوالات و پیشنهادات خود در تکمیل شدن اطلاعات کانال همراه ما باشید

C 4 any Time

02 Dec, 13:17


فهرست اموزش های مخصوص ARM


معرفی کامپیالر gcc
معرفی ادیتور ساده و سبک embitz
شروع کار با ارم و ایجاد پروژه
مرتب کردن فایل ها و پوشه ها
ایجاد یک فایل h یا هدر در پروژه
روش دیفاین پینهای IO
معرفی رجیستر های پین های IO
دیتاشیت کلی میکرو کنترلر های سری stm32f103
اخرین ورژن درایور SPL یعنی STM32F10x_StdPeriph_Lib_V3.5.0
توضیحاتی در خصوص درایور SPL
نوشتن تابعی برای انیشیال GPIO
فعال کردن اتصال بخش های مختلف به منبع کلاک
نوشتن تابع delay
معرفی توابعی برای نوشتن GPIO
نوشتن تابعی برای تغییر وضعیت یا Toggle پین
معرفی تایمر ها
نوشتن تابعی برای تنظیم کلاک میکرو
شروع کار با بخش تایمر و نوشتن تابعی برای اینیشیال تایمر
شروع کار با یوزارت یا ارتباط سریال
بلوک دیاگرام واحد یوزارت
رجیستر های یوزارت
یوزر منوال مخصوص یوزارت
نوشتن تابعی برای انیشیال یوزارت
نوشتن تابع وقفه یوزارت

C 4 any Time

02 Dec, 13:12


فهرست اموزش های مخصوص AVR


معرفی کامپیالر gcc
معرفی ادیتور ساده و سبک embitz
اموزش نصب ادیتور embitz و تنظیمات لازم
اموزش تنظیمات مخصوص تنظیمات کامپیالر gcc در ادیتور
شروع کار با ادیتور embitz و کامپایلر gcc
ایجاد پروژه AVR
اموزش کامپایل کردن پرژه
روش ایجاد فایل h یا هدر و اضافه کردن به پروژه
اموزش اصول نوشتن یک فایل h یا هدر
اموزش دیفاین پینها و بخش های مختلف سخت افزار
شروع نوشتن یک کد ساده در فایل main
اضافه کردن کتابخونه delay در پروژه های AVR
کار با تایمر ها
رجیستر های تایمر
بلوک دیاگرام تایمر های 16 بیتی
وقفه سراسری در AVR ها و اظافه کردن ماکرو های وقفه به کد
نوشتن تابع وقفه تایمر

C 4 any Time

02 Dec, 13:02


فهرست اموزش های مخصوص زبان 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 4 any Time

29 Nov, 23:46


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

C 4 any Time

08 Oct, 07:53


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

توجه داشته باشید برای استفاده از این فیلتر بهتره ازش در بازه های زمانی ثابت استفاده بشه برای مثال هر 1 میلی ثانیه یک بار

C 4 any Time

08 Oct, 07:50


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]);
}