'분류 전체보기'에 해당되는 글 260건

  1. 2010.04.27 warning C4995: 'xxx' : name was marked as #pragma deprecated
  2. 2010.04.27 "응용 프로그램 구성이 올바르지 않기 때문에..." 해결 방안
  3. 2010.03.23 ubuntu 9.10 sound... Dummy output problem.
  4. 2010.03.03 사람 차별하는 연아..ㅋㅋ 6
  5. 2010.03.03 커널 컴파일(kernel compile - make install) 에러
  6. 2010.03.03 make menuconfig 에러
  7. 2010.02.11 DLL에서 WndProc 메시지 처리하는 방법
  8. 2010.01.06 우분투 / 데비안 계열 고정 ip 설정 4
  9. 2009.12.26 STM32 보드에 펌웨어 퓨징
  10. 2009.12.26 STM32 개발 환경
2010. 4. 27. 14:30

warning C4995: 'xxx' : name was marked as #pragma deprecated



컴파일을 하다보면 "warning C4995: 'xxx': name was marked as #pragma deprecated" 와 같은 warning 메시지를 볼 때가 있다.

MSDN에 이렇게 나와있다.

Error Message

'function': name was marked as #pragma deprecated

The compiler encountered a function that was marked with pragma deprecated. The function may no longer be supported in a future release. You can turn this warning off with the warning pragma (example below).

더 이상  지원되지 않을 수 있는 함수이다.
warning을 보고 싶지 않으면 pargma를 사용해라.

#pragma warning(disable:4995)

위와 같은 처리를 하게 되면, 빌드 시에 warning 메시지는 나오지 않을 것이다.
하지만, 더 이상 지원이 되지 않는 함수라는 것은 뭔가 문제가 있기 때문에 그럴 것이다.

위의 경고를 내는 함수들은 버퍼 오버플로우 혹은 보안적으로 문제를 가질 수 있는 함수들이다. 그렇기 때문에 위의 경고 메시지를 낼 만한 함수의 사용을 자제하고, 개선 된 함수를 사용하는것이 방법이 될 것이다.

아래의 링크가 그 위의 문제를 해결하는데 도움을 줄 것이다.
http://msdn.microsoft.com/en-us/library/8ef0s5kh(VS.80).aspx
http://www.chaos3d.net/zboard/view.php?id=cs_public&no=17


2010. 4. 27. 13:39

"응용 프로그램 구성이 올바르지 않기 때문에..." 해결 방안



예전에 http://todayis.tistory.com/148 에 "응용 프로그램 구성이 올바르지 않기 때문에 이 응용 프로그램을 시작하지 못했습니다. 이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오." 라는 주제에 대해서 이야기 한 적이 있었다.

왠만한 경우 'vcredist_x86.exe' 파일을 설치함으로 해결 되었던 것으로 기억이 되는데.. 왠지 이번에 만든 프로그램의 경우 전혀 먹히질 않는다.. -_-;

http://kldp.org/node/95859 의 대글을 보니 이런 부분이 있다.

좀 더 정확히 얘기하면, Side-by-Side Assembly가 없어서 발생하는 문제이죠.

Visual Studio 2005부터는 공용 DLL을 System32라는 곳에 몰아서 보관하지 않고, WinSxS라는 공용 어셈블리 저장공간에 별도로 저장하게 됩니다. 이렇게 저장하는 이유는 버전 충돌을 막기 위해서이고요.

이러한 공용 어셈블리의 위치 정보는 모듈의 Menifest에 저장되어서 참조되게 됩니다.

그래서 사용하는 DLL을 단순히 복사하셔서는 안되고요. cynicjj님 말씀처럼 재배포 패키지를 이용해서 공용 DLL들을 설치하셔야 합니다. (Menifest는 Windows XP이상에서만 사용할 수 있기 때문에, Windows2000에서는 그냥 System32나 어플리케이션이 있는 폴더에 DLL들을 같이 복사해 주셔야 하고요.)

참고로 그런에 에러가 나왔을때, Dependency Walker 프로그램을 이용하면, 무슨 DLL이 없는지 쉽게 확인하실 수 있습니다.


이런 비슷한 내용을 본적이 있는데..
http://www.serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary

위의 사이트를 보니
실행 파일 자체와 실행 파일에서 액세스하는 DLL들에 대한 manifest 파일들을 private assembly로서 같이 배포하면, 에러를 피할 수 있다. 

라고 한다. 

위의 문제를 해결하기 위해서 "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86" 를 찾아보면 "Microsoft.VC80.CRT" 와 "Microsoft.VC80.MFC" 폴더가 존재한다.
Win32API의 경우 "Microsoft.VC80.CRT", MFC의 경우 "Microsoft.VC80.MFC" 디렉토리 내의 파일들과 함께 실행파일을 제공하면 될 듯 하다.

실행파일에 대한 manifest 파일도 필요하다고 하는데.. 그 파일 없이도 일단 실행이 되는것은 같은데..
참고로 실행파일에 대한 manifest 파일은 프로젝트 관련 디렉토리 내의 Debug 혹은 Release 디렉토리 내에 존재한다.

2010. 3. 23. 01:10

ubuntu 9.10 sound... Dummy output problem.



우분투 9.10 을 설치하곤 여태껏 한번도 소리가 안들린다고 생각한 적이 없었다...
오늘 유투브에서 동영상을 보려 헤드폰을 사용하기 전까지는.. -_-;

사운드 카드 아이콘에 마우스를 가져가니 "Dummy output"이란다...

일단 해결 방법을 찾았고, 지금은 사운드 자~알 나온다 ^^;

해결방법..

$ sudo update-grub

$ sudo apt-get remove --purge alsa-base
$ sudo apt-get remove --purge pulseaudio
$ sudo apt-get install alsa-base
$ sudo apt-get install pulseaudio
$ sudo alsa force-reload

$ sudo reboot

참고 웹 페이지..
http://ubuntuforums.org/showthread.php?p=8267482


2010. 3. 3. 13:57

사람 차별하는 연아..ㅋㅋ



누구라도 좋아하는 또 싫어하는게 있기 마련이지.

이렇게 기쁜 표정으로 포옹을 하는가 하면...


이건 뭡니까??
왠지 부담스러운 표정.. ㅋㅋ



표정까지 솔직한 연아가 난 참 좋더라~ ㅋ



2010. 3. 3. 01:02

커널 컴파일(kernel compile - make install) 에러



2.6.4 커널을 가지고 "make install" 명령을 입력하면 쭈욱 쭈욱 컴파일을 해나간다.
컴파일을 시작한지 얼마 되지도 않았는데..
아래와 같은 에러 메시지가 출력됐다... -_-;
# make install
...
  CC      arch/i386/kernel/process.o
{standard input}: Assembler messages:
{standard input}:104: Error: suffix or operands invalid for `mov'
{standard input}:105: Error: suffix or operands invalid for `mov'
{standard input}:765: Error: suffix or operands invalid for `mov'
{standard input}:766: Error: suffix or operands invalid for `mov'
{standard input}:982: Error: suffix or operands invalid for `mov'
{standard input}:983: Error: suffix or operands invalid for `mov'
{standard input}:1072: Error: suffix or operands invalid for `mov'
{standard input}:1073: Error: suffix or operands invalid for `mov'
{standard input}:1151: Error: suffix or operands invalid for `mov'
{standard input}:1163: Error: suffix or operands invalid for `mov'
make[1]: *** [arch/i386/kernel/process.o] 오류 1
make: *** [arch/i386/kernel] 오류 2

이 에러에 대한 해결책은 아래 링크를 참조하면 될 듯 하다.
http://www.linuxquestions.org/questions/linux-from-scratch-13/problem-while-make-kernel-343910/
# wget http://www.kernel.org/pub/linux/devel/binutils/linux-2.6-seg-5.patch
# patch -Np1 -i linux-2.6-seg-5.patch

패치 후 "make install"을 하면 정상적인 컴파일이 이루어지고, "arch/i386/boot/bzImage"를 얻을 수 있다.

구 버전의 커널에서 일어나는 현상인듯 한데.. 정확한건 잘 모른다.
kldp.org(http://kldp.org/node/74510) 에서는, 2.6.18 버전 커널의 경우 커널 컴파일이 에러 없이 동작하는데.. 2.6.9 버전 커널의 경우에는 동일한 에러가 발생한다고 한다.
답변은.. "구버전커널이시군요. 신버전커널 받아서 해보시죠" 이다. -_-;;



'Linux > Kernel' 카테고리의 다른 글

make menuconfig 에러  (0) 2010.03.03
LXR(Linux Cross-Reference)  (0) 2009.08.28
2010. 3. 3. 00:12

make menuconfig 에러



2.6.4 버전의 커널에서 "make menuconfig" 하는 도중 아래와 같은 에러 발생.. -_-;
...
HOSTCC  scripts/kconfig/mconf.o
scripts/kconfig/mconf.c:91: error: static declaration of ‘current_menu’ follows non-static declaration
scripts/kconfig/lkc.h:63: error: previous declaration of ‘current_menu’ was here
make[1]: *** [scripts/kconfig/mconf.o] 오류 1
make: *** [menuconfig] 오류 2

4.x 버전대의 gcc로 컴파일을 하면 에러가 발생하는 모양이다.
해결책은 3.x 버전의 gcc로 갈아탄 후 컴파일을 하는 것이다.
본인의 경우 3.4.6 버전의 gcc를 사용해 make menuconfig를 실행한 결과 위와 같은 에러메시지는 보이지 않고 정상적으로 동작을 했다.

다른 방법으로는 "scripts/kconfig/mconf.c" 파일의 91번째 라인에서 "static" 키워드를 제거하면 된다.
...
//static struct menu *current_menu;
struct menu *current_menu;
...


'Linux > Kernel' 카테고리의 다른 글

커널 컴파일(kernel compile - make install) 에러  (0) 2010.03.03
LXR(Linux Cross-Reference)  (0) 2009.08.28
2010. 2. 11. 18:04

DLL에서 WndProc 메시지 처리하는 방법



응용 프로그램에서 특정 DLL을 사용할 때, 해당하는 DLL에서 윈도우즈 메시지를 처리해야 할 경우가 있다.
한참을 고민했네.. 메시지를 후킹해서 필요한 녀석만 처리를 하게끔 해야하나?? -_-;

의외로 간단한 방법이 있었다.

그것을 '서브클래싱(SubClassing)' 이라고 부르는 것 같다.

DLL의 초기화 하는 적절한 부분에 다음과 같이 서브클래싱을 해준다.
본인의 경우 다음과 같이...

WNDPROC oldProc;
...

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
...
switch(msg)
{
...
}
return CallWindowProc(oldProc, hwnd, msg, wp, lp);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
...
switch(fdwReason)
{
case DLL_PROCESS_ATTACH :
...
oldProc = (WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG)WndProc);
}
}

SetWindowLongPtr() 함수를 통해 메시지를 처리할 윈도우 프로시저를 기존의 응용프로그램의 것에서 DLL의
것으로 옮긴다.
DLL 내부에 만들어 놓은 윈도우 프로시저(WndProc)에서 처리하고자 하는 메시지만 처리하도록 하고 그 외의 것은
CallWindowProc()함수를 통해 기존의 응용프로그램의 윈도우 프로시저가 처리하도록 한다.



2010. 1. 6. 14:00

우분투 / 데비안 계열 고정 ip 설정



우분투나 데비안에서 고정 ip를 설정하는 방법이다.
데비안의 경우 설치 시 ip를 설정할 수 있지만, 우분투의 경우는 DHCP로 잡히기 때문에.. 필요에 따라 다시 설정을 해 주어야 한다.

먼저 네트워크 인터페이스를 내린다(중지 시킨다).
$ sudo ifdown eth0

네트워크 인터페이스 설정 파일을 자신의 상황에 맞게 수정한다.
$sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
broadcase 192.168.0.255
gateway 192.168.0.1
dns-nameservers 168.126.63.1 168.126.63.2

네임 서버를 수정한다.
$ sudo vi /etc/resolv.conf
nameserver 168.126.63.1
nameserver 168.126.63.2

네트워크 인터페이스를 올린다(다시 동작 시킨다).
$ sudo ifup eth0


ip 를 자동으로 할당받고 싶다면, '/etc/network/interfaces' 에서 iface eth0 inet static 이하의 부분을 iface eth0 inet dhcp 로 수정해 주면 된다.


2009. 12. 26. 14:19

STM32 보드에 펌웨어 퓨징



ST 홈페이지에서 다운로드 한 Flash Loader를 이용해 펌웨어 바이너리 파일을 실제 STM32 개발 보드에 퓨징하는 방법이다.

먼저 STM32 보드를 개발용 PC에 연결을 해야 한다.
  • RS232 시리얼 케이블을 연결한다.
  • 전원을 인가하기 위해 USB 케이블을 연결한다.(USB로 전원을 받아옴..)

차후에 봐야 할 부분이지만, STM32 Cortex M3에서 System boot에 대한 mode가 두 가지가 있다.
  • FLASH mode - 올려진 펌웨어를 실행하는 모드 정도로 보면 될듯 하다.
  • SYSTEM mode - 보드에 펌웨어를 올리기 위한 모드..

mode 스위치를 SYSTEM mode로 위치시킨 후 Flash Loader 프로그램을 실행한다.

Next 버튼을 클릭한다.
Flash Loader에서 타겟보드를 인식하게 되면 위와 같이 신호등 아이콘에 녹색 불이 들어온다.
위와 같이 나오지 않는다면, System Boot Mode를 한 번 더 확인하고 리셋 후에 Flash Loader 프로그램을 재실행 시켜보면 될 것이다.
Flash에 32Kb 가 잡혀있다. 현재 사용하는 타겟보드가 Cortex M3 Low-Density임을 알 수 있다.

Next 버튼을 클릭해 다음으로 넘어가자.
Target에 자동으로 STM32_Low-density_32K 로 잡힌다.
Flash 란에 내부의 Flash 메모리에 대한 Page 내용을 알 수 있다. 시작 위치는 아무래도 Page0번의 0x08000000인 듯 하다. 이 위치에 퓨징하고자 하는 펌웨어가 올라가는 듯 하다.

Next 버튼을 클릭해 다음으로 넘어간다.
실제 타겟보드로 다운로드 할 펌웨어의 경로를 찾아서 올려야 한다.
Download to device 란의 ... 버튼을 클릭해 다운로드 할 펌웨어 바이너리 파일을 선택한다.
필요에 따라 기존의 데이터를 지워고 퓨징하기 위해 Erase necessary pages를 선택한다.
퓨징하려는 address가 8000000인지 확인을 한다.

Next 버튼을 클릭해 다음으로 넘어간다.
정상적으로 퓨징이 이루어진 화면이다.

Finish를 클릭해 Flash Loader를 종료한다.

정상적을 퓨징이 되었는지 확인을 하려면, 타겟보드의 System Boot Mode를 FLASH의 위치에 스위치를 옮기고, 리셋버튼을 살 짝 눌려주면 된다.


'혼자서 놀기... > STM32' 카테고리의 다른 글

STM32 개발 환경  (0) 2009.12.26
STM32 Memory Map  (1) 2009.12.24
Cortex-M3(STM32) System Architecture  (0) 2009.10.06
STM32F103C6T6  (0) 2009.10.05
Cortex M3 - Bit Banding  (0) 2009.09.29
2009. 12. 26. 11:00

STM32 개발 환경



STM32 개발 환경을 위해선 크게 펌웨어 소스코드를 컴파일 할 수 있는  컴파일러와 STM32  보드에 컴파일된 바이너리 코드를 퓨징하기 위한 퓨징 프로그램이 필요하다.


컴파일러

STM32 를 위한 컴파일러로는 Keil, Ride7, IAR 등이 있다.
본인이 가진 STM32F103C6T6 보드의 회사에서 추천하는 IAR 이라는 컴파일러를 사용하려 한다.
IAR 컴파일러는 IAR Systems(www.iar.com) 에서 다운로드 받을 수 있고, 현재 무료로 사용할 수 있는 버전은 최대 32KByte의 Binary를 만들어낼 수 있다. 그 이상은 유료 버전을 사용해야 하는 듯..

먼저 www.iar.com에 접속을 한 뒤 Downloads를 클릭한다.

Downloads 항목 중 ARM의 Kickstart edition을 클릭한다.

Continue... 를 클릭한다.

Product Registration and Download 의 항목들을 적절히 채워 넣고, submit registration 을 클릭한다.

입력한 E-mail을 통해 다운 받을 수 있는 링크와 시리얼 넘버를 얻을 수 있다.
다른 프로그램과 같이 설치하면 STM32 용 IAR 컴파일러를 설치할 수 있다.


퓨징 프로그램

펌웨어 바이너리 파일을 STM32 보드에 퓨징하기 위한 프로그램은 CPU 제조회사인 ST에서 제공을 한다.
ST의 STM32 다운로드 사이트(http://www.st.com/mcu/familiesdocs-110.html#Software for Tools) 에 접속을 해서 Software - PC 항목의 Flash loader demonstrator 를 다운로드 받는다.
압축을 풀고 Setup 프로그램을 실행하여 설치한다.

이상으로 STM32 펌웨어를 개발하기 위한 환경 설정은 끝났다.

뭐든 처음은 생각보다 초 간단해서 좋긴 한데..


'혼자서 놀기... > STM32' 카테고리의 다른 글

STM32 보드에 펌웨어 퓨징  (0) 2009.12.26
STM32 Memory Map  (1) 2009.12.24
Cortex-M3(STM32) System Architecture  (0) 2009.10.06
STM32F103C6T6  (0) 2009.10.05
Cortex M3 - Bit Banding  (0) 2009.09.29