C/C++

gomulu programlama

gomulu programlama main fonku icinde yapilan her sey background process. diyelim ki 2 gorevimiz var. 1.‘si DAC cikisina bir sinyal verilmesi, 2.‘si I2C ile haberlesme. bu 2 gorevin interrupt priority’lerini ayarlama ile ilgili 2 durum olabilir. ya 1.‘si ya da 2.‘si oncelikli olmali. DAC cikisindan belli bir analog deger cikisi yapmamiz gerekiyor ve I2C haberlesmesi bu du-rumu yarida kesebilecek ise yani DAC’tan cikan sinyali bozma ihtimali varsa oncelikli interrupt DAC cikisi veren interrupt olmalidir. »

interrupts

Farkli zaman araliklarinda calisan 2 interrupt int main () { timer_1.start(); timer_2.start(); while(){ if(timer_1.read_ms()>=200){ task_1(); timer_1.reset(); } if(timer_2.read_ms()>=1000){ task_2(); timer_2.reset(); } } } void task_1(){ // do something } void task_2(){ // do something } Scheduled programming need to be careful with the amount of code how long it takes to execute İf we need to run a task every 1 ms, task must take less than 1 ms. »

lcd kod degisimi

bir takograf projesinde (lcd kodlari icin) kullanilmak uzere yazildi. muhtemelen kimsenin de isine yaramayacaktir. dil : c // ################################################################## // author : yasin tasan // date : 12.10.2012 // brief : lcd karakter kodlari ureten GLCD Font Creator isimli // programın urettigi kodlari, proje ihtiyacına gore // olan 9x14 pixellik boyutlara cevirir. // ################################################################## #include "stdafx.h" #define SIZE 359 unsigned char TransferAndWrite(unsigned char *temp_stack, unsigned char size); int main() { unsigned char stack[55]; unsigned char temp_lcd[16][16]; unsigned char characters[96][329]; unsigned char char_2_stack[2]; unsigned char lcd[14][2]; unsigned char stack_lcd[14][2]; char line[SIZE]; unsigned int i; char test = 0 ; unsigned int line_number = 0; FILE *output_file_pointer; FILE *input_file_pointer; // output dosyasi varsa sil system("erase lcd_code_output. »

line shuffle

kelime ezberleme veya sinav sorularina calisirken sorulari ayni sira ile cozme yerine, kullanici karsisina tum sorularin karistirilarak verilmesi icin yazildi. derlenmis dosya line_shuffling.exe input dosyasi file.txt output dosyasi shuffled_file.txt // coded by: yasin tasan #include "stdafx.h" #include "stdio.h" #include <stdlib.h> #include <time.h> #include<conio.h> void ReadFileOpen(); int CountLines(char *filename); void ReadFileClose(); void ShuffleLines(); void swap(int *a, int *b); void WriteFileOpen(); void WriteFileClose(); void WriteShuffledData(); FILE *ReadFilePointer; FILE *WriteFilePointer; errno_t err; char Line[1000]; unsigned int LineNumber; int *RandomizeArray; unsigned char EndChar; unsigned int LineCounter; int main() { printf("\n"); printf("Explanation: Line shuffling in a text file\n"); printf("Max line length must be 1000 characters\n"); printf("Input file name must be file. »

mail box

mail box /*---------------------------------------------------------------------------- Designers Guide to the Cortex-M Family CMSIS mailbox Example *----------------------------------------------------------------------------*/ #include "STM32F10x.h" #include "cmsis_os.h" #include "Board_LED.h" typedef struct //define the mail slot format { uint8_t LED0; uint8_t LED1; uint8_t LED2; uint8_t LED3; } mail_format; osMailQDef(mail_box, 16, mail_format); //define the mailbox osMailQId mail_box; //define the mailbox id void LED_Producer (void const *argument) { uint8_t led0[12] = {1,0,0,0,1,1,1,1,0,0,0,0}; //create the patterns to send to the mailbox uint8_t led1[12] = {0,2,0,0,0,2,2,2,2,0,0,0}; uint8_t led2[12] = {0,0,4,0,0,0,4,4,4,4,0,0}; uint8_t led3[12] = {0,0,0,8,0,0,0,8,8,8,8,0}; uint8_t index; mail_format *LEDtx; //define a pointer in the mailslot format while (1) { for(index=0;index<12;index++) { LEDtx = (mail_format*)osMailAlloc(mail_box, osWaitForever); //allocate a mailslot LEDtx->LED0 = led0[index]; //Populate it with data LEDtx->LED1 = led1[index]; LEDtx->LED2 = led2[index]; LEDtx->LED3 = led3[index]; osMailPut(mail_box, LEDtx); //Post the mail to the mailbox osDelay(100); } } } void LED_Consumer (void const *argument) { osEvent evt; //declare an osEvent variable mail_format *LEDrx; //define a pointer in the mailslot format while (1) { evt = osMailGet(mail_box, osWaitForever); //wait until a message arrives if(evt. »

memory pool

memory pool #include <cmsis_os.h> #include "Board_LED.h" typedef struct { uint8_t canData[8]; uint8_t canData_2[8]; } message_t; osPoolDef(mpool, 16, message_t); //define memory pool osPoolId mpool; osMessageQDef(queue, 16, message_t); //define message queue osMessageQId queue; void producer_thread (void const *args) { message_t *message; //define pointer for memory pool buffer uint8_t index,testData = 0x55; while (1) { if(testData == 0xAA) testData = 0x55; else testData = 0xAA; message = (message_t*)osPoolAlloc(mpool); //Allocate a memory pool buffer for(index =0;index<8;index++) { message->canData[index] = testData; //populate buffer with data message->canData_2[index] = testData*2; //populate buffer with data } osMessagePut(queue, (uint32_t)message, osWaitForever); //Post pointer to memory pool buffer osDelay(1000); } } void consumer_thread (void const *args) { while (1) { osEvent evt = osMessageGet(queue, osWaitForever); //wait for message to arrive if (evt. »

message queue

message queue /*---------------------------------------------------------------------------- Designers Guide to the Cortex-M Family CMSIS RTOS Message Queue Example *----------------------------------------------------------------------------*/ #include "STM32F10x.h" #include "cmsis_os.h" #include "Board_LED.h" osMessageQId Q_LED; //define the message queue osMessageQDef (Q_LED,0x16,unsigned char); osEvent result; void led_Thread1 (void const *argument); void led_Thread2 (void const *argument); osThreadDef(led_Thread1, osPriorityAboveNormal, 1, 0); osThreadDef(led_Thread2, osPriorityNormal, 1, 0); osThreadId T_led_Thread1; osThreadId T_led_Thread2; osThreadId T_main; /*---------------------------------------------------------------------------- Task 2 'ledOff': switches the LED off *---------------------------------------------------------------------------*/ void led_Thread1 (void const *argument) { for (;;) { result = osMessageGet(Q_LED,osWaitForever); //wait for a message to arrive LED_On(result. »

modbus

rs485 ile olur, rs232 ile olur, optik kabloyla olur, yünle olur, tüyle olur haberleşmenin fiziksel altyapısı farketmez. modicon adlı firmanın geliştirdiği bir haberleşme şeklidir. temel olarak birbirine aynı haberleşme hattı üzerinden seri bağlı cihazların birbirinden farklı eşsiz adresleri vardır. birbirine bağlı bu cihazlardan biri master (efendi) diğerleri slave (köle) dir. efendi olan cihaz tüm seri haberleşme hattına (broadcast) der ki; “ulan ameleler aranızda adresi x olan, bana register’larının şu adresten şu adrese kadar olan kısmı yollasın bekliyom ([kölenin adresi][efendinin isteği][kölenin regisrter’larının neresinden isteniyor] [dediğim anlaşıldı mı])“. »

mulakat sorusu

bir firmanin is basvurusu sirasinda mulakatta soruldu. soru : Elimizde sadece harflerden ve boşluklardan oluşan (noktalama işaretleri veya sayılar yok) uzun stringler var. Bu stringlerin içinde bazı harfler tekrar ediyor, mesela ‘a’ harfi 20 farklı indexte bulunabiliyor. Biz, verilen bir sayı kadar veya daha fazla tekrarlanan harfleri silmek istiyoruz. Örnek olarak “2” sayısı verildiğinde, 2 kez ya da daha fazla tekrarlayan harfler string’den çıkarılacak. ornek: Elimizdeki string “aaba kouq bux” olduğunu düşünelim. »