==========================================================================================

NETWORK

==========================================================================================

<NETWORK>



=채팅프로그램



=입출력 다중화

-인터럽트 + 폴링


=FTZ서버 접속







-find --help

-find / -name




-dos창 -> taskmgr









=비밀번호 변경

passwd


=네트워크






=외부로 연결 : Bridged  (=> 설정 RESTART후 CUSTOM 설정으로 변경 => 고정 IP셋팅 됨)






=리눅스 네트워크 setup







-무선 IP address 설정          192.168.0.119

-Realtek :      gateway         

                DNS 서버 설정












-네트워크 설정 후

lan 껏다 켜야 함


/etc/init.d/network restart


-ping 192.168.0.1



=vmware 네트워크 설정 후









-telnet 리눅스설정ip






'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150817  (0) 2015.08.18
20150814  (0) 2015.08.17
20150812  (0) 2015.08.13
20150811  (0) 2015.08.11
20150810  (0) 2015.08.10
Posted by ahj333
,

==========================================================================================

ARM

==========================================================================================


<ARM>


=UART

-AVR과 RX/TX 반대 => 위치 바꾸기 => 다시 반대로..






=DBGU (Debug Unit)








-









=DMA 칩 ( CPU가 메모리 데이터 이동(COPY)이 아닌 다른 일(연산) 처리하도록 )

(장치간 CPU 안거치고 바로 연결)






=동기/ 비동기

-동기 - 특정 장치에 맞춰(clk)데이터 보내기 받기

-비동기 - 2선(RX,TX) START BIT(데이터인지 아닌지 모르므로 시작 신호 필요)




=SAMPLING ( 1을 언제 채취할 것인지 (시작/중간/끝))






=Test Mode

- Automatic Echo : RX - O TX - X : LOOPBACK

- Local Loopback (리눅스:가상의 랜카드) 외부 단절 - 자기가 보낸 데이터 받음

- Remote Loopback : RX - X TX - X : LOOPBACK













=PIO Disable




=상태





=


<PROJECT.H>

#ifndef _PROJECT_H
#define _PROJECT_H

#include "AT91SAM7S256.h"

#define MCK  48000000

// 2008.09.10.
#ifndef __ASSEMBLY__
#include "lcd.h"

void default_fiq_handler();
void default_irq_handler();
void default_spurious_handler();
#endif
// 2008.09.10.

#endif  // _PROJECT_H



<DBGU.H>

#ifndef __DBGU_H__
#define __DBGU_H__
#include <AT91SAM7S256.h>
#include "project.h"

#define BAUD      115200
#define DBGU_CD    (MCK/(16*BAUD))

unsigned char DBGU_Rx(void);
void DBGU_Tx(char );
void DBGU_Init(void);


#endif //__DBGU_H__


<DBGU.C>

#include "dbgu.h"

unsigned char DBGU_Rx(void)
{
  
while(0 == (*AT91C_DBGU_CSR & AT91C_US_RXRDY));
  
return *AT91C_DBGU_RHR;  
}

void DBGU_Tx(char cData)
{
  
while(0 == (*AT91C_DBGU_CSR & AT91C_US_TXRDY));
  *AT91C_DBGU_THR 
= cData;
  
return
;
}


void DBGU_Init(void)
{
  *AT91C_PIOA_ASR 
= AT91C_PA9_DRXD | AT91C_PA10_DTXD;  // Peripheral A setting
  *AT91C_PIOA_PDR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;  // PIO Disable
  *AT91C_DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX;    // Reset & Disable
  *AT91C_DBGU_MR = AT91C_US_PAR_EVEN | AT91C_US_CHMODE_NORMAL ;  // Parity:EVEN /CHmode: Normal
  *AT91C_DBGU_BRGR = DBGU_CD;              // Baud Rate setting
  *AT91C_DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN;    // Enable

  
  
//AT91C_US_RXDIS | AT91C_US_TXDIS;  // Disable   
  return;
}


<MAIN.C>

#include <project.h> 
#include "lcd.h"

void Init(void)
{
  LCD_Init();
  DBGU_Init();

  
return;
}

int main()
{  
  Init();
  
while(1)
  { 
    
LCD_Data(DBGU_Rx());    
  }
  
while (1);
  
return 0;
}


=DBGU TEST










'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150814  (0) 2015.08.17
20150813  (0) 2015.08.13
20150811  (0) 2015.08.11
20150810  (0) 2015.08.10
20150731  (0) 2015.08.10
Posted by ahj333
,

<ARM>


=UART

-AVR과 RX/TX 반대 => 위치 바꾸기





=DBGU (Debug Unit)






-









=DMA 칩 ( CPU가 메모리 데이터 이동(COPY)이 아닌 다른 일(연산) 처리하도록 )

(장치간 CPU 안거치고 바로 연결)






=동기/ 비동기

-동기 - 특정 장치에 맞춰(clk)데이터 보내기 받기

-비동기 - 2선(RX,TX) START BIT(데이터인지 아닌지 모르므로 시작 신호 필요)




=SAMPLING ( 1을 언제 채취할 것인지 (시작/중간/끝))



=Test Mode

- Automatic Echo : RX - O TX - X : LOOPBACK

- Local Loopback (리눅스:가상의 랜카드) 외부 단절 - 자기가 보낸 데이터 받음

- Remote Loopback : RX - X TX - X : LOOPBACK








<PROJECT.H>

#ifndef _PROJECT_H
#define _PROJECT_H

#include "AT91SAM7S256.h"

#define MCK  48000000

// 2008.09.10.
#ifndef __ASSEMBLY__
#include "lcd.h"

void default_fiq_handler();
void default_irq_handler();
void default_spurious_handler();
#endif
// 2008.09.10.

#endif  // _PROJECT_H


<DBGU.H>

#ifndef __DBGU_H__
#define __DBGU_H__
#include <AT91SAM7S256.h>
#include "project.h"

#define BAUD      115200
#define DBGU_CD    (MCK/(16*BAUD))

void DBGU_Init(void);

#endif //__DBGU_H__


<DBGU.C>

#include "dbgu.h"

void DBGU_Init(void)
{
  *AT91C_PIOA_ASR = AT91C_PA9_DRXD | AT91C_PA10_DTXD;  // Peripheral A setting
  *AT91C_DBGU_CR = AT91C_US_RXDIS | AT91C_US_TXDIS;  // Disable 

  // AT91C_US_RXEN | AT91C_US_TXEN;  // Enable
  //AT91C_US_RSTRX | AT91C_US_RSTTX;  // Reset
  return;
}


'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150813  (0) 2015.08.13
20150812  (0) 2015.08.13
20150810  (0) 2015.08.10
20150731  (0) 2015.08.10
20150730  (0) 2015.07.31
Posted by ahj333
,


<NETWORK>



==공유메모리




: shmget() :


: shmat() : attach

: shmdt() : detach

: shmctl() : 관리


-확인

: ipcs -m



-

<sharedmem.c>

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    key_t keyval 
= 2345;
    
int shmid;
    shmid = shmget(keyval, 
1024, IPC_CREAT |0666);
    
if(shmid == -1)
    {
        printf(
"shm Create failure\n");
        
return 1;
    }
    printf(
"shm Create success\n");
    
return 0;
}



:권한

        소유자  그룹    기타

-666 :  rwx    rwx    rwx

        110    110    110




-

<shm_producer>실행 전/후









-

<shm_procuder.c>

#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    
int shmid;

    
int *cal_num;
    
void *shared_memory = NULL;

    
shmid = shmget((key_t) 1234sizeof(int), 0666|IPC_CREAT);
    
if(shmid == -1)
    {
        perror(
"shmget failed : ");
        exit(
0);
    }

    
shared_memory = shmat(shmid, NULL, 0);
    
if(shared_memory == (void *)-1)
    {
        perror(
"shmat failed : ");
        exit(
0);
    }

    
cal_num = (int *)shared_memory;
    
while(1)
    {
        
*cal_num = *cal_num +2;
        sleep(
1);
    }
    
return 0;
}


<shm_consumer.c>

#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv)
{
    
int shmid;

    
int *cal_num;
    
void *shared_memory = NULL;

    
shmid =shmget((key_t)1234sizeof(int), 0);
    
if(shmid == -1)
    {
        perror(
"shmget failed : ");
        exit(
0);
    }

   
 shared_memory = shmat(shmid, NULL, 0);
    
if(shared_memory == (void *)-1)
    {
        perror(
"shmat failed : ");
        exit(
0);
    }

    
cal_num = (int *)shared_memory;

    
while(1)
    {
        sleep(
1);
        printf(
"Read Data : %d\n", *cal_num);
    }
    
return 0;
}








1. 멀티 P : PROCESS 여러개

2. 멀티 T : PROCESS 1개 THREAD 여러개

3. 다중 입출력 : PROCESS 1개





==세마포어(키)


(비행기 좌석 예약 : 같은좌석 중복 예약 안되도록 한사람이 예약 하는 동안 lock) : 동기화

=> 공유메모리 / 파이프 사용 불가 => 세마포어 사용(


<shm_producer_sem.c>

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

union semun
{
  
int val;
};

int main(int argc, char **argv)
{
  
int shmid;
  
int semid;

  
int *cal_num;
  
void *shared_memory = NULL;
  
union semun sem_union;

  
struct sembuf semopen = { 0, -1, SEM_UNDO};
  
struct sembuf semclose = { 01, SEM_UNDO};

  shmid 
= shmget((key_t)1234sizeof(int), 0666|IPC_CREAT);
  
if(shmid == -1)
  {
    
return 1;
  }

  semid 
= semget((key_t)34771, IPC_CREAT|0666);
  
if(semid == -1)
  {
    
return 1;
  }

  shared_memory 
= shmat(shmid, NULL, 0);
  
if(shared_memory == (void *)-1)
  {
    
return 1;
  }

  cal_num 
= (int *)shared_memory;
  sem_union.val 
= 1;
  
if(-1 == semctl(semid, 0, SETVAL, sem_union))
  {
    
return 1;
  }

  
while(1)
  {
    
int local_var = 0;
    
if(semop(semid, &semopen, 1== -1)
    {
      
return 1;
    }
    local_var 
= *cal_num +1;
    sleep(
1);
    *cal_num 
= local_var;
    printf(
"%d\n", *cal_num);
    semop(semid, 
&semclose, 1);
  }
  
return 0;
}


<shm_consumer_sem.c>

#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  
int shmid;
  
int semid;

  
int *cal_num;
  
void *shared_memory = NULL;

  
struct sembuf semopen = {0, -1, SEM_UNDO};
  
struct sembuf semclose = {01, SEM_UNDO};

  shmid 
= shmget((key_t)1234sizeof(int), 0666);
  
if(shmid ==-1)
  {
    perror(
"shmget failed : ");
    exit(
0);
  }

  semid 
= semget((key_t) 347700666);
  
if(semid == -1)
  {
    perror(
"semget failed : ");
    
return 1;
  }

  shared_memory 
= shmat(shmid, NULL, 0);
  
if(shared_memory == (void *)-1)
  {
    perror(
"shmat failed : ");
    exit(
0);
  }

  cal_num 
= (int *)shared_memory;

  
while(1)
  {
    
int local_var = 0;
    
// 세마포어 획득 실패시 : IPC_NOWAIT 아니므로 무한대기
    if(semop(semid, &semopen, 1== -1
    {
      perror(
"semop error : ");
    }
    local_var 
= *cal_num +1;
    sleep(
2);
    *cal_num 
= local_var;
    printf(
"count %d\n", *cal_num);
    semop(semid, 
&semclose, 1);
  }
  
return 0;
}



=












=시그널(소프트웨어 인터럽트: ctrl+C)(자바: 이벤트)(윈도우: 메세지)









<sig1.c>


#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void smart(int iNum)
{
    printf(
"INTERRUPT : %d\n", iNum);
    
//exit(0);
}

int main()
{
    signal(SIGINT, smart);
    
while(1)
    {
        sleep(
1);
        printf(
"-----------------------------\n");
    }
    
return 0;
}





void (*)(int);

- ^z : 프로세스 stop

- fg : foregrouond

- bg : background








=채팅프로그램



'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150812  (0) 2015.08.13
20150811  (0) 2015.08.11
20150731  (0) 2015.08.10
20150730  (0) 2015.07.31
20150729  (0) 2015.07.30
Posted by ahj333
,

<ARM>



=

// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- 
#define AT91C_AIC_PRIOR       (0x7 <<  0// (AIC) Priority Level
#define   AT91C_AIC_PRIOR_LOWEST               (0x0// (AIC) Lowest priority level
#define   AT91C_AIC_PRIOR_HIGHEST              (0x7// (AIC) Highest priority level
#define AT91C_AIC_SRCTYPE     (0x3 <<  5// (AIC) Interrupt Source Type
#define   AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL       (0x0 <<  5// (AIC) Internal Sources Code Label High-level Sensitive
#define   AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL        (0x0 <<  5// (AIC) External Sources Code Label Low-level Sensitive
#define   AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE    (0x1 <<  5// (AIC) Internal Sources Code Label Positive Edge triggered
#define   AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE    (0x1 <<  5// (AIC) External Sources Code Label Negative Edge triggered
#define   AT91C_AIC_SRCTYPE_HIGH_LEVEL           (0x2 <<  5// (AIC) Internal Or External Sources Code Label High-level Sensitive
#define   AT91C_AIC_SRCTYPE_POSITIVE_EDGE        (0x3 <<  5// (AIC) Internal Or External Sources Code Label Positive Edge triggered
// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- 
#define AT91C_AIC_NFIQ        (0x1 <<  0// (AIC) NFIQ Status
#define AT91C_AIC_NIRQ        (0x1 <<  1// (AIC) NIRQ Status
// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- 
#define AT91C_AIC_DCR_PROT    (0x1 <<  0// (AIC) Protection Mode
#define AT91C_AIC_DCR_GMSK    (0x1 <<  1// (AIC) General Mask


=외부 DISABLE

        *AT91C_PIOA_IDR = 1<<INT_PIN;                       // 인터럽트 핀 비 활성화

        *AT91C_AIC_IDCR = 1 << AT91C_ID_PIOA;      // 인터럽트 핀 컴맨드 비 활성화 -ref) p175


=외부 ENABLE

: 외부 -> PIOA ENABLE(15번핀) -> AIC ENABLE (장치:PIOA)    ( 외부 ==> 인터럽트 핸들러 )

: 부산 -> 문(성문) 통과          -> 남대문 통과                ( 부산 ==> 서울 )


        *AT91C_PIOA_IER = 1 << INT_PIN;                      //PIOA 인터럽트 핀 인터럽트 활성화

        *AT91C_AIC_IECR =  1 << AT91C_ID_PIOA;     //AIC 인터럽트 핀 인터럽트 활성화




=핸들러



=

<HEADER>

// ========== Register definition for AIC peripheral ========== 
#define AT91C_AIC_IVR   (AT91_CAST(AT91_REG *)   0xFFFFF100) // (AIC) IRQ Vector Register
#define AT91C_AIC_SMR   (AT91_CAST(AT91_REG *)   0xFFFFF000) // (AIC) Source Mode Register
#define AT91C_AIC_FVR   (AT91_CAST(AT91_REG *)   0xFFFFF104) // (AIC) FIQ Vector Register
#define AT91C_AIC_DCR   (AT91_CAST(AT91_REG *)   0xFFFFF138) // (AIC) Debug Control Register (Protect)
#define AT91C_AIC_EOICR (AT91_CAST(AT91_REG *)   0xFFFFF130) // (AIC) End of Interrupt Command Register
#define AT91C_AIC_SVR   (AT91_CAST(AT91_REG *)   0xFFFFF080) // (AIC) Source Vector Register
#define AT91C_AIC_FFSR  (AT91_CAST(AT91_REG *)   0xFFFFF148) // (AIC) Fast Forcing Status Register
#define AT91C_AIC_ICCR  (AT91_CAST(AT91_REG *)   0xFFFFF128) // (AIC) Interrupt Clear Command Register
#define AT91C_AIC_ISR   (AT91_CAST(AT91_REG *)   0xFFFFF108) // (AIC) Interrupt Status Register
#define AT91C_AIC_IMR   (AT91_CAST(AT91_REG *)   0xFFFFF110) // (AIC) Interrupt Mask Register
#define AT91C_AIC_IPR   (AT91_CAST(AT91_REG *)   0xFFFFF10C) // (AIC) Interrupt Pending Register
#define AT91C_AIC_FFER  (AT91_CAST(AT91_REG *)   0xFFFFF140) // (AIC) Fast Forcing Enable Register
#define AT91C_AIC_IECR  (AT91_CAST(AT91_REG *)   0xFFFFF120) // (AIC) Interrupt Enable Command Register
#define AT91C_AIC_ISCR  (AT91_CAST(AT91_REG *)   0xFFFFF12C) // (AIC) Interrupt Set Command Register
#define AT91C_AIC_FFDR  (AT91_CAST(AT91_REG *)   0xFFFFF144) // (AIC) Fast Forcing Disable Register
#define AT91C_AIC_CISR  (AT91_CAST(AT91_REG *)   0xFFFFF114) // (AIC) Core Interrupt Status Register
#define AT91C_AIC_IDCR  (AT91_CAST(AT91_REG *)   0xFFFFF124) // (AIC) Interrupt Disable Command Register
#define AT91C_AIC_SPU   (AT91_CAST(AT91_REG *)   0xFFFFF134) // (AIC) Spurious Vector Register


// ========== Register definition for PMC peripheral ========== 
#define AT91C_PMC_IDR   (AT91_CAST(AT91_REG *)   0xFFFFFC64) // (PMC) Interrupt Disable Register
#define AT91C_PMC_MOR   (AT91_CAST(AT91_REG *)   0xFFFFFC20) // (PMC) Main Oscillator Register
#define AT91C_PMC_PLLR  (AT91_CAST(AT91_REG *)   0xFFFFFC2C) // (PMC) PLL Register
#define AT91C_PMC_PCER  (AT91_CAST(AT91_REG *)   0xFFFFFC10) // (PMC) Peripheral Clock Enable Register
#define AT91C_PMC_PCKR  (AT91_CAST(AT91_REG *)   0xFFFFFC40) // (PMC) Programmable Clock Register
#define AT91C_PMC_MCKR  (AT91_CAST(AT91_REG *)   0xFFFFFC30) // (PMC) Master Clock Register
#define AT91C_PMC_SCDR  (AT91_CAST(AT91_REG *)   0xFFFFFC04) // (PMC) System Clock Disable Register
#define AT91C_PMC_PCDR  (AT91_CAST(AT91_REG *)   0xFFFFFC14) // (PMC) Peripheral Clock Disable Register
#define AT91C_PMC_SCSR  (AT91_CAST(AT91_REG *)   0xFFFFFC08) // (PMC) System Clock Status Register
#define AT91C_PMC_PCSR  (AT91_CAST(AT91_REG *)   0xFFFFFC18) // (PMC) Peripheral Clock Status Register
#define AT91C_PMC_MCFR  (AT91_CAST(AT91_REG *)   0xFFFFFC24) // (PMC) Main Clock  Frequency Register
#define AT91C_PMC_SCER  (AT91_CAST(AT91_REG *)   0xFFFFFC00) // (PMC) System Clock Enable Register
#define AT91C_PMC_IMR   (AT91_CAST(AT91_REG *)   0xFFFFFC6C) // (PMC) Interrupt Mask Register
#define AT91C_PMC_IER   (AT91_CAST(AT91_REG *)   0xFFFFFC60) // (PMC) Interrupt Enable Register
#define AT91C_PMC_SR    (AT91_CAST(AT91_REG *)   0xFFFFFC68) // (PMC) Status Register



<AIC.H>

#ifndef __AIC_H__
#define __AIC_H__
#include <AT91SAM7S256.h>
#include "lcd.h"

#define INT_PIN  15//AT91C_PIO_PA15
void AIC_Init(void);
#endif //__AIC_H__




<AIC.C>

#include "aic.h"

void HANDLER(void)
{
  
volatile unsigned int uiIsr;
  
volatile unsigned int uiCnt;

  
// 인터럽트 핀 정보 저장
  uiIsr = *AT91C_PIOA_ISR;
  
  
if(0 != (uiIsr & ( 1 << INT_PIN))) // 인터럽트 핀 검색
  {
    
//할 일 
    LCD_Print("Hdlr()");
  }

  
for(uiCnt = 0100000 > uiCnt ;++uiCnt); // 지연 - 채터링 심함 (인터럽트가 엄청 많이 호출 됨 )
  
  uiIsr 
= *AT91C_PIOA_ISR;  // ISR 레지스터 클리어
  *AT91C_AIC_EOICR = 0;  // End code
  return;
  
}

void AIC_Init(void)
{
  LCD_Init();
  *AT91C_PMC_PCER 
= 1 << AT91C_ID_PIOA;  // 전원 공급 (PIOA) - 실제로는 필요 X - ref) p34
  *AT91C_PIOA_PER = 1 << INT_PIN;      // 핀 활성화
  *AT91C_PIOA_ODR =  1 << INT_PIN;     // 핀 출력 비활성화
  *AT91C_PIOA_IDR = 1<<INT_PIN;      // 인터럽트 핀 비 활성화
  *AT91C_PIOA_IFER = 1<<INT_PIN;      // PIOA 입력 필터 활성화 -ref) p248
  *AT91C_AIC_IDCR = 1 << AT91C_ID_PIOA;  // 인터럽트 핀 컴맨드 비 활성화 -ref) p175
  *AT91C_AIC_ICCR = 1 << AT91C_ID_PIOA;  // 커맨드 레지스터 클리어
  *AT91C_AIC_ISCR = 1 << AT91C_ID_PIOA;  // 커맨드 레지스터 셋
  AT91C_AIC_SVR[AT91C_ID_PIOA] = (unsigned int)HANDLER;// 핸들러 등록
                      // 동작모드 및 우선순위 결정 -ref) p176
  AT91C_AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_HIGH_LEVEL | AT91C_AIC_PRIOR_LOWEST;
  *AT91C_PIOA_IER 
= 1 << INT_PIN;      // PIOA 인터럽트 핀 인터럽트 활성화 -ref) p256
  *AT91C_AIC_IECR =  1 << AT91C_ID_PIOA;  // AIC 인터럽트 핀 인터럽트 활성화 -ref) p180
  
  
return;
}

=






'2015 스마트 콘트롤러 > 업무일지' 카테고리의 다른 글

20150811  (0) 2015.08.11
20150810  (0) 2015.08.10
20150730  (0) 2015.07.31
20150729  (0) 2015.07.30
20150728  (0) 2015.07.28
Posted by ahj333
,