Ynt: Saçma mı oldu ? (İyi yazılım nedir ? nasıl olur ?)

Başlatan baran123, 20 Nisan 2015, 00:21:57

baran123

Ccs ödevi yapıyordum RaMu hocamın öğrettiği bir yöntem akııma geldi.Çok fazla led var output_high yapmaktan iliğim kurudu.Bende şöyle bir şey yaptım.

typedef struct tagREG 
{
   int1 p0:1;
   int1 p1:1;
   int1 p2:1;
   int1 p3:1;
   int1 p4:1;
   int1 p5:1;
   int1 p6:1;
   int1 p7:1;
} REG;

REG PORTAbits; 
REG TRISAbits;
#byte TRISABits = getenv("SFR:TRISA") 
#byte PORTAbits = getenv("SFR:PORTA")

REG PORTBbits; 
REG TRISBbits;
#byte TRISBBits = getenv("SFR:TRISB") 
#byte PORTBbits = getenv("SFR:PORTB")

REG PORTCbits; 
REG TRISCbits;
#byte TRISCBits = getenv("SFR:TRISC") 
#byte PORTCbits = getenv("SFR:PORTC")

REG PORTDbits; 
REG TRISDbits;
#byte TRISDBits = getenv("SFR:TRISD") 
#byte PORTDbits = getenv("SFR:PORTD")

REG PORTEbits; 
REG TRISEbits;
#byte TRISEBits = getenv("SFR:TRISE") 
#byte PORTEbits = getenv("SFR:PORTE")

yaptım artık
portb = 0xff; 
//ve
#define PORT_LED  PORTBbits.p0
#define TRIS_LED   TRISBbits.p0 //şeklinde tanımlayıp 
PORT_LED = 1\0;  TRIS_LED  = 1/0; diye kullanabiliyorum.

Saçma mı oldu bu şekilde ?

hatta direk programı vereyim

main.h
#include <16F877A.h>
#device ADC=10
#fuses XT, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT
#use DELAY(CRYSTAL=4MHz, CLOCK=4MHz)

#include <stdbool.h>
#include "lcd.c"

typedef struct tagREG 
{
   int1 p0:1;
   int1 p1:1;
   int1 p2:1;
   int1 p3:1;
   int1 p4:1;
   int1 p5:1;
   int1 p6:1;
   int1 p7:1;
} REG;

REG PORTAbits; 
REG TRISAbits;
#byte TRISABits = getenv("SFR:TRISA") 
#byte PORTAbits = getenv("SFR:PORTA")

REG PORTBbits; 
REG TRISBbits;
#byte TRISBBits = getenv("SFR:TRISB") 
#byte PORTBbits = getenv("SFR:PORTB")

REG PORTCbits; 
REG TRISCbits;
#byte TRISCBits = getenv("SFR:TRISC") 
#byte PORTCbits = getenv("SFR:PORTC")

REG PORTDbits; 
REG TRISDbits;
#byte TRISDBits = getenv("SFR:TRISD") 
#byte PORTDbits = getenv("SFR:PORTD")

REG PORTEbits; 
REG TRISEbits;
#byte TRISEBits = getenv("SFR:TRISE") 
#byte PORTEbits = getenv("SFR:PORTE")

#define Buzzer  PIN_E0
#define Blink1  PIN_E1
#define Blink2  PIN_E2

#define S1 PIN_D0
#define Y1 PIN_D1  //BLOK1
#define K1 PIN_D2

#define S2 PIN_D3
#define Y2 PIN_D4  //BLOK2
#define K2 PIN_D5

#define S3 PIN_D6
#define Y3 PIN_D7  //BLOK3
#define K3 PIN_A0

#define S4 PIN_A1
#define Y4 PIN_A2  //BLOK4
#define K4 PIN_A3
#define LED PIN_A5

#define BUTTON0 PIN_B0
#define BUTTON1 PIN_B1
#define BUTTON2 PIN_B2
#define BUTTON3 PIN_B3

//#define PORT_LED  PORTBbits.p0
//#define TRIS_LED  TRISBbits.p0


main.c
#include <main.h>

static unsigned int8 tren_state = 0;
static unsigned int8 Counter = 0;
static bool Flag = false;
static bool LED_State = false;

static void MCU_Init(void);
static void Button_Control(void);

#int_timer0
void Timer0_Interrupt(void) 
{ 
   disable_interrupts(INT_TIMER0);
   
   if(Flag)
   {
      if(Counter == 250)
      {
         output_toggle(Buzzer);
         Counter = 0;
         LED_State ^= 1 << 0;
         
         if(LED_State)
            output_toggle(Blink1);
         else
            output_toggle(Blink2);
         
      }
      else
         Counter++;
   }
      
   set_timer0(240); 
   enable_interrupts(INT_TIMER0);
} 

void main(void)
{
   MCU_Init();
   
   printf(lcd_putc, "\fMr. DUMANLIOGLU\nTren State : ");
   
   output_high(Y1);
   output_high(Y2);
   output_high(Y3);
   output_high(Y4);
   
   while(TRUE)
   {
      Button_Control();
      lcd_gotoxy(14, 2);
      printf(lcd_putc, "%d", tren_state);
   }
}

static void MCU_Init()
{
   setup_comparator(NC_NC_NC_NC);
   port_b_pullups(0x0F);
   setup_ccp1(CCP_OFF);
   setup_ccp2(CCP_OFF);
   setup_vref(FALSE);
   
   setup_timer_0(T0_INTERNAL | T0_DIV_64 | T0_8_BIT);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_16, 124, 1);
   
   set_timer0(240);
   
   enable_interrupts(INT_TIMER0); 
   enable_interrupts(GLOBAL); 

   set_tris_a(0x00);
   set_tris_b(0x0F);
   set_tris_c(0x00);
   set_tris_d(0x00);
   set_tris_e(0x00);
   
   output_a(0x00);
   output_b(0x0F);
   output_c(0x00);
   output_d(0x00);
   output_e(0x00);

   lcd_init();
}

static void Button_Control(void)
{
   if(!input(BUTTON0))
   {
      delay_ms(50);
      Flag = true;
      
      tren_state = 1;
      output_low(Y1);
      output_low(Y4);
      output_high(K1);
      output_high(S4);     
   }
   
   if(!input(BUTTON1))
   {
      delay_ms(50);
      Flag = false;
      tren_state = 2;
      output_low(S4);
      output_low(K1);
      output_high(S1);
      output_low(Y2);
      output_high(K2);
      output_high(Y4);
   }
   
   if(!input(BUTTON2))
   {
      delay_ms(50);
      tren_state = 3;
      output_low(s1);
      output_high(y1);
      output_low(k2);
      output_high(s2);
      output_low(y3);
      output_high(k3);
   }
   
   if(!input(BUTTON3))
   {
      delay_ms(50);
      tren_state = 4;
      output_low(s2);
      output_high(y2);
      output_low(k3);
      output_high(s3);
      output_low(y4);
      output_high(k4);
   }
}

Artık bir satır bir şey yaparken nasıl yapsam diye 40 dk düşünüyorum
mesela sadece main içinde kullacaksam int sayi; yerine static unsigned int8 sayi; yazıyorum olabildiğince sınırlandırmaya çalışıyorum.Böyle yapmak kötümü ? Platformu unutalım en iyi yazılım için nasıl bir kulan yapmalıyız nelere dikkat etmeliyiz ?

mesaj birleştirme:: 20 Nisan 2015, 14:23:30

Son paylaştığım kısımdaki outputhigh,tris,port komutlarını tanımladığım şekilde düzenleyeceğim.

berat23

bitfield kullanmak iyidir. herşeyi define etmeye gerek yok bence, struct içinden erişebilirsin ki zaten çoğu ide'de nokta koyduktan sonra struct içeriği gelir, iyi bir kolaylık. port_led o_led_şu_led diye uzun uzun defineler bence biraz amatör duruyor.

değişkenleri mümkün olan en ufak boyutta kullanmak en doğrusu fakat main içinde veya global bir değişkeni static yapmanın bir manası yok.

X-Fi

Baran kodunu işleyişine bakamadım ancak okunurluk ile ilgili genel bilgi verecek olursam  berat hocama ilaveten büyük küçük harf yazımına dikkat etmelisin, define ların hepsini BÜYÜK harf ile tanıt. Registerları ve structure ları baş harflerini büyük yaz. Registerlari alt tire ile yazma yapışık ama baş harfli büyük yaz. Böylece alt tireyi daha özel durumlarda ayraç yapabilirsin. Bu kuralları kendine göre geliştirip bir düzene oturt ve her projende uygula.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)