system() 함수 관련 질문입니다..
글쓴이: lsh1172 / 작성시간: 목, 2008/06/26 - 8:46오후
안녕하세요.
system() 함수 관련 질문드려요..
-----------------------------------------
main()
{
system("flash_erase /dev/mtd1 0 1");
_InitTask();
...
}
-----------------------------------------
_InitTask(): 쓰레드들을 생성하고 세마포어 생성 하는 함수.
내용이 많아서 다 보여드릴 수는 없습니다...
이런식으로 프로그래밍이 되어 있을 때
_InitTask() 함수를 막으면
system() 함수의 리턴값이 0으로 제대로 실행이 됩니다.
_InitTask() 함수를 열어서 동작 시키면
system() 함수의 리턴값이 -1이 되면서 제대로 실행이 안됩니다.
쓰레드들 생성하면서 메모리가 부족해서 error가 났을 수도 있다고 생각이 들고요.
또 다른 문제 원인이 있을까요?
메모리가 부족해서 error가 났다고 하면... 확인 할 수 있는 방법이 있을 까요?
답변 부탁 드립니다.
Forums:
...
뒷부분은 제가 내용을 모르겠구요(안보여주셨으니. 헤헤..)
일단 system()만 놓고 보면요. 일단 얘를 믿으시면 안니되옵니다.
얘는 가장 커다란 문제가..
1. 리턴값 부정확
2. 언제 리턴해줄지 부정확
이렇습니다. 그래서 특정한 리턴값에 따라 어떤 동작을 처리하실거면
system("flash_erase /dev/mtd1 0 1");
이 부분을 바꾸셔야만 됩니다. 예를 들면 flash_erase 이 프로그램을
라이브러리화 하셔서 그 안의 특정 함수를 호출하셔서 리턴값을 받으시는게
최선의 방법이 아닐까 생각되어집니다.
파이프를 열어서 하는 방법도 있고 뭐 다양하긴 하지만 결국에는 알수없는
부정확한 이상한 어쩌구 저쩌구가 발생하기는 매한가지입니다.
flahs_erase 함수 관련
답변 감사드립니다.^^
아직까지 헤매고 있네요..
flash_erase 이 프로그램을 라이브러리화하라고 하셨는데
잘 모르겠어요..ㅠㅠ
그리고 말하신 대로 popen이나 fork, exe 계열 함수를 사용해도 제대로 동작을 안하더라고요..
추가로 질문이 있는데요..
mtd 드라이버를 사용해서 flash 제어를 하는데요.
read, write 함수는 제공이 되는데..
erase 관련 함수는 쉘 명령어를 사용해서 프로그램을 해야하는건지
erase 하는 다른 방법이 있나요?
(예를 들어 0xff로 write 해 버리는 방법... 이렇게 해도 되는건가요? ㅎㅎ)
또한, flash write할 때 write() api를 콜 하면
내부적으로 erase가 된다음에 write가 수행이 되는지요?..
제가 테스트 해 봤는데.. erase 하지 않고 write() 콜 했을 때
제대로 된 값이 write 안되서요..
답변 부탁 드립니다.^^
좋은 하루 되세요~~
댓글 달기