카테고리 없음 2007. 5. 8. 08:31

하나로 공유기 제한 거는가??

지난 주말에 갑자기 공유기가 작동이 안됨.

내가 가진 공유기는, Fonera와 Linksys WRT54G v4.

둘다 DD-WRT 핵펌을 쓰고 있다.

PC를 바로 연결할 경우의 인터넷을 문제가 없었으며,
단지 공유기만이 IP를 제대로 받지 못하는 문제가 있었다.

사실 주말동안 깨작깨작 해결해 보려고 했으나 하지 못하였다.
토요일 잠시 되는 듯 하다가, 일요일 다시 해 보니 안되었다.
아마도 인터넷 시스템 업그래이드가 이 시점이었나 보다.

회사에 출근하여,
신입사원의 컴퓨터 이름을 보고 필터링하는 것이 아니냐는 의견에 따라.
공유기의 MAC Cloning을 적용하여 보았더니..
공유기 작동!!!.

결국.. 단지 하나로에서 MAC을 보고 IP를 안주는 것 같다.
다른 지역에서는 잘 된다고 하니..
아마도 내가사는 지역에서 처음으로 제한을 거는 것 같다.

생활의 달인 2007. 3. 14. 09:21

콩나물 키우기.

콩나물 키우기는 여름에 어렵다는데..
이유는 온도이다.
온도는 약 20도를 유지해야 잘 자란다고 한다.

여름에 키우려면 온도유지가 관건!.
그래서 통풍이 잘 되는 곳에서 키워야 한다고 하는데....
이를 위해서 작은 팬을 사용하는 것도 좋은 것 같다.
위쪽이나 아래쪽에서 강제로 팬을 돌려서 공기를 돌려주는 방식.

또 생각할 점이라면,
물을 준 후, 완전히 건조되는 것을 방지하기 위하여,
바닦에 부직포같이 물을 잡고 있을 수 있는 천같은 것을 깔아주는 것도 좋을 듯..

물은 자동으로 주는 것이 좋을 것 같다.

연구에 의하면,
처음 3일은 3시간마다 3분씩주고,
그 다음 3일은 4시간마다 3분씩 혹은 2시간마다 3분씩 주는 방법이 좋다고 한다.

2~4시간마다 한번씩 줘야 하므로, 새벽에 일어나서 주지 않거나,
맞벌이라면 자동으로 물주는 기계가 필수사항임!
---->이거 장사 되겠다. 맞벌이 부부를 위한 콩나물 키우게.. ;)

카테고리 없음 2007. 3. 12. 19:49

GCC-AVR library를 이용한, standard IO test..

GCC-AVR의 기본 library에는 printf나 scanf류의 함수들이 있다.

이들 함수는 putchar와 getchar만 define해 주면 바로 사용할 수 있다.

예제:

=========


#include <stdint.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/delay.h>
#define RX_BUFSIZE 80


void   uart_init(void);
int    uart_putchar(char c, FILE *stream);
int    uart_getchar(FILE *stream);


FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);

int
main(void)
{
// unsigned int addr;
 unsigned int value;
 uint8_t* addr;
 char buf[80];
 uart_init();

 stderr = stdout = stdin = &uart_str;

 printf("SKA_MON start\n");
 while(1)
 {
  printf("$>");
  if (fgets(buf, sizeof(buf) - 1, stdin) == NULL)break;

  switch (tolower(buf[0]))
  {
   default:
    printf("Unknown command: %s\n", buf);
    break;
   case '\n':
    break;
   case 'w':
    if (sscanf(buf, "%*c %x %x", &addr, &value) > 0)
    {
     printf( "Write 0x%x, 0x%x\n", addr, value);
     *addr = (uint8_t)value;
    }
    else printf("sscanf() failed\n");
    break;
   case 'r':
    if (sscanf(buf, "%*c %x", &addr) > 0)
    {
     printf("value at 0x%x = 0x%x\n", addr, *addr);
    }
    else printf("sscanf() failed\n");
    break;
  }
 }
 return 0;
}


/*
* Initialize the UART to 9600 Bd, tx/rx, 8N1.
*/
void
uart_init(void)
{
 UBRRL =25;                                    // baud rate..
 UCSRA = _BV(U2X);
 UCSRB = _BV(TXEN) | _BV(RXEN);                // enable uart tx & tx_int & rx & rx_int
}


/*
* Send character c down the UART Tx, wait until tx holding register
* is empty.
*/
int
uart_putchar(char c, FILE *stream)
{
 if (c == '\a')
 {
  fputs("*ring*\n", stderr);
  return 0;
 }
 if (c == '\n') uart_putchar('\r', stream);
 loop_until_bit_is_set(UCSRA, UDRE);
 UDR = c;
 return 0;
}

// getchar는 echo때문에 조금 복잡하다.
int
uart_getchar(FILE *stream)
{
 uint8_t c;
 char *cp, *cp2;
 static char b[RX_BUFSIZE];
 static char *rxp;
 if (rxp == 0)
  for (cp = b;;)
 {
  loop_until_bit_is_set(UCSRA, RXC);
  if (UCSRA & _BV(FE))
   return _FDEV_EOF;
  if (UCSRA & _BV(DOR))
   return _FDEV_ERR;
  c = UDR;
  /* behaviour similar to Unix stty ICRNL */
  if (c == '\r') c = '\n';

  if (c == '\n')
  {
   *cp = c;
   uart_putchar(c, stream);
   rxp = b;
   break;
  }
  else if (c == '\t')
   c = ' ';
  if ((c >= (uint8_t)' ' && c <= (uint8_t)'\x7e') ||
   c >= (uint8_t)'\xa0')
  {
   if (cp == b + RX_BUFSIZE - 1)
    uart_putchar('\a', stream);
   else
   {
    *cp++ = c;
    uart_putchar(c, stream);
   }
   continue;
  }
  switch (c)
  {
   case 'c' & 0x1f:
    return -1;
   case '\b':
   case '\x7f':
    if (cp > b)
    {
     uart_putchar('\b', stream);
     uart_putchar(' ', stream);
     uart_putchar('\b', stream);
     cp--;
    }
    break;
   case 'r' & 0x1f:
    uart_putchar('\r', stream);
    for (cp2 = b; cp2 < cp; cp2++)
     uart_putchar(*cp2, stream);
    break;
   case 'u' & 0x1f:
    while (cp > b)
    {
     uart_putchar('\b', stream);
     uart_putchar(' ', stream);
     uart_putchar('\b', stream);
     cp--;
    }
    break;
   case 'w' & 0x1f:
    while (cp > b && cp[-1] != ' ')
    {
     uart_putchar('\b', stream);
     uart_putchar(' ', stream);
     uart_putchar('\b', stream);
     cp--;
    }
    break;
  }
 }
 c = *rxp++;
 if (c == '\n')
  rxp = 0;
 return c;
}