Atmega32에 0으로 나누기 해서 미치게 하면 폭발한다는데..
도대체 어찌되먹은 녀석이지 -ㅁ-

[링크 :  http://www.youtube.com/watch?v=mZ7pUADoo58]

'embeded > AVR (ATmega/ATtiny)' 카테고리의 다른 글

attiny2313 회로도 조사  (0) 2013.07.01
attiny2313과 함께하는 지랄같은 주말 -_-  (0) 2013.06.29
0으로 나누면 어떻게 될까?  (0) 2012.07.04
AVR ATmega128 i2c  (0) 2012.02.20
AVR ISP 핀 순서  (0) 2012.01.22
AVT FFT + DAC = 보청기?  (0) 2012.01.18
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2012.06.30 11:17
말이 거창한데...
아무튼 스택의 크기가 작으면 함수 호출의 깊이가 깊을 경우
스택이 깨지면서 프로그램이 예측 불가능하게 죽는 문제가 발생한다.
이런 경우 해당 파일의 Stack 변수를 수정해주면 된다.
프로젝트를 생성해보지 않아서 잘 모르겠지만.. 아무튼 스택 크기는 512Byte(0x0200)으로 잡혀 있으니
용도에 맞게 설정하면 된다.

;******************************************************************************
;
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
;******************************************************************************
Stack   EQU     0x00000200   



Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2012.06.28 22:00
기본제공 되는 예제에서 unsigned 만 삭제하면 문제없이 영하에 대해서도 작동한다.

long GetTemperature(char isCelcius)
{
	long ulADC0_Value[1];
	long ulTemp_ValueC;
	long ulTemp_ValueF;
	
	ADCProcessorTrigger(ADC0_BASE, 3);
	while(!ADCIntStatus(ADC0_BASE, 3, false))
	{
	}

	ADCSequenceDataGet(ADC0_BASE, 3, ulADC0_Value);
	ulTemp_ValueC = ((1475 * 1023) - (2250 * ulADC0_Value[0])) / 10230;
	ulTemp_ValueF = ((ulTemp_ValueC * 9) + 160) / 5;

	if(isCelcius) return ulTemp_ValueC;
	return ulTemp_ValueF;
}
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2012.06.18 22:52
이름은 거창한데,
간단하게 말하면 잘못 구성된 인터럽트 전송 방식에서의 문제점 이다.

void main()
{
    while(1)
        uart_handler();
}

void uart_handler()
{
    if(send != recv) flush();
}

대략 이런 구조에서 단순하게 send와 recv로 전송할 데이터가 있는지만 확인하고
flush()를 이용해 uart tx finish interrupt를 통해 데이터를 지속적으로 보내려고 할경우
uart_handler()에 의해 루프를 도는중 지속적으로 flush를 함으로서 데이터가 몇바이트 깨지거나
순서가 바뀌는 것 같은 문제가 발생하기도 한다.


간단하고 당연한(?) 해결책은
전송이 시작되었고 전송중이라는 플래그를 두는 것. 
Posted by 구차니

댓글을 달아 주세요

embeded2012.04.21 13:57
KEIL 설명서를 보면 C51 C166 C251이 언급이 되는데
검색을 해보니 ARM은 그냥 ARM이라고 표기되는듯 하고

C51은 8051용
C251은 MCS251용
C166은 infenion C16x 패밀리 혹은 STMicroelectronics ST10 패밀리용 컴파일러이다.

[링크 :  http://www.keil.com/product/]
    [링크 :   http://www.keil.com/arm/mdk.asp] ARM
    [링크 :   http://www.keil.com/c51/c51.asp] 8051
    [링크 :   http://www.keil.com/c166/c166.asp] SH architecture ?
    [링크 :   http://www.keil.com/c251/c251.asp] MCS251(8051 하위호환이면 명령어 확장일뿐?)


MCS는 Micro Controller System 의 약자이고
MCS-81은 통상 8051이라는 불리는 녀석
그리고 MCS-251은 MCS-81과 바이너리 호환성을 지닌 상위버전이다.

[링크 :  http://www.mykit.com/kor/ele/micom/micomMCS_51.htm] Micro Controller System 51 (MCS51) = 8051
[링크 :  http://www.zmitac.aei.polsl.pl/Electronics_Firm_Docs/mcs51/datashts/27262001.pdf] MCS251

'embeded' 카테고리의 다른 글

Z80 M6800  (0) 2014.01.27
기즈모 스피어 / 라즈베리 파이  (0) 2014.01.02
USB2LPT for JTAG  (0) 2013.06.21
Hi-Z / Tristate / 플로트(float)  (0) 2013.01.02
KEIL 컴파일러 종류  (0) 2012.04.21
keil 에서 inline 함수 사용하기  (0) 2012.04.21
Posted by 구차니

댓글을 달아 주세요

embeded2012.04.21 13:47
inline 키워드가 아니라
__inline 키워드로 하면된다 -_-

[링크 : http://www.keil.com/support/man/docs/c166/c166_le_inlinefuncs.htm]

'embeded' 카테고리의 다른 글

Z80 M6800  (0) 2014.01.27
기즈모 스피어 / 라즈베리 파이  (0) 2014.01.02
USB2LPT for JTAG  (0) 2013.06.21
Hi-Z / Tristate / 플로트(float)  (0) 2013.01.02
KEIL 컴파일러 종류  (0) 2012.04.21
keil 에서 inline 함수 사용하기  (0) 2012.04.21
Posted by 구차니

댓글을 달아 주세요

embeded/ARM2012.04.19 22:48
이상하게 RTCSet만 하려고 하면 시스템이 멈추는 문제가 발생해서
driverlib 소스를 뒤져봐도 딜레이 주는것 외에는 딱히 문제가 없어 보이는데
뒤지다 뒤지다 뒤져도 답이 안나온다 -_-


일단 hibernate mode로 항상 들어가게 해놓고
분기조건으로 어떻게 할지를 안해줘서 그런걸려나?

[링크 : http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/183421.aspx]

'embeded > ARM' 카테고리의 다른 글

ARM EABI / OABI  (0) 2013.07.02
TI DM368와 H-JTAG(실패)  (0) 2013.06.28
HibernateRTCSet  (0) 2012.04.19
KEIL Program Size 항목별 의미  (0) 2012.04.19
타이머 핸들러 시간 충돌 안나게 조절하기?  (0) 2012.04.13
ti lm3s 시리즈 하이버네이트 모드 + RTC 사용하기  (2) 2012.04.04
Posted by 구차니

댓글을 달아 주세요

embeded/ARM2012.04.19 19:31
KEIL로 컴파일 하면 아래와 같은 문구가 나오고
 Program Size: Code=34744 RO-data=11400 RW-data=1344 ZI-data=9872

의미는 아래와 같다.
1. ZI Data: Zero Initialized Data

2. RO Data are the constants.
Total
RAM Size = RW Data + ZI Data
Total ROM Size = Code + RO Data + RW Data

3. Some constants (RO data) are generated by the compiler/linker and might also be from libraries. So they will exist regardless that your program doesn't explicitly defines any constants. 

[링크 : http://www.keil.com/forum/10624/


글 완전 날로먹은듯? ㅋㅋㅋ
Posted by 구차니
TAG ARM, Keil, zi-data

댓글을 달아 주세요

embeded/ARM2012.04.13 11:14
엑셀을 이용한 꽁수.
아무튼 100ms 250ms 500ms 1000ms 4개를 돌리는데
아무래도 한시간에 몰아치기 하면 시간 정확도도 떨어지고 그럴테니
최대한 분산해주려고 해도 이정도 밖에 못하겠네 ㅠ.ㅠ

void Timer0A_Handler(void)		// Timer0A - internal timer
{
	TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

	count_10ms++;

	if ((count_10ms + 75) %  100 == 0)		{TimeService_100ms();}
	if ((count_10ms +  1) %  250 == 0)		{TimeService_250ms();}
	if ((count_10ms + 50) %  500 == 0)		{TimeService_500ms();}
	if ((count_10ms + 25) % 1000 == 0)		{TimeService_1000ms();	count_10ms = 0;}
}



'embeded > ARM' 카테고리의 다른 글

HibernateRTCSet  (0) 2012.04.19
KEIL Program Size 항목별 의미  (0) 2012.04.19
타이머 핸들러 시간 충돌 안나게 조절하기?  (0) 2012.04.13
ti lm3s 시리즈 하이버네이트 모드 + RTC 사용하기  (2) 2012.04.04
TI LM3S1607 time epoch  (0) 2012.03.27
H-JTAG 에러이유?  (0) 2012.03.23
Posted by 구차니

댓글을 달아 주세요

embeded/ARM2012.04.04 10:04
stellarisware를 설치하면 기본적으로 추가되는 예제를 추려내서 테스트 해보면 되는데,
대부분의 장비들이 굳이 하이버네이트 모드로 들어가는 행동을 취할수 없을때가 있다.
항상 켜져있어야 하는 장비인데, 언제꺼질지 모르지만 시간은 유지해야 한다면
하이버네이트 모드를 들어갈수 있는 시점을 정할수 없기 때문에 항상 하이버네이트 모드를 켜주면 된다.

C:\StellarisWare\boards\ek-lm3s1968\hibernate\hibernate.c
파일을 참고해서 추려내자면
static void SetRTCFucntion(void)
{
//	time_t current_time;
//	struct tm struct_time = { 0, 0, 10, 26,2,2012 - 1900,0,0,0};
//	current_time = mktime(&struct_time);
	
	SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);
		HibernateEnableExpClk(SysCtlClockGet());
		HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128);
		HibernateRTCEnable();
//		HibernateRTCSet(current_time);
		HibernateWakeSet(HIBERNATE_WAKE_PIN);
		HibernateRequest();
}

일단 RTC를 사용하려면 무조건 하이버네이트 장치를 사용하도록 해야한다.
    SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);

하이버네이트 모듈에 들어갈 클럭을 지정해주는데, 32.768Khz가 들어가거나 4.194304Mhz를 /128 해서 넣어주도록 한다.
    HibernateEnableExpClk(SysCtlClockGet());
    HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128); // 4.194304 Mhz input divider to 32.768kHz

 하이버네이트 모듈에 내장된 RTC 를 사용하도록 설정하고
    HibernateRTCEnable(); 

원인은 알수 없지만 wakeup 조건을 반드시 설정해 주어야 하이버네이트 모드가 작동한다.
WAKE 핀은 NC 처리해도 작동에 이상은 없는듯 하다.
    HibernateWakeSet(HIBERNATE_WAKE_PIN); 

마지막으로 하이버네이트 모드를 들어가도록 요청한다.
    HibernateRequest(); 


RTC 시간은 배터리가 소진된 시점의 마지막 시간이 다음 부팅시까지 유지된다.
Posted by 구차니

댓글을 달아 주세요

  1. 왔다 간 흔적을 남김니다...^^

    2012.04.04 13:31 신고 [ ADDR : EDIT/ DEL : REPLY ]