728x90
반응형
######################################### 네트워크 #################################################
1번문제
typedef struct test
{
int A;
char B[4];
double C;
short D[2];
char E;
}TEST;
p-> 는 사용안하도록.
아래와 같이 출력하시오
main()
{
test EX;
Ex A = 10;
Ex B[0] = 'a';
Ex B[1] = 'b';
Ex B[2] = 'c';
Ex B[3] = 'd';
Ex c = 3.14;
Ex D[0] = 20;
Ex D[1] = 30;
Ex E = A;
}
---------------------------------------------------------------------------------------------------
1번문제 답안
typedef struct test{
int A;
char B[4];
double C;
short D[2];
char E;
} TEST;
int main() {
void *P;
int i;
TEST Ex;
Ex.A = 10;
Ex.B[0] = 'a';
Ex.B[1] = 'b';
Ex.B[2] = 'c';
Ex.B[3] = 'd';
Ex.C = 3.14;
Ex.D[0] = 20;
Ex.D[1] = 30;
Ex.E = 'A';
P = &Ex;
printf("int A = %d\n", *(int *)P) ;
P = (char*)P+4;
for(i=0; i<4; i++){
printf("char B[%d] = %c\n",i, *(char *)P);
++(char*)P;
}
printf("double C = %.2f\n", *(double *)P) ;
P = (char*)P+8;
for(i=0; i<2; i++){
printf("short D[%d] = %d\n",i, *(short *)P);
++(short*)P;
}
printf("char E = %c\n", *(char *)P) ;
return 0;
}
===================================================================================================
2번문제
typedef struct test
{
int A;
char B;
double C;
short D[2];
char Ex5 text;
printf("%d, *(int *)p)
}TEST;
p-> 는 사용안하도록.
출력하시오
main()
{
test EX;
Ex A = 10;
Ex B[0] = 'a';
Ex B[1] = 'b';
Ex B[2] = 'c';
Ex B[3] = 'd';
Ex c = 3.14;
Ex D[0] = 20;
Ex D[1] = 30;
Ex E = A;
}
---------------------------------------------------------------------------------------------------
2번문제 답안
#pragma pack(push,1)
typedef struct test{
int A;
char B ;
double C;
short D[2];
char E;
} TEST;
#pragma pack(pop)
int main() {
void *P;
int i;
TEST Ex;
Ex.A = 10;
Ex.B = 'Z';
Ex.C = 3.14;
Ex.D[0] = 20;
Ex.D[1] = 30;
Ex.E = 'A';
P = (void *)&Ex;
printf("int A = %d\n", *(int *)P) ;
P = (char*)P+4;
printf("char B = %c\n", *(char *)P);
P = (char*)P+1;
printf("double C = %.2f\n", *(double *)P) ;
P = (char*)P+8;
for(i=0; i<2; i++){
printf("short D[%d] = %d\n",i, *(short *)P);
++(short*)P;
}
printf("char E = %c\n", *(char *)P) ;
return 0;
}
########################################## 아트메가 ############################################
★★★★★★★★★★★★★★★ 원본 ★★★★★★★★★★★★★★★
#include "SYS_CTR.h"
#include <avr/signal.h>
#include <avr/interrupt.h>
#define CPU_CCLOCK 16000000 //CPU_CCLOCK = 16,000,000 Hz
#define TICKS_PER_SEC 1000 //TICKS PER SEC = 1,000
#define PRESCALER 64 //PRESCALER = 64
//클럭의 배수(크기, 오버헤드)
volatile unsigned int g_elapsed_time=0; //시간변수
void initLED(void); //LED 초기화
void setTCCR0(void); //TCCR0 설정
void initTCNT0(void); //TCNT0 초기화
void setTIMSK(void); //TIMSK 설정
void toggleLED(char *state); //LED 반전
void sleep(volatile unsigned int elapsed_time); //1초대기
SIGNAL(SIG_OVERFLOW0); //timer0의 오버플로우함수
int main(){
char state = 0;
initLED(); //LED 초기화
setTCCR0(); //TCCR0 설정
initTCNT0(); //TCNT0 초기화
setTIMSK(); //TIMSK 설정
sei(); //인터럽트 활성화
while(1) {
toggleLED(& state); //LED 반전
state++;
sleep(1000); //1초 대기
}
return 1;
}
void initLED(void){ //LED 초기화
DDRF = 0xFF;
PORTF = 0xFF;
}
void setTCCR0(void){ //TCCR0 설정
TCCR0 = TCCR0 | 1<<2;
TCCR0 = TCCR0 & (~(1<<1));
TCCR0 = TCCR0 & (~(1<<0));
//방법1
//TCCR0 |= 1<<cs02;
//TCCR0 &= ~(1<<cs01);
//TCCR0 &= ~(1<<cs00);
}
void initTCNT0(void){ //TCNT0 초기화
TCNT0 = 6; //256-(16000000/1000/64)
}
void setTIMSK(void){ //TIMSK 설정
TIMSK = 1<<TOIE0 ;
}
void toggleLED(char *state){ //LED 반전
if((*state)%2 ==0)
PORTF = 0x00;
else
PORTF = 0xFF;
}
void sleep(unsigned int elapsed_time){
while(g_elapsed_time < elapsed_time);
g_elapsed_time = 0;
}
SIGNAL(SIG_OVERFLOW0){
TCNT0 = 6;
g_elapsed_time++;
}
------------------------------------------------------------------------------------------------------
★★★★★★★★★★★★★★★ 수정본 ★★★★★★★★★★★★★★★
#include "SYS_CTR.h"
#include <avr/signal.h>
#include <avr/interrupt.h>
#define CPU_CCLOCK 16000000 //CPU_CCLOCK = 16,000,000 Hz
#define TICKS_PER_SEC 1000 //TICKS PER SEC = 1,000
#define PRESCALER 128 //PRESCALER = 128로 수정 ★★★★★
//클럭의 배수(크기, 오버헤드)
volatile unsigned int g_elapsed_time=0; //시간변수
void initLED(void); //LED 초기화
void setTCCR0(void); //TCCR0 설정
void initTCNT0(void); //TCNT0 초기화
void setTIMSK(void); //TIMSK 설정
void toggleLED(char *state); //LED 반전
void sleep(volatile unsigned int elapsed_time); //1초대기
SIGNAL(SIG_OVERFLOW0); //timer0의 오버플로우함수
int main(){
char state = 0;
initLED(); //LED 초기화
setTCCR0(); //TCCR0 설정
initTCNT0(); //TCNT0 초기화
setTIMSK(); //TIMSK 설정
sei(); //인터럽트 활성화
while(1) {
toggleLED(& state); //LED 반전
state++;
sleep(1000); //1초 대기
}
return 1;
}
void initLED(void){ //LED 초기화
DDRF = 0xFF;
PORTF = 0xFF;
}
void setTCCR0(void){ //TCCR0 설정
TCCR0 |= 1<<2; // 128 로 수정, 100이므로 ★★★★★
TCCR0 |= ~(1<<1); // 128 로 수정, 010이므로 ★★★★★
TCCR0 |= 1<<0; // 128 로 수정, 001이므로 ★★★★★
}
void initTCNT0(void){ //TCNT0 초기화
TCNT0 = 131; // 16000 / 128(PRESCALER분주기) = 125 이므로 256-125 = 131(초기화값) ★★★★★
} // 16000 / 64(PRESCALER분주기) = 256 이므로 256-250 = 6(초기화값) ★★★★★
void setTIMSK(void){ //TIMSK 설정
TIMSK = 1<<TOIE0 ;
}
void toggleLED(char *state){ //LED 반전
if((*state)%2 ==0)
PORTF = 0x00;
else
PORTF = 0xFF;
}
void sleep(unsigned int elapsed_time){
while(g_elapsed_time < elapsed_time);
g_elapsed_time = 0;
}
SIGNAL(SIG_OVERFLOW0){
TCNT0 = 131; // 131로 수정 ★★★★★
g_elapsed_time++;
}
------------------------------------------------------------------------------------------------------
★★★★★★★★★★★★★★★ 수정본 ★★★★★★★★★★★★★★★
#include "SYS_CTR.h"
#include <avr/signal.h>
#include <avr/interrupt.h>
#define CPU_CLOCK 1600000
#define TICKS_PER_SEC 1000
#define PRESCALER 64 // 분주기 64
volatile unsigned int g_elapsed_time =0; //시간변수
void initLED(void); //LED초기화
void setTCCR0(void); //TCCRO설정
void setOCR0(void); //OCR0설정 ★★★★★ 함수추가
void initTCNT0(void); //TCNTO초기화
void setTIMSK(void); //TIMSK설정
void toggleLED(char * state); //LED반전
void sleep(unsigned int elapsed_time);// 1초대기
SIGNAL(SIG_OUTPUT_COMPARE0); //TIME 0의 오버플로우함수
int main(void)
{
char state=0;
initLED();
setOCR0(); ★★★★★ 함수추가
setTCCR0();
initTCNT0();
setTIMSK();
sei();
while(1)
{
toggleLED(&state);
state++;
sleep(1000);
}
return 1;
}
void initLED()
{
PORTF = 0xff;
DDRF = 0xff;
}
void setTCCR0()
{
TCCR0 |= 1<<CS02; ★★★★★ PRESCALER 64일때 cs02 = 1 이므로
TCCR0 |= 1<<3; ★★★★★ Mode | WGM01 | WGM00 | TOP
----------------------------- 이므로 ppt 105쪽 참조.
| 1 | 0 | OCR0
}
void initTCNT0()
{
TCNT0 = 0; ★★★★★
}
void setOCR0()
{
OCR0 = 250; ★★★★★ 250 = 초기화값
}
void setTIMSK()
{
TIMSK = 1<<1;
}
void sleep(unsigned elapsed_time)
{
while(g_elapsed_time < elapsed_time);
g_elapsed_time = 0;
}
void toggleLED(char *state)
{
if((*state) %2== 0)
{
PORTF = 0x00;
}
else
{
PORTF = 0xff;
}
}
SIGNAL(SIG_OUTPUT_COMPARE0) C:\ => WinAVR => avr => include => avr => iom128.h 에서찾기(SIG_OUTPUT_COMPARE0)
{
g_elapsed_time++; ★★★★★ 자동초기화되므로 초기화안시켜도되서 TCNT0 없애줌.
}
728x90
'코스웨어 > 10년 시스템제어' 카테고리의 다른 글
[시스템제어]4월20일 보고서 19번 이상은 (1) | 2010.04.20 |
---|---|
[시스템제어] 4월 19일 보고서 이민규 (1) | 2010.04.20 |
[시스템제어] 4월 15일 17번 유성민 (1) | 2010.04.15 |
[시스템제어]4월13일 (15번 신관식) 업무 보고서 (1) | 2010.04.15 |
시스템제어 4월12일 14번 선동환 보고서 (1) | 2010.04.12 |
13번 배정훈 보고서(4월 9일) (1) | 2010.04.11 |
12번 박철민 보고서. (1) | 2010.04.08 |
11번 박동원 Atmega128 (1) | 2010.04.08 |