블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2025.3
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

공지사항

최근에 올라온 글

	HMODULE h = GetModuleHandle("USER32.DLL");
	if(h)
    {
		BOOL (WINAPI  *f)(UINT,DWORD) =(BOOL (WINAPI *)(UINT,DWORD))GetProcAddress(h,"ChangeWindowMessageFilter");
		if(f != NULL)
        {
			(*f)(0x49,1);
			(*f)(WM_DROPFILES,1);
		}
		FreeLibrary(h);
	}
	DragAcceptFiles(TRUE);

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

FIFO버그  (0) 2020.07.25
cannot open file "nafxcw.lib"  (0) 2020.07.18
ST-LINK 펌웨어 쓰기 설정  (0) 2020.07.11
xmega - timer0  (0) 2020.06.27
ATmega,Xmega,AVR Studio - 문자열 프로그램메모리에서 읽어오기  (0) 2020.06.27
Posted by 안녕1999
, |

no ulink2/me device found

쓰기가 잘되는 프로젝트가 있고, 안되는 프로젝트가 있다.
프로젝트마다 설정이 다르다.

Posted by 안녕1999
, |

xmega - timer0

C언어,ARM / 2020. 6. 27. 22:57
//오차가 있음
byte T_100msec_cnt;
void Timer0_Callback(void)
{
	T_100msec_cnt++;
}
void Timer0_init(void)
{
	tc_enable(&TCE0);
	tc_set_overflow_interrupt_callback(&TCE0, Timer0_Callback);
	tc_set_wgm(&TCE0, TC_WG_NORMAL);
	tc_write_period(&TCE0, 32768/10);//32768=1sec
	tc_set_overflow_interrupt_level(&TCE0, TC_INT_LVL_MED);
	tc_write_clock_source(&TCE0, TC_CLKSEL_DIV1024_gc);
}
Posted by 안녕1999
, |
const char msg1[] ="test한글";
이렇게 사용하면, 문자열은 RAM을 사용하게 됩니다.
RAM이 적은 cpu에서 상당한 부담이 될 수 있습니다.
문자열을 FLASH에 저장했다가, 읽어오면, RAM사용량을 줄일 수 있습니다.


const char msg1[] PROGMEM ="test한글";

void UART_send_pstr(PGM_P s)
{
	char buf[256];
	strcpy_P(buf,s);
	UART_send(buf,strlen(buf));
}
void xxxx()
{
	char buf[256];
		
	UART_send_str(strcpy_P(msg1));
	UART_send_pstr(msg1);
}
Posted by 안녕1999
, |
프로그램(펌웨어)가 비정상 종닥으로 멈추거나, 특정 위치에서 무한루프를 돌게되어, 장비가 멈추어 있는 경우가 발생할 수 있다.
이런 경우, 와치독 타이머라는것을 사용하여, 자동으로 재부팅하도록 하는 기능이다.
main 루프안에서 계속 와치독타이머를 리셋시켜주어야한다.
프로그램 어디선가 계속 멈추어 있을 경우, 자동으로 재부팅(cpu 리셋)된다.


void WDT_init(void);
inline void WDT_init(void)
{
	unsigned char s,n;

	// Optimize for speed
	//#pragma optsize-
	// Save interrupts enabled/disabled state
	s=SREG;
	// Disable interrupts
	cli();

	// Watchdog Timer: On
	n=(WDT.CTRL & (~WDT_PER_gm))
		|WDT_PER3_bm//시간조정
		|WDT_ENABLE_bm | WDT_CEN_bm;
	CCP=CCP_IOREG_gc;
	WDT.CTRL=n;
	// Watchdog window mode: Off
	n=(WDT.WINCTRL & (~WDT_WEN_bm)) | WDT_WCEN_bm;
	CCP=CCP_IOREG_gc;
	WDT.WINCTRL=n;

	// Restore interrupts enabled/disabled state
	SREG=s;
	// Restore optimization for size if needed
	//#pragma optsize_default
}
#define WDT_reset()	asm("WDR")



사용예)
main()
{
	...
    WDT_init();
    while(1)
    {
    	...
        cpu_sleep();
        WDT_reset();
	}
}
Posted by 안녕1999
, |

error C2143: syntax error : missing ';' before 'type'


cpp가 아닌, c파일에서, 변수는 처음에 선언해주어야한다. 중간에 선언할 경우, 에러 발생.
(cpp파일에서는 잘 동작함)

int a;
a=1+10;
int b;      <<==== error C2143: syntax error : missing ';' before 'type'
b=a+1;

Posted by 안녕1999
, |

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

xmega - WDT reset 와치독 타이머  (0) 2020.06.27
error C2143: syntax error : missing ';' before 'type'  (0) 2020.06.20
stm32 - WDT  (0) 2020.06.20
stm32 - SysTick 설정  (0) 2020.06.20
8051, GPIO  (0) 2020.06.17
Posted by 안녕1999
, |

stm32 - WDT

C언어,ARM / 2020. 6. 20. 22:30
STM32는 2가지 워치독을 가지고 있다.
IWDG는 예전의 방식. 일정시간마다 계속 와치독을 리셋해주어야한다.
WWDG는 특정 시간에만 와치독을 리셋할 수 있다.(보다 정밀한 시간 계획이 필요하다)

HAL 드라이버 코드가 잘 동작하지 않아서, 새로 작성.


#include "stm32f7xx_hal.h"
#include "stm32f7xx_hal_iwdg.h"

void WDG_Init(void)
{
	IWDG->KR=IWDG_KEY_ENABLE;
	IWDG->KR=IWDG_KEY_WRITE_ACCESS_ENABLE;
	IWDG->PR=IWDG_PRESCALER_256;//IWDG_PRESCALER_32 //리셋시간 조정용
	IWDG->RLR=1000;
	IWDG->KR=IWDG_KEY_RELOAD;
}

void WDG_reset(void)
{
	IWDG->KR=IWDG_KEY_RELOAD;
}
Posted by 안녕1999
, |

stm32 - SysTick 설정

C언어,ARM / 2020. 6. 20. 22:04
용도에 따라, 1~100msec, 정도로 사용한다.
실시간이 중요하면 1msec,
232통신정도만 쓴다면 100msec 추천
참고:PC는 약 20msec 정도이다.


void SystemClock_Config(void)
{
	...
	HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/100);//1000=1msec, 100=10msec
	...
}

extern volatile uint32_t uwTick,Sleep_10msec_cnt;
void SysTick_Handler(void)//HAL_InitTick
{
	uwTick++;
	if(Sleep_10msec_cnt>0)
	{
		Sleep_10msec_cnt--;
	}
}

Posted by 안녕1999
, |

8051, GPIO

C언어,ARM / 2020. 6. 17. 22:27
Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함