아이폰 앱 개발 관련 좋은 자료를 볼 수 있는 곳

https://www.cocoacontrols.com/

맥부기 네이버 카페

https://devxoul.gitbooks.io/ios-with-swift-in-40-hours/content/Chapter-1/

https://cocoapods.org/


https://developer.apple.com/ios/human-interface-guidelines/overview/design-principles/


https://www.youtube.com/channel/UCFQKBD-GEwrGu3wBN_0yA7Q


http://devlecture.tistory.com/entry/swift-iOS-%EA%B0%9C%EB%B0%9C-%EC%8B%9C%EC%9E%91-%EC%B0%B8%EA%B3%A0-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EB%AA%A8%EC%9D%8C


http://xguru.net/622


http://seorenn.blogspot.kr/

Posted by 知彼知己百戰不殆
,

이중 연결 리스트를 활용한 도서관리 프로그램. 

제작 환경: MacBookPro Letina 2014 OS X

BookManagement_Prog-master.zip


[git hub 주소]

https://github.com/njinx0612/BookManagement_Prog.git


git@github.com:njinx0612/BookManagement_Prog.git

'언어 > C' 카테고리의 다른 글

Conio.h의 gettext 사용 시 문제점  (0) 2017.08.14
[CubeBite] File_Create_Write 함수  (0) 2017.02.08
[Tip] File I/O Error 다루는 법  (0) 2016.11.05
구조체의 크기와 pragma pack  (0) 2016.10.28
비트필드 구조체  (0) 2016.10.27
Posted by 知彼知己百戰不殆
,

 

 

 

 

 

저수준 파일 입출력을 사용한 파일에서 정보 읽어오는 함수

인자 설명:

  file_location: 파일위치+파일 이름명

  find_index: 파일에서 찾을 index

 

 

 

 

 

 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
 
int read_info(char* file_location, char* find_index)
{
    int file_descriptor;
    char* find_location;
    char file_index[1024= {0};
    char file_contents[1024= {0};
    char index[1024= {0};
    int ret, iCnt=0;
    int inCnt=0;
 
#if 0
    printf("[FD] location= %s\n", file_location);
    printf("[FD] index= %s\n", find_index);
#endif
    printf("\n");
 
    if( (file_descriptor = open(file_location,O_RDONLY)) > 0)
    {
        if( read(file_descriptor,file_contents,sizeof(file_contents)) > 0 )
        {
            while(iCnt<strlen(file_contents))
            {
                if*(file_contents+iCnt) != '\n' )
                {
                    printf("[D] file_contents[%d]:%c [0x%02x]\n",iCnt, *(file_contents+iCnt), *(file_contents+iCnt));
 
                }
                iCnt++;
            }
            printf("\n");
            puts(file_contents);
            
            
#if 0
                printf("Input index to find: ");
                fgets(file_index,sizeof(file_index),stdin);
                if*(file_index+0== '\n')
                {
                    printf("Exit Program...\n");
                    break;
                }
#endif
        
            find_location = strstr(file_contents,find_index);
            while*(find_location+inCnt) != '\n' )
            {
                printf("%c",*(find_location+inCnt));
                inCnt++;
            }
 
            printf("\n\n");
    
 
 
 
        } //end of read
            
        else
        {
            printf("read Error!!!\n");
            return -2;
        }
        
        close(file_descriptor);
    }
        
    else
    {
        printf("File open Fail...\n");
        return -3;
    }
    return 0;
}
 
int main(int argc, char* argv[])
{
    char file_index[1024= {0};
    int iCnt;
    if( (argc == 1|| (argc > 3|| (argc == 2) )
    {
        printf("\nArgument Error...\n");
        printf("\nUsing manual: ./(execution_file_name) (file_location) (find_index)\n\n");
        return -1;
    }
 
    read_info(argv[1], argv[2]);
#if 0
    while(1)
    {
        printf("Input index to find: ");
        fgets(file_index,sizeof(file_index),stdin);
        read_info(argv[1], file_index);
        for(iCnt=0; iCnt<sizeof(file_index); iCnt++)
        {
            file_index[iCnt]=0;
        }
    }
#endif
 
    return 0;
}
 

'언어 > 큐브인턴(Embedded)' 카테고리의 다른 글

PINA, PORTA, DDRA 설명(LED관련)  (0) 2016.10.31
UART LED가 정상 작동을 안 하는 경우  (0) 2016.10.28
LED on/off  (0) 2016.10.28
printf 함수 리턴  (0) 2016.09.30
하버드 구조 VS 폰 노이만 구조  (0) 2016.09.21
Posted by 知彼知己百戰不殆
,

저수준 파일 입력 함수

인자 설명

location_filename: 파일위치+파일이름

write_data: 파일에 쓸 데이터

size: 파일 사이즈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
 
int file_create_write(char* location_filename, char* write_data, int size)
{
    int file_descriptor;
    char add_write[1024]={0};
    int ret;
    int iCnt;
    printf("\n");
    printf("[D] loca: %s\n", location_filename);
    printf("[D] data: %s\n", write_data);
    printf("[D] File Open start...\n");
 
#if 0
    /* replace a data to file  */
    if( (file_descriptor = open(location_filename,O_CREAT|O_TRUNC|O_WRONLY,0644)) > 0 )
    {
        write(file_descriptor, write_data, size);
        close(file_descriptor);
        printf("[D] File close\n");
    }
    else
    {
        printf("File Open Error...\n");
        return -1;
    }
#endif
 
    /* attach a data to file  */
    if( (file_descriptor = open(location_filename,O_CREAT|O_WRONLY|O_APPEND,0644)) > 0 )
    {
        printf("Open file_descriptor=%d\n",file_descriptor);
        if( write(file_descriptor, write_data, size== -1 )
        {
            printf("File write Error...\n");
            return -3;
        }
    
#if 0
        printf("[ADD] Input data to file (nothing: Press Enter...) : ");
        fgets(add_write, sizeof(add_write), stdin);
        //scanf("%s",add_write);
        
        for(iCnt=0; iCnt<strlen(add_write); iCnt++)
        {
            printf("[D] add_write[%d]=%c[0x%02x]\n",iCnt,add_write[iCnt],add_write[iCnt]);
        }
        
        if*(add_write) == '\n' )
        {
            break;
        }
        
        else
        {
            write(file_descriptor, add_write, sizeof(add_write)-1);
            for(iCnt=0; iCnt<sizeof(add_write); iCnt++)
            {
                add_write[iCnt]=0;
                printf(".");
            }
            
        }
#endif
 
    
        close(file_descriptor);
        printf("[D] File close\n");
    }
    
    else
    {
        printf("File Open Error...\n");
        return -2;
    }
 
    return 0;
}
 
int main(int argc, char* argv[])
{
    int ret,iCnt = 0;
    char file_location_name [1024= {0};
    char file_write [1024= {0};
 
    if( argc <= 1 || argc > 2 )
    {
        printf("Argument Error...\n");
        printf("Using manual: ./(execution_file_name) (file_location)\n");
        return -1;
    }
 
    while(1)
    {
        iCnt = 0;
        printf("\n Input data to file : ");
        fgets(file_write, sizeof(file_write), stdin);
        //for(iCnt=0; iCnt<strlen(file_write); iCnt++)
 
        while*(file_write+iCnt) != '\n' )
        {
            printf("[D] file_write[%d]=%c[0x%02x]\n",iCnt,file_write[iCnt],file_write[iCnt]);
            iCnt++;
        }
 
        if( file_write[0== '\n' )
        {
            break;
        }
 
        /* file_write end is '\n' */
        ret = file_create_write( argv[1], file_write, strlen(file_write) );
        
        
        for(iCnt=0; iCnt<strlen(file_write); iCnt++)
        {
            file_write[iCnt]=0;
        }
    }
 
    /* remove '\n' */
    //ret = file_create_write( file_location_name, file_write, strlen(file_write)-1); 
    printf("[D] File open return=%d\n", ret);
 
    return 0;
    
}



Posted by 知彼知己百戰不殆
,

전역 변수 설정 함수 이름: defparameter

사용법:

(defparameter *num1* 10)

전역변수 num1의 값을 10으로 셋팅한다. 전역변수 num1의 양쪽에 붙은 asterisks는 '귀마개'라고도 불리는데, 이것은 선택사항이다. 해도 되고 안 해도 되는데 나중에 뒤에 나오는 local variable(지역변수)와 구분짓기 위해 리스퍼들은 전역 변수에 '귀마개'를 붙여준다.


global variable의 cLisp에서의 또 다른 용어는 dynamic variable, special variable이다.

'언어 > CLISP' 카테고리의 다른 글

CLisp 설치  (0) 2016.11.27
Posted by 知彼知己百戰不殆
,

CLisp 설치

언어/CLISP 2016. 11. 27. 02:10

CLISP = Common Lisp


https://www.macports.org/install.php

위의 사이트에서 해당하는 Mac OS 버전의 맥포트를 다운받는다.



위의 그림처럼 맥포트를 다운받게 되면 쭉 설치를 해준다. 설치가 끝났으면 터미널 창으로 돌아와서 

sudo port install clisp 명령어를 입력하게 되면 clisp 설치가 시작된다.

이런 식으로 설치가 쭉 완료되면 

'언어 > CLISP' 카테고리의 다른 글

Global Variable (전역변수 설정)  (0) 2016.11.27
Posted by 知彼知己百戰不殆
,

1. 헤더 파일을 추가한다

#include <errno.h>

2. printf로 error의 원인을 메세지로 띄운다.

printf("Error: %s\n", strerror(errno));


혹은

perror("File Open Error");

이렇게 코딩을 해 놓으면 나중에 에러가 발생했을 때, File Open Error: (파일오픈에러의 이유)가 나타난다.

'언어 > C' 카테고리의 다른 글

[Linked List] 연결리스트를 활용한 도서관리prog  (0) 2017.02.08
[CubeBite] File_Create_Write 함수  (0) 2017.02.08
구조체의 크기와 pragma pack  (0) 2016.10.28
비트필드 구조체  (0) 2016.10.27
volatile 형한정어  (0) 2016.10.19
Posted by 知彼知己百戰不殆
,

<PINA, PORTA, DDRA>


Data Direction Register 는 입/출력을 바꿔주는 Register이다. DDR의 각 비트에 해당되는 PIN과 PORT에 영향을 끼친다. 0일 땐 input모드, 1일 땐 output 모드로 사용된다.

PORT는 DDR이 output 모드일 때 사용되는 Register이다. 

PIN은 DDR이 input 모드일 때 사용되는 Register이다.

'언어 > 큐브인턴(Embedded)' 카테고리의 다른 글

[CubeBite] File_Read_Info  (0) 2017.02.08
UART LED가 정상 작동을 안 하는 경우  (0) 2016.10.28
LED on/off  (0) 2016.10.28
printf 함수 리턴  (0) 2016.09.30
하버드 구조 VS 폰 노이만 구조  (0) 2016.09.21
Posted by 知彼知己百戰不殆
,

int main(void)

{
    unsigned char uc_Data=0x0A;
    
    USART_Tx(uc_Data);
    
    while(1)
    {
        //if( (UCSR0B & (1<<RXEN0)) != 0 )
        DDRA = 0xAA;
        _delay_ms(8000);
        DDRA = ~DDRA;
    }
    return 0;
}


의도한 결과: 1010 1010(0xAA)과 0101 0101(0x55)이 약간의 시간을 두고 교대로 왔다갔다 하면서 켜지게 하고 싶다.

실제 보드에 올린 결과: 1010 1010(AA) 형태로만 불이 들어왔다. 깜빡임이 없었다.

이유: DDRA = ~DDRA; 에서 반복문이 걸리기 때문에 DDRA = 0xAA; 코드가 다시 실행되고, 즉 0101 0101로 바뀌고 나서 delay가 없으므로 순식간에 다시 1010 1010 코드가 실행돼서 이런 결과가 생겼다.


즉 의도한 결과를 얻기 위한 코드를 다시 작성을 해보면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(void)
{
    unsigned char uc_Data=0x0A;
    
    USART_Tx(uc_Data);
    
    DDRA = 0xAA;
 
    while(1)
    {
        //if( (UCSR0B & (1<<RXEN0)) != 0 )
        _delay_ms(8000);
        DDRA = ~DDRA;
    }
    return 0;
}


DDRA = 0xAA; 코드를 while문 위로 올렸다. 그랬더니 의도한 결과대로 정상 작동하는 것을 확인할 수 있었다.

'언어 > 큐브인턴(Embedded)' 카테고리의 다른 글

[CubeBite] File_Read_Info  (0) 2017.02.08
PINA, PORTA, DDRA 설명(LED관련)  (0) 2016.10.31
LED on/off  (0) 2016.10.28
printf 함수 리턴  (0) 2016.09.30
하버드 구조 VS 폰 노이만 구조  (0) 2016.09.21
Posted by 知彼知己百戰不殆
,

<LED를 켜기 위한 코드>

본 글은 Atmega128L, Osc 12Mhz 보드에서 실험하였다.

 

준비물: 

LED가 연결된 port 확인! (portA, portB, portC....),

각 port에 해당되는 Data Direction Register(DDR) 확인!

 

DDR의 각 비트는 입/출력 방향을 결정하는 비트이며, 각 비트의 입/출력은 해당되는 port의 각 pin의 입/출력을 결정짓는다.

특정 핀에 해당하는 DDR 레지스터 값이 1이면 출력 용도로 사용 할 핀임을 의미하며, 반대로 0이면 입력 용도로 사용 할 핀임을 의미한다.

 

 

Atmega 128L에서 PORTA의 주소는 

 

PORTA에서 $1B($3B)라고 hex값으로 주소가 나와있는데 괄호 밖의 주소는 Atmega103 호환모드로 사용할 때의 주소라서 괄호 안의 주소를 사용하기로 한다. 즉, 0x3B를 사용한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <util/delay.h>
 
#define DDRA    (*((volatile unsigned char*)0x3A))
#define PORTA    (*((volatile unsigned char*)0x3B))
#define PORTA0    0
#define PORTA1    1
#define PORTA2    2
#define PORTA3    3
#define PORTA4    4
#define PORTA5    5
#define PORTA6    6
#define PORTA7    7
 
 
int main(void)
{    
    DDRA = 0xFF;
    PORTA = (PORTA & (1<<PORTA1)) | (PORTA & (1<<PORTA2)) | (PORTA & (1<<PORTA3)) | (PORTA & (1<<PORTA4)) | (PORTA & (1<<PORTA5)) | (PORTA & (1<<PORTA6)) | (PORTA & (1<<PORTA7));
    
    while(1)
    {
        
#if 1
 
        _delay_ms(5000);
        PORTA = ~PORTA;
        
#endif
 
    }
        
    return 0;
}
 

_delay_ms함수를 사용하기 위해 #include <util/delay.h> 헤더파일을 추가했으며, 나머지는 레지스터 주소를 직접 건드리는 방식으로 코드를 사용했다.

 

PORTA에 값을 입력하면 LED가 켜지는 줄 알았지만 PORT0을 1로 설정을 안 했는데도 모든 LED가 다 켜져서 PORT0과 PORT7만 1로 설정을 하고 나머지를 모두 0으로 해보았다. 그런데도 모든 불빛이 다 들어와서 DDR 레지스터의 값을 LED0번과 LED7번만 켜지게 바꿨더니 원하는대로 동작이 되었다. PORTA는 영향을 안 미치는 줄 알았는데 while문에서 PORTA의값을 틸트(~) 시켰는데 LED가 on/off되는 것을 보면 좀 더 공부해봐야 알 것 같다. (LED가 DDR 셋팅으로만 불이 켜지는 이유가 회로도를 몰랐기 때문인데 현재 보드의 LED는 Vcc에

연결돼 있어서 PORTA의 initial value가 0이므로 ground와 비슷한 효과를 내서 LED가 켜지는 것이다. 만약 LED가 ground에 연결돼 있었다면 PORTA에 값을 넣었을 때 데이터시트

처럼 정상 작동하는 것을 확인할 수 있을 것 같다.)

새로 작성한 LED 0번과 LED 7번을 켜는 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <util/delay.h>
 
#define DDRA    (*((volatile unsigned char*)0x3A))
#define PORTA    (*((volatile unsigned char*)0x3B))
#define PORTA0    0
#define PORTA1    1
#define PORTA2    2
#define PORTA3    3
#define PORTA4    4
#define PORTA5    5
#define PORTA6    6
#define PORTA7    7
 
 
int main(void)
{    
    DDRA = 0x81;
    PORTA = 0x00;
    //PORTA = (PORTA & (1<<PORTA0)) | (PORTA & (1<<PORTA7));
    
    while(1)
    {
        
#if 1
 
        _delay_ms(5000);
        PORTA = ~PORTA;
        
#endif
 
    }
        
    return 0;
}
 

 

'언어 > 큐브인턴(Embedded)' 카테고리의 다른 글

PINA, PORTA, DDRA 설명(LED관련)  (0) 2016.10.31
UART LED가 정상 작동을 안 하는 경우  (0) 2016.10.28
printf 함수 리턴  (0) 2016.09.30
하버드 구조 VS 폰 노이만 구조  (0) 2016.09.21
MCU, MIPS  (0) 2016.09.04
Posted by 知彼知己百戰不殆
,