Імпульсна відповідь заданого сигналу в Code Composer Studio

У цьому уроці ми розглядаємо основи мови програмування C. Поступово будемо переходити до глибшого розуміння, починаючи з роботи з pointer'ами (покажчиками), що є важливою частиною системного програмування.

Struct

Тип даних struct дозволяє об’єднувати різні типи даних у одну структуру. Наприклад, якщо у нас є студент, ми можемо створити структуру, що міститиме його номер студентського квитка, оцінки, ім’я, прізвище та інші характеристики. Це дає можливість зберігати всі ці дані в одному об’єкті.

Примітка: Оголошення struct зазвичай розміщується поза функцією main.

#include  
#include  

struct ogrenci {  
 int ogrNo;  
 double not;  
};  

int main() {  
 struct ogrenci ogr1;  
 ogr1.ogrNo = 10;  
 ogr1.not = 10.25;  
 printf("No: %d, Not: %f", ogr1.ogrNo, ogr1.not);  
 return 0;  
}

Можна також оголосити кілька об'єктів цього типу в одному рядку:

struct ogrenci {  
 int ogrNo;  
 double not;  
} ogr1, ogr2, ogr3;

typedef

Використовуємо typedef, щоб зробити код більш читабельним і уникнути постійного повторення оголошень типів. Це особливо корисно для довгих типів, таких як struct.

typedef struct ogrenci {  
 int ogrNo;  
 double not;  
} ogr;  

int main() {  
 ogr ogr1, ogr2;  
 ogr1.ogrNo = 10;  
}

Інший приклад з масивом:

#include  
#include  

typedef struct dd {  
 int a[10];  
} dizi;  

int main() {  
 dizi d1, d2;  
 for (int i = 0; i < 10; i++)  
   d1.a[i] = i;  
 d2 = d1;  
 for (int i = 0; i < 10; i++)  
   printf("%d %d\n", d1.a[i], d2.a[i]);  
 return 0;  
}

Виведення:

1 1  
2 2  
3 3  
4 4  
5 5  
6 6  
7 7  
8 8  
9 9

Typecasting

Типи даних можуть бути змінені через приведення типів (typecasting). Це особливо корисно, коли потрібно обробити різні типи даних, наприклад, поділ цілих чисел з результатом у типі double.

int main() {  
 int i = 10, j = 3;  
 double ort;  
 ort = i / j;  
 printf("Ort: %f\n", ort);  
}

Результат:

Ort: 3.0000

Ми очікуємо результат 3.33, але отримуємо ціле число. Щоб отримати точний результат, потрібно привести одне з чисел до типу double.

ort = (double)i / j;

Результат:

Ort: 3.3333 ✅

Інші приклади коду

Перетворення символу на ціле число:

char ch = 'a';  
int b;  
b = (int)ch;  
printf("ch: %c, b: %d\n", ch, b);

Результат:

ch: a, b: 97 (ASCI код)

Доступ до елементів масиву символів:

char a[] = {'A', 'D', 'E', 'M'};  
printf("a = %c", a[2]);

Результат:

a = E

Перебір масиву:

char a[] = {'A', 'D', 'E', 'M'};  
for (int i = 0; i < 4; i++)  
   printf("%c ", a[i]);

Результат:

A D E M

Створення масивів у C

Якщо ви не хочете ініціалізувати масив на початку, то при оголошенні потрібно вказати розмір:

int dizi[5];  
dizi[0] = 1;  
dizi[1] = 2;  
dizi[2] = 3;  
dizi[3] = 4;

Масив символів можна перетворити на рядок:

char a[] = {'A', 'D', 'E', 'M'};  
printf("%s\n", a);

Результат:

ADEM

Функції в C

Оголошення та використання функцій у C:

void yazdir() {  
 printf("Merhaba Dunya\n");  
}  

int main() {  
 yazdir();  
 return 0;  
}

Результат:

Merhaba Dunya

Функція з параметром:

void yazdir(int a) {  
 printf("main'den gelen deger: %d\n", a);  
}  

int main() {  
 yazdir(10);  
 return 0;  
}

Результат:

main'den gelen deger: 10

Функція для обчислення суми:

void topla(int a, int b) {  
 printf("Toplam: %d\n", a + b);  
}  

int main() {  
 topla(10, 7);  
 return 0;  
}

Результат:

Toplam: 17

Функція з поверненням значення:

int topla(int a, int b) {  
 return a + b;  
}  

int main() {  
 printf("Toplam: %d\n", topla(10, 7));  
 return 0;  
}

Альтернативний спосіб:

int t;  
t = topla(10, 7);  
printf("Toplam: %d\n", t);

Результат:

Toplam: 17

Оголошення функцій після main

Якщо функція оголошена після main, спочатку потрібно її декларацію:

int topla(int, int);  

int main() {  
 int t;  
 t = topla(10, 7);  
 printf("Toplam: %d\n", t);  
 return 0;  
}  

int topla(int a, int b) {  
 return a + b;  
}

Тепер код працює без помилок. Якщо функція повинна повертати не тільки суму, а й різницю, це неможливо зробити в одній функції, але є рішення:

🧠 Використовувати pointer'и! Вони дозволяють повертати кілька значень із функції. Наступного разу ми розглянемо, як працювати з pointer'ами (покажчиками) (Event Listener).

Перекладено з: Impulse response of a given signal on Code Composer studio