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
@@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
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
- 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
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)
[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]
Yorum yapın