vim & ^M

İstenmiyen ^M karakterini vim altında silmek için,

:%s/^M//g

Protosocketler

Nedir ?

  • Protosocket kütüphanesi; uip stack için, geleneksel BSD socket arayüzünü sağlamaktadır.
  • Protosocket kütüphanesi, sequential şekilde çalışmaktadır.
  • Sadece TCP bağlantılarında çalışmaktadır.
  • Protosocket kütüphanesi, ardışıl kontrol akışı sağlamak için [[Protothread]] kullanmaktadır.
  • Protosocket kütüphanesi, verileri tekrar göndermeyi düşünmeden gönderme imkanı sağlayan fonksiyonlar sağlamaktadır.
  • Her protosocket, protothread olarak çalıştığı için PSOCK_BEGIN() ile başlamalıdır. ve PSOCK_EXIT() ile bitmektedir.

Gerekli Kütüphaneler

psock.h

Fonksiyonlar

  •  kullanılan struct yapısı örneği

// struct tanımlanıyor
typedef struct hello_world_state {
  struct psock p;
  char inputbuffer[10];
  char name[40];
} uip_tcp_appstate_t;
// struct kullanılmadan önce ayarlanıyor
struct hello_world_state *s = &(uip_conn->appstate);

  •  Protosocketi ilklendirmek

PSOCK_INIT(&s->p, s->inputbuffer, sizeof(s->inputbuffer));

  • protosocket kullanılmadan çağırılmalıdır.
  • İlk parametre; protosockette pointerdır.
  • protosocket için input buffer a pointerdır.
  • input buffer boyutudur.

; Protosocketi başlatmak için

PSOCK_BEGIN(&s->p);

  • Diğer protosocket çağırılarından önce çağrılmalıdır.
  • parametre; başlatılacak olan protosockete pointerdır.

; String göndermek için

char konsol [] = "TI > ";
PSOCK_SEND_STR(&s->p, konsol);

  • ilk parametre; protosockette pointerdır.
  • İkinci parametre gönderilmek istenen stringdir.

; Karşıdan gönderileni almak için

PSOCK_READTO(&s->p, '\n');

  • Belirtilen karaktere kadar okuma yapılıyor.
  • Karşıdan gönderilene struct yardımıyla ulaşılabiliyor.
  • ilk parametre; protosockette pointerdır.
  • İkinci parametre, okumanın durdulacağı karakter.

; Socketi kapatmak için

PSOCK_CLOSE(&s->p);

  • protosocketi kapatır.

! Kaynaklar

[1] uip-1.0-refman
[2] uip hello-world örneği
[3] luminary enet_uip örneği

Tiddlywiki kılavuzu

TiddlyWiki notlarımızı kaydetmemize imkan sağlayan bir not defteridir. Tek bir html sayfadan oluşmaktadır. Yükleme ihtiyacı olmadan flash bellekte veya mail adresimizde kolayca saklanabilir.  Yazıları formatlı şekilde  oluşturmak için dikkat edilmesi gereken  hususlar vardır. Bazıları şunlardır;

  • Başlık Oluşturmak

! Başlık 1

  • Liste Oluşturmak
* Eleman 1
* Eleman 2
  • Seçili Yazı Oluşturmak

@@ highlight @@

@@color(red): kırmızı yazı @@

  • Wiki kelimesi Oluşturmak

Wiki word Vurgu: [[Kelime]]

  • Metin biçimlendirme olayları
Kalın : "Kalın"
Üstü çizgili : --üstü çizgili--
altı çizgili : __altı çizgili__
yatık :  // yatık //
yatay çizgi : ----
alt yazı yazmak: Yazı ~~alt indis~~
üst yazı yazmak: Yazı ^^üst indis^^
  • Alıntı yapmak
> Level 1
  • Numaralı Liste Yapmak

# eleman 1

# eleman 2

  • Resim Eklemek
[img[javalogo.gif]]
  • Resmi Sağa ve Sola Eklemek

[>img[javalogo.gif]]

[<img[javalogo.gif]]

  • Link Vermek
[[Bloğum|http://gurcanyavuz.wordpress.com]]
  • Tarih Göstermek
# Bugün <<today>>
# Formatlı Bugün <<today 0DD-0MM-YYYY>>
  • Definition Lists
; terim
: açıklama
  • Öntanımlı Sayfa

Tiddly Sayfası açıldığında bizi karşılayan bir yazı tanımlamak için; DefaultTiddlers ile tanımlı yazıya açılması istenen yazının başlığı tanımlanır.

[[AnaSayfa]]

Kaynaklar
  1. http://www.tiddlywiki.com/
  2. http://tiddlywiki.org/wiki/TiddlyWiki_Markup

LM3S8962 Buton Kullanım Örneği

  • LM3S8962 arm cortex m3 kartındaki butonları kullanan bir uygulamadır.

#include "inc/hw_gpio.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "drivers/rit128x96x4.h"
void
GPIOFIntHandler(void)
{
    //
    // Clear the GPIO interrupt.
    //
    GPIOPinIntClear(GPIO_PORTF_BASE, GPIO_PIN_1); 
    RIT128x96x4StringDraw("SELECT", 48, 32, 15);
}
void
GPIOEIntHandler(void)
{
    //
    // Clear the GPIO interrupt.
    //
   GPIOPinIntClear(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_0) == 0)
		RIT128x96x4StringDraw("UP     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_1) == 0)
		RIT128x96x4StringDraw("DOWN     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_2) == 0)
		RIT128x96x4StringDraw("LEFT     ", 48, 32, 15);
   if(GPIOPinRead(GPIO_PORTE_BASE, GPIO_PIN_3) == 0)
		RIT128x96x4StringDraw("RIGHT     ", 48, 32, 15);  
}
int
main(void)
{
    //
    // Set the clocking to run directly from the crystal.
    //
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_8MHZ);
    //
    // Enable the peripherals used by this application.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
    //
    // Configure the push button as an input and enable the pin to interrupt on
    // the falling edge (i.e. when the push button is pressed). basılmasında kesme olsun
    //
    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_1);
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_STRENGTH_2MA,
                     GPIO_PIN_TYPE_STD_WPU);
    GPIOIntTypeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTF_BASE, GPIO_PIN_1);
    IntEnable(INT_GPIOF);

	//
	// E portu ayarlanıyor.
	//
    GPIOPinTypeGPIOInput(GPIO_PORTE_BASE, GPIO_PIN_0);
    GPIOPadConfigSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 
    				| GPIO_PIN_3, GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
    GPIOIntTypeSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 
    				| GPIO_PIN_3, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
    IntEnable(INT_GPIOE);
    //
    // Initialize the OLED display.
    //
    RIT128x96x4Init(1000000);
    RIT128x96x4StringDraw("But. Int Ex.", 30, 16, 15);
    //
    // Loop forever.  This loop simply exists to display on the OLED display
    //
    while(1)
    {   
    }
}

  • Select butonu için ve diğer butonlar için kesme tanımlandı.
  • OLED ayarlanıp, hangi butona basıldı ise ekranda o butonun adı yazdırılıyor.
  • startup_ccs.c dosyası altında butonlara tanımlanan kesmeler vektor tablosuna kaydedilir.
extern void GPIOFIntHandler(void);
extern void GPIOEIntHandler(void);
GPIOEIntHandler,                       // GPIO Port E
GPIOFIntHandler,                        // GPIO Port F

Kaynaklar
  1. Luminary Micro gpio_jtag örneği 

userdir altında php çalışmama problemi

public_html altında php çalışmasını  sağlamak için, /etc/apache2/mods-enabled/php5.conf, dosyası altında şu satırlara ‘#’ işareti koyularak php userdir altında aktif hale getirilir.

<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_value engine Off
</Directory>
</IfModule>

Kaynak
[1] http://devplant.net/2010/05/04/linux-php-not-working-in-userdir-public_html/

Mips & Airteis

  • Airteis RT-205 modemi kullanmaktayım.  İçerisinde linux çekirdeği bulunmaktadır.  Modeme telnet ile bağlanıp çeşitli bilgileri almak mümkündür.

Modeme Telnet ile Bağlanmak
loginde kullanıcı olarak “root” yazıyoruz, passwordu boş bırakabiliriz. Eğer web arayüzü için bir şifre tanımlamışsak burada o şifreyi kullanıyoruz.

gurcan@yavuz:~$ telnet 192.168.2.1
Trying 192.168.2.1...
Connected to 192.168.2.1.
Escape character is '^]'.

BusyBox on localhost login: root
Password:

* Bağlandığımızda aşağıdaki ekran bizi karşılar:

BusyBox v0.61.pre (2007.08.15-10:02+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

#

Cpu ait bilgiler
Modemin işlemcisine ait bilgiler.

# cat /proc/cpuinfo
processor               : 0
cpu model               : MIPS 4KEc V4.8
BogoMIPS                : 140.90
wait instruction        : no
microsecond timers      : yes
extra interrupt vector  : yes
hardware watchpoint     : yes
VCED exceptions         : not available
VCEI exceptions         : not available

Modemdeki işletim sistemine ait bilgiler

# cat /proc/version
Linux version 2.4.17_mvl21-malta-mips_fp_le (onur@otavil) (gcc version 2.95.3 20010315 (release/MontaVista)) #4 Wed Aug 15 13:09:13 EEST 2007

Memory Bilgileri

# cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
Mem:  14606336 14200832   405504        0   651264  5005312
Swap:        0        0        0
MemTotal:        14264 kB
MemFree:           396 kB
MemShared:           0 kB
Buffers:           636 kB
Cached:           4888 kB
SwapCached:          0 kB
Active:           5464 kB
Inactive:         2364 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:        14264 kB
LowFree:           396 kB
SwapTotal:           0 kB
SwapFree:            0 kB

Dış ip numarasını öğrenmek

# ifconfig | grep P-t
 inet addr:88.240.246.86  P-t-P:88.240.244.1  Mask:255.255.255.255

Kaynaklar
[1] http://www.pmx.it/DG834v2.html [erişim : 02.05.2011]

Dosyalarda String Aramak

 

 

 

Bulunulan dizin içerisindeki dosyalarda içinde ‘string ‘ kelimesi geçen dosyaları buluyor.

find . | xargs grep 'string' -sl

Kaynaklar

  1. http://www.liamdelahunty.com/tips/linux_find_string_files.php

ARM Cortex-M3

Özellikleri

  • Cortex™-M3 32-bit mikroişlemcidir.
  • It has a 32-bit data path, a 32-bit register bank, and 32-bit memory interfaces
  • Cortex-M3 işlemci, ARMv7-M mimarisi tabanlı ilk ARM işlemcisidir. Tasarım amacı, güçte yüksek performans ve düşük maliyetli gömülü sistemdir.
  • Cortex-M3 işlemci, 3-stage pipeline gelişmiştir.
  • Harvard Mimarisi tabanlıdır.
  • branch speculation, single cycle multiply ve hardware divide özelliklerer sahiptir.
  • Sadece Thumb-2 komut kümesi desktelenir.
  • Düşük maliyetli, düşük güç tüketimli 32 bit RISC işlemcidir.
  • CPU çekirdeğinin yanında, bir çok bileşene sahiptir. Bunlar; NVIC, MPU, Debug Access Port (DAP).
  • Sabit memory map sahiptir.

Kullanım Alanları

  • Düşük Maliyetli Mikrodenetleyicilerde
  • Endüstriyel kontrol sistemlerinde
  • kablosuz ağlarda
  • Otomobil gövde sistemlerinde
  • Tüketici Ürünlerinde
  • Veri iletişim Uygulamalarında : Örneğin Bluetooth ve ZigBee

Cortex-m3 işlemci ile Cortex-m3 tabanlı MCU

  • Cortex-m3 işlemcisi mikrodenetleyici chipin cpusudur. Buna ek olarak, Cortex-m3 tabanlı mikrodenetleyici başka bileşenlerede ihtiyaç duymaktadır.
  • Chip üreticileri Cortex-m3 işlemcisi lisansını aldıktan sonra , cortex-m3 işlemcisini kendi silikon tasarımlarına koymaktadırlar. Buna bellek, çevre ortamları ve giriş çıkışlar eklemektedirler. Her üreticinin farklı özelliklere sahip cortex-m3 tabanlı ürünleri mevcuttur.

Cortex-m3 ürünü seçim kriterleri

  • Çevrebirimi
  • Bellek
  • Saat Hızı
  • Kapladığı Alan (footprint)

Kaynaklar

[1] The Definitive Guide to the ARM CORTEX-M3, Joseph Yiu, 2nd Edition
[2] Workbook version 1-4 Stellaris Full Day.pdf
[3] Application Note 179 Cortex™-M3 Embedded Software Development

CCS 4 LM3S8962 Proje Oluşturma

 Mevcut Projeyi Dahil Etmek 

  • Project > Import Existing CCS/CCE Eclipse Project >

 Yeni Proje Oluşturmak 

  •  ”’File > New > CCS Project”’
  • “Project Name ” Kısmında projenin ismi belirlenir.
  •  ”Project Type” kısmında ”’ARM”’ Seçilir.
  •  ”Referenced Projects” kısımdan ”’driverlib”’ projeye dahil edilir.
  •  ”CCS Project Settings” penceresinde “Device Variant” bölümünden gerekli mikrodenetleyici seçilir. Ben LM3S8962 seçiyorum.
  •  Projeyi oluşturduk ancak herhangi bir kaynak dosya koymadık. Ayar işlemlerini yapacak olan ”’startup”’ dosyasını oluştururuz. StellarisWare örneklerinden herhangi birinden kopyalanır.
  •  Projeye kaynak dosyası ekleriz. ”’File > New > Source File >”’ Kaynak Dosyanın ismi belirtilir.
  • ”’File > New > Target Configuration File”’ dosyası ile ayar dosyası projeye eklenir. General Setup bölümünde Board kısmından hedef board seçilir.
  •  Projenin özellikleri içinde ”’Properties > C/C++ Build > Build Steps > Post Build Step”’ altındaki Command kısmına altaki satır kopyalanır.
"${CCE_INSTALL_ROOT}/utils/tiobj2bin/tiobj2bin.bat" "${BuildArtifactFileName}" 
"${BuildArtifactFileBaseName}.bin" "${CG_TOOL_ROOT}/bin/ofd470.exe" "${CG_TOOL_ROOT}/bin/hex470.exe" 
"${CCE_INSTALL_ROOT}/utils/tiobj2bin/mkhex4bin.exe"
  •  driverlib.lib dosyası ekleniyor. ”’C/C++ Build > Tool Settings > Basic Settings: > TMS470 Linker > File Search Path > Include library~”’ altına eklenir.
"${workspace_loc:/driverlib/Debug/driverlib.lib}"
  •  ”’C/C++ Build > Tool Settings > Basic Settings: > TMS470 Compiler > Include Options”’ buraya derleyicinin bakacağı yolları ekliyoruz. Aşağıdaki iki yol ekleniyor:
C:\StellarisWare
C:\StellarisWare\boards\ek-lm3s8962
  •  Eğer LWIP bir proje yapılıyorsa şunlarda path eklenmesi gerekiyor:
"C:\StellarisWare\third_party\lwip-1.3.2\src\include"
"C:\StellarisWare\third_party\lwip-1.3.2\src\include\ipv4"
"C:\StellarisWare\third_party\lwip-1.3.2\apps"
"C:\StellarisWare\third_party\lwip-1.3.2\ports\stellaris\include"
"C:\StellarisWare\third_party"

 Kaynaklar
[1] Quickstart-Eval-Kit-CCS.pdf

Python ile Seri Port Haberleşme

  • Gerekli paket kurulumu yapılıyor

# apt-get install python-serial

  • Seri port ile haberleşme yapılacak kartın (LM3S8962 EVB) bağlantı noktası belirleniyor.

gurcan@yavuz:~$ dmesg | tail
[35973.398531] usb 1-4.4: Ignoring serial port reserved for JTAG
[35973.399204] ftdi_sio 1-4.4:1.1: FTDI USB Serial Device converter detected
[35973.399329] usb 1-4.4: Detected FT2232C
[35973.399335] usb 1-4.4: Number of endpoints 2
[35973.399341] usb 1-4.4: Endpoint 1 MaxPacketSize 64
[35973.399346] usb 1-4.4: Endpoint 2 MaxPacketSize 64
[35973.399352] usb 1-4.4: Setting MaxPacketSize 64
[35973.399763] usb 1-4.4: FTDI USB Serial Device converter now attached to ttyUSB0
[35973.399802] usbcore: registered new interface driver ftdi_sio
[35973.399807] ftdi_sio: v1.5.0:USB FTDI Serial Converters Driver

 

  • ttyUSB0 noktasına bağlandığı görülüyor.

Seri Port ile bağlanma

  • Bağlantı yapabilmek için root haklarına sahip olmak gerekir.

>>> ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=1)
>>> x = ser.read(10)  # 10 byte  okunuyor
>>> ser.close()

Kaynaklar
[1] http://pyserial.sourceforge.net/shortintro.html [erişim : 19.06.2011]

Follow

Get every new post delivered to your Inbox.