본문 바로가기
코스웨어/14년 스마트컨트롤러

2014.11.04. 업무일지 22번 허수웅

by 알 수 없는 사용자 2014. 11. 5.
728x90
반응형

STM32F Rabbit 

설치해야 할 사항

1. USB 드라이버 



http://www.jkelec.co.kr/product3_2.php  접속


모델을 누르고 가이드를 누름


들어가서 내리다보면 USB  드라이버 다운로드가 있다. 설치한다.




2.  MDK 



5버젼  설치



3. ST Flash Loader 프로그램 설치 

jkelec에서 내려보면 다음위치가 나올 것이다.



새창으로 이동하여 다음을 다운 받으면 된다.





소스 올리기


소스 올리기 전에는 ISP를 다음과 같이 위쪽으로 끼워준다.



그런 다음



Flash Loader Demo 를 실행시키고 설정을 해준 뒤





컴파일된 소스를 올리고 Global Erase를 눌러준 뒤 Next로 넘어간다.



그러면 전송이 된다.



완료가 되면 다음과 같이 뜨고 꺼주면 된다.



실행하기 전에는 ISP를 밑으로 끼워준다.





실행을 하기 위해선 하이퍼터미널을 연다.



포트 설정을 해주고 



리셋 버튼을 누르게 되면 실행화면이 출력되게 된다. 현재 사용되는 소스는 jkelec에서 제공하는 test용 예제 소스이다. 



6번을 눌러 실행하게 되면~






7번 Touch test를 하게 되면~

 




MDK 사용하기


실행을 하고




예제의 경우 기능별로 묶어서 C파일을 만들어 놓았다. 
만약 F12로 이동이 되지 않을 경우 


빌드한번만 해주게 되면 된다.

 

 


 

C++

 

 


15 - 3. Stack Unwinding (스택 풀기)

예외의 전달

#include <iostream>
using namespace std;

void Divide(int num1, int num2)
{
                 if (num2 == 0)
                {
                                 throw num2;
                }
                cout << "나눗셈A의C 몫o : " << num1 / num2 << endl;
                cout << "나눗셈A의C 나머O지o : " << num1 % num2 << endl;
}

int main()
{
                 int num1, num2;
                cout << "두I 개의C 숫y자U 입O력A : " ;
                cin >> num1 >> num2;

                 try
                {
                                Divide(num1, num2);
                                cout << "나눗셈A을 마쳤습A니I다U." << endl;
                }
                 catch (int expn)
                {
                                cout << "제|수o는A " << expn << "이I 될E 수o 없습A니I다U." << endl;
                                cout << "프A로I그램을 다U시A 실C행a하I세요a." << endl;
                }
                 return 0;
}





예외가 처리되지 않으면 예외가 발생한 함수를 호출한 영역으로 예외 데이터가 전달된다.


예외상황이 발생한 위치와 처리해야 하는 위치가 달라야 하는 경우

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

int StoI(char *str)
{
                 int len = strlen(str);
                 int num = 0;

                 for(int i = 0; len > i; ++i)
                {
                                 if(str[i] < '0' || str[i] > '9')
                                {
                                                 throw str[i];
                                }
                                num += ( int)(pow((double )10, (len - 1) - i) * (str[i] + (7 - '7')));
                }
                 return num;
}

int main()
{
                 char str1[100];
                 char str2[200];

                 while(1)
                {
                                cout << "두I 개의C 숫y자U 입O력A : " ;
                                cin >> str1 >> str2;

                                 try
                                {
                                                cout << str1 << " + " << str2 << " = " << StoI(str1) + StoI(str2) << endl;
                                                 break;
                                }
                                 catch(char ch)
                                {
                                                cout << "문자U " << ch << "가 입O력A되C었u습A니I다U." << endl;
                                                cout << "재c입O력A 진행a합O니I다U." << endl << endl;
                                }
                }
                cout << "프A로I그램을 종료a합O니I다U." << endl;
                 return 0;
}




함수 내에서 함수를 호출한 영역으로 예외 데이터를 전달하면 해당 함수는 더 이상 실행되지 않고 종료가 된다.


스택풀기

예외가 처리되지 않아서 함수를 호출한 영역으로 예외 데이터가 전달되는 현상을 가리켜 '스택 풀기' 라고 한다.


#include <iostream>
using namespace std;

void SimpleFuncOne(void );
void SimpleFuncTwo(void );
void SimpleFuncThree(void );

int main()
{
                 try
                {
                                SimpleFuncOne();
                }
                 catch(int expn)
                {
                                cout << "예외U코U드a : " << expn << endl;
                }
                 return 0;
}

void SimpleFuncOne(void )
{
                cout << "SimpleFuncOne(void)" << endl;
                SimpleFuncTwo();
}
void SimpleFuncTwo(void )
{
                cout << "SimpleFuncTwo(void)" << endl;
                SimpleFuncThree();
}              
void SimpleFuncThree(void )
{
                cout << "SimpleFuncThree(void)" << endl;
                 throw -1;
}
  



main 함수에서조차 예외를 처리하지 않으면 terminate 함수가 호출되면서 프로그램이 종료된다.


하나의 try 블록과 다수의 catch 블록
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

int StoI(char *str)
{
                 int len = strlen(str);
                 int num = 0;

                 if(len != 0 && str[0] == '0' )
                {
                                 throw 0;
                }

                 for(int i = 0; len > i; ++i)
                {
                                 if(str[i] < '0' || str[i] > '9')
                                {
                                                 throw str[i];
                                }
                                num += ( int)(pow((double )10, (len - 1) - i) * (str[i] + (7 - '7')));
                }
                 return num;
}

int main()
{
                 char str1[100];
                 char str2[200];

                 while(1)
                {
                                cout << "두I 개의C 숫y자U 입O력A : " ;
                                cin >> str1 >> str2;

                                 try
                                {
                                                cout << str1 << " + " << str2 << " = " << StoI(str1) + StoI(str2) << endl;
                                                 break;
                                }
                                 catch(char ch)
                                {
                                                cout << "문자U " << ch << "가 입O력A되C었u습A니I다U." << endl;
                                                cout << "재c입O력A 진행a합O니I다U." << endl << endl;
                                }
                                 catch(int expn)
                                {
                                                 if(expn == 0)
                                                {
                                                                cout << "0으로I 시A작U하I는A 숫y자U는A 입O력A불O가." << endl;
                                                }
                                                 else
                                                {
                                                                cout << "비n정상o적u 입O력A이I 이I루c어i졌습A니I다U." << endl;
                                                }
                                                cout << "재c입O력A 진행a합O니I다U." << endl << endl;
                                }
                }
                cout << "프A로I그램을 종료a합O니I다U." << endl;
                 return 0;
}



하나의 try영역 내에 다른 둘 이상의 예외가 발생할 수 있기 때문에 catch블록을 추가할 수 있다.
728x90

'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글

20141106업무일지 출석번호 1번 고윤석  (6) 2014.11.06
keil usart  (0) 2014.11.06
2014.11.05 업무일지 - 한솔  (7) 2014.11.06
ARM  (0) 2014.11.05
STM32F103ZE  (3) 2014.11.04
2014.11.03 업무일지 출석번호21 이재우  (9) 2014.11.04
10.31 이경진  (9) 2014.11.03
ARM_PIT_LED 손병규  (0) 2014.10.31