
//[참고]{-----------------------------------
//목차는 <Ctrl+B> 를 눌러 나오는 [책갈피] 를 활용.
//}----------------------------------------

"새로운 [맷돌-통합개발환경] 사용시에는 반드시 새로운 [운영체제] 를 맷돌에 설치해야 합니다."
"{ 메뉴 : [설정]->[맷돌 운영체제 ... ] } 참고."

#<첨단기술의병사양성>

************************************************************************
"첨단기술의병사" 는 "프로그램을 통한 하드웨어 제어" 를 할수 있는 "초/중/고교생" 을 의미.
************************************************************************

"프로그래머" 를 의미하는 것이 아니며, 리눅스, FreeBSD, 윈도우나 안드로이드에서 구동되는 "어플리케이션" 을
개발하는 존재를 의미하지 않음.

즉, 가상공간인 OS 에서만 구동되고 데이터를 양산하고 끝내는 가상공간에 속박된 존재를 의미하는 것이 아니라,
"생각으로 현실을 제어할수 있는 능력과 기술을 가진 존재" 를 의미.


생각을 현실화 하는 가장 기본적인 방법은 바로 "미술".

아동부터 노인까지 공통으로 적용될수 있으며, 그 차이는 있으나 "생각을 현실화" 할수 있는 가장 직관적인 방법이나,
"미술" 은 그 결과를 도화지에서 보는 것으로 끝이며 그 이상이 아님.

"미술" 이외에 "생각을 현실화" 할수 있는 방법은 바로 "프로그램을 통한 제어".
즉, "소프트웨어(생각)"로 "하드웨어(현실)"를 제어하는 것으로 일반인이 구현할수 있는 실제하는 "마법" 과 같은 것.


"소프트웨어" 만으로는 가상공간인 OS 라는 한계를 넘을수 없으며, 영원히 "생각" 을 벗어 날수 없음.
이는 "현실" 에 대한 표현이라 할수 없는 영원한 상상에 불과한 것.


"생각의 현실화" 는 "제어" 를 통해서만 가능.

1) 컴퓨터에서 프로그램을 통한 전기모터 제어(로봇).

2) 컴퓨터에서 프로그램을 통한 LED 제어.

3) 컴퓨터에서 프로그램을 통한 센서 제어(로봇 및 기타 장비).


IOT(사물인터넷) 이라는 것은 결국에는 "통신(인터넷)을 통한 제어" 에 해당하는 것.


"제어" 에는 반드시 아래와 같은 "통신수단" 이 필요.

1) 병렬통신(근거리, 제어보드 내부).

2) 직렬통신(PC<=>PC, PC<=>제어보드, 제어보드<=>제어보드 통신).

3) 무선통신(PC<=>PC, PC<=>제어보드, 제어보드<=>제어보드 통신).
   IOT 는 실제 "무선통신을 통한 제어" 범위에 해당.


"SW 인재", "사이버 인재" 등은 실체가 없는 "영원한 가상세계의 난민" 이자 시간낭비, 공상에 불과한것.


"첨단기술의 병사" 란 바로 "프로그램으로 제어를 할수 있는 존재" 이며, 이들을 양성하는 것이 21 세기를
만들어 가는 과정이라 할수 있는 것.


현재는 20 세기의 연장선상에 존재하며 아직 21 세기라 할수 없으며, "첨단기술의 병사 양성" 만이 진정한
21 세기를 가져다 줄 것.


가장 단순하게는 "로봇(HW 중심)", 좀 세련되게는 "메카트로닉스" 에 집중해야 한다는 것.


"첨단기술의 병사" 는 [실제 할수있는 자] 를 의미하며, [마음만 먹으면 할수 있다는 자] 즉, "공상가, 망상가" 를 의미하지 않음.

"첨단기술의 병사 양성" 이란 뜻을 제대로 이해하기 바람.


#<개요>

[참고!!!]{----------------------------------------------------------------------
맷돌B(G.MTDL.B) 의 개발로 기존 맷돌(G.MTDL.A) 는 맷돌A(G.MTDL.A) 로 명칭이 변경되었습니다.
맷돌B 는 맷돌A 와 완전히 동일하며 모든 예제는 상호 사용이 가능합니다. 따라서, 맷돌의 모든 내용은
맷돌A/B 모두에 공통적으로 적용됩니다.
}------------------------------------------------------------------------------

이것은 기계닉스에서 자체 개발된 <64BiT 가상기계형 운영체제 VMOS> 로 기동되는 <맷돌(G.MTDL.A)> 개발을
위한 <맷돌-C(한국형-C) 언어> 가 내장된 통합개발환경이며, 기계닉스에서 개발된 GUI 부품으로 제작 되었습니다.

<맷돌(G.MTDL.A)> 을 개발할수 있으며 <맷돌-C(한국형-C) 언어> 를 <가상구동기> 에서 기동하는 경우는 PC 를
이용한 제어를 수행 할수도 있습니다. 즉, PC 상에서 가상맷돌을 기동하여 PC 의 직렬포트 등을 제어할수 있습니다.

<64BiT 가상기계형 운영체제 VMOS> 와 이를 지원하는 <맷돌-C(한국형-C) 언어> 는 기계닉스 기술력의 상징이자
첨단 대장장이의 자부심이라 하겠습니다.

<맷돌-C(한국형-C) 언어> 는 기본적으로 <ANSI-C> 와 호환되며 추가로 <한글> 을 함수/변수 이름등에 광범위하게
사용할수 있어 보다 직관적이고 알아보기 쉬운 프로그램을 작성할수 있으며, 아직 영어등의 환경에 익숙하지 못하고
식별능력이 미약한 학생들이나 일반인도 쉽고 빠르게 C 언어를 사용한 제어기술의 세계로 진입할수 있습니다.

무엇보다 미래의 대한민국을 짊어질 아이들이 보다 쉽게 C 언어와 C 언어를 사용한 제어에 입문하여 논리적이고
실용적인 사고를 가진 미래의 기술 병사이자 기술 생명체로 성장하는데 큰 도움이 될것이라 자부합니다.

<64BiT 가상기계형 운영체제 VMOS> 와 <맷돌-C(한국형-C) 언어> 와 <맷돌(G.MTDL.A)> 은 온 백성을 기술 생명체로
개량하기 위하여 기계닉스가 창조한 작은 기술의 세상입니다.


#<맷돌(G.MTDL.A)>

<64BiT 가상기계형 운영체제 VMOS> 가 내장된 64BiT 처리 구조를 가지는 <손톱컴퓨터> 입니다.

기본적으로 <다중실행> 이 지원되며(현재는 단일 실행만 지원) 함수만으로 제어를 하기 위한 여러 기능의 API 가 지원됩니다.
API 는 <맷돌(G.MTDL.A)> 을 위한 API 와 가상구동시 PC 제어만을 위한 API 두 종류가 존재합니다.

<가상구동> 시에는 ROM:64K, RAM:64K, HEAP:64K 의 메모리를 가지며, 실제 <맷돌(G.MTDL.A)> 은 제품군에 따라
다른 사양을 가질수 있습니다(자세한 내용은 기계닉스 홈페이지에서 <맷돌(G.MTDL.A)> 제품 설명을 참고 바랍니다).


#<한글지원>

<맷돌-C(한국형-C) 언어> 는 OS 자체의 글꼴을 사용하는 것이 아니라 기계닉스에서 자체 제작된 글꼴을 사용하고 있습니다.
따라서, KS5601 한글과 한자 기호등을 모두 지원하며 함수이름이나 변수 이름에 자유롭게 섞어 사용가능합니다.

기존 ANSI-C 의 이름규칙은 물론이고 여기에 더하여 한글 등을 사용가능하므로 보다 식별이 쉬운 이름을 만들수 있고
가독성이 뛰어난 문서를 작성할수 있습니다.

수학식의 경우 "π" 와 같은 문자도 사용가능하므로 훨씬 일반 수식에 가까운 표현을 할수 있습니다.

KS5601 에서 지원되지 않는 문자는 "똠" 과 같이 표시됩니다.


#<설계묶음 단위 작업>

<맷돌-C(한국형-C) 언어> 는 모든 처리를 <설계묶음> 단위로 처리합니다.

<설계묶음> 은 <*.gprj> 의 확장자를 갖으며 관련 모든 문서는 이 경로 안에 존재해야 합니다.

<ANSI-C> 와 같은 기본경로가 없이 모든 관련 문서가 <설계묶음> 단위로만 처리 되므로 관리가 쉽고 배포가 쉽습니다.

경로는 통합개발환경상에서 엄격하게 관리하므로 사용자는 이 관리에 따르면 됩니다(해당 알림글이 표시됨).


#<설계묶음 마법사 지원>

<설계묶음 마법사> 지원으로 사용자는 어려움 없이 기본적인 <설계묶음> 틀을 완성할수 있습니다.

기본적인 <함수묶음> 등이 추가돼 있으며 사용자는 목적에 맞는 <설계묶음> 을 고르고 사용자의 문장을 추가 하면 됩니다.
추가되는 <함수묶음> 의 해당  <*.h> 문서도 자동 관리 되므로 사용자는 번거로운 관련 문서 고나리 작업에서 벗어날수 있습니다.


#<함수묶음 지원>

<맷돌-C(한국형-C) 언어> 는 <설계묶음> 단위로 <함수묶음> 을 지원합니다.

이는 코드내용을 보여주지 않고 단지 <*.h> 와 <*.glib> 만을 제공하고자 하는 경우 유용합니다.
아직은 기계닉스 내부적으로만 사용하고 있으나 추후 사용자가 <함수묶음> 을 제작할수 있는 기능을 추가할 예정입니다.


#<검증개발 기능>

<맷돌-C(한국형-C) 언어> 는 단순히 실행가능한 <가상기계> 만을 만드는 것이 아니라 이를 검증하기 위한 정보도 같이
수집하며 이 검증 정보는 통합개발환경에서 실제 검증시 사용하게 됩니다.

<맷돌(G.MTDL.A)> 을 대상으로 개발하는 경우는 <맷돌(G.MTDL.A)> 과 통신으로 연결하여 검증하게 되고,
통합개발환경 내부에 포함돼 있는 <맷돌가상구동> 기능으로 개발하는 경우는 <가상 맷돌> 과 내부적으로 통신하여 검증합니다.

<정지점> 지정, 행단위/문장단위 실행, 자동실행 등을 모두 지원하므로 개발시 오류를 사전에 완벽하게 검증할수 있으며,
교육등의 목적으로 사용시 실행돼가는 단계를 직접 눈으로 확인할수 있으므로 보다 깊은 이해를 유도할수 있습니다.

검증시에는 <맷돌-C(한국형-C) 언어> 의 ASM 문서를 볼수 있으나 사용자는 직접 ASM 문서를 작성하거나 수정할수 없으며
없으며 그냥 번역 과정을 참고하는 정도로만 보아주기 바랍니다(교육적 차원으로 공개한 것임).


#<편집기>

기계닉스 GUI 기술의 결정체라 할수 있는 <편집기> 는 단일 GUI 부품으로는 가장 복잡하고 난이도가 높습니다.

일반 상용제품들에 비하여 부족한 점이 없지 않으나 <맷돌-C(한국형-C) 언어> 를 위한 문서를 작성하는데는 더 좋은
기능을 제공합니다.

기본적인 <색동문자> 기능을 비롯하여 <형광문자> 기능등으로 문서 작성의 가시성을 높였으며 충분한 딘계의 <되돌림/되살림>
기능의 지원하고 있습니다. 또한, <개발검증> 을 위한 다양한 검증관련 시각화 기능을 지원하고 있습니다.

마우스 가운데 버튼을 누르면 지정위치의 단어가 자동으로 선택됩니다(일반 적인 편집기와 다름).


#<색동문자 기능>

편집상태에서 문법적인 단어나 문자열은 각각의 색과 형식으로 표시되며 사용자가 색을 지정할수 있습니다.
이는 통함개발환경의 <설정 대화상자> 에서 수행할수 있습니다.


#<형광문자 기능>

<찾기/교환 대화상자> 에서 <찾을 문자열> 에 입력한 문자열을 편집기 상의 문서에서 전부 <형광색> 으로 지정해 줍니다.

굳이 일일히 찾는 번거로움 없이 눈으로 간단하게 해당 단어를 찾을수 있습니다. 사용자는 이 기능을 사용하여 항상 시인성
표시를 해야 하는 문자열을 지정해 줄수 있습니다.


#<정보창:설계묶음>

<설계묶음> 을 관리합니다.

<설계묶음> 안의 모든 문서를 여기서 추가/삭제할수 있고 새로운 설계묶음을 생성할수 있으며 탐색기능도 지원합니다.


#<정보창:설계정보>

설계묶음을 처리하는 과정에서 생성된 설계 문서 정보를 정리/분류하여 보여주며 탐색기능도 지원합니다.


#<정보창:상태정보>

<맷돌(G.MTDL.A)> 내부의 중요 장치 정보를 보여 줍니다.

<맷돌(G.MTDL.A)> 은 일종의 <가상기계형 CPU> 기능도 겸하고 있으므로 사용자는 참고만 하고 이 기능 자체를 이해할
필요는 없습니다. <개발검증> 시에만 정보가 갱신되며 다른 경우는 사용되지 않습니다.


#<#include 기능>

<맷돌-C(한국형-C) 언어> 는 모든 것을 <설계묶음> 단위로 처리하며 일반 ANSI-C 와 같은 기본 include 경로는
존재하지 않습니다. 따라서, 모든 문서의 경로는 <*.gprj> 설계묶음 경로안에서 정확하게 지정해 주어야 합니다.

#include " ... " 등과 같은 지정을 권장합니다.


#<문법>

<맷돌-C(한국형-C) 언어> 는 기존 <ANSI-C> 와 모든 제어문, 실행문, 선언문 등의 문법이 동일합니다.

즉, 기존의 C 언어를 알고 있는 사용자는 바로 사용 가능하며, 아직 C 언어에 익숙하지 않은 사용자는 일반적인
C 언어 관련 서적으로도 C 언어 문법을 공부해도 <맷돌-C(한국형-C) 언어> 를 사용하는데 지장이 없습니다.


#<자료형>

<맷돌-C(한국형-C) 언어> 는 매우 엄격한 자료형을 지원하고 있습니다.
char(1Byte), short(2Byte), int(4Byte), long(8Byte), float(8Byte), double(8Byte) 로
각각 구분된 정확한 크기를 지원합니다. 단, 내부적으로 float 는 double 과 같이 취급됩니다.


#<절대주소>

<맷돌-C(한국형-C) 언어> 는 64BiT 구조를 가지는 <맷돌(G.MTDL.A)> 을 위하여 모든 주소를 64BiT 로 관리
합니다. 즉, 추출된 <절대주소> 는 무조건 64BiT 크기를 가집니다.


#<2진수 표현 지원>

기존 <ANSI-C> 와 가장 큰 차이점으로 <맷돌-C(한국형-C) 언어> 는 최대 64BiT 까지 2진수 표현을 지원합니다.

이는 제어용으로 개발된 [맷돌-C] 의 가장 큰 특징으로 <2진수> 표기는 제어시에 대단히 유용합니다.

2진수는 "0b" 또는 "0B" 로 시작하고 "0"  또는 "1" 로 구성됩니다.
ex) 0b1011100110101100101010110010101011001010101100101010110010101011

<2진수> 표현을 지원하는대신 <8진수> 표현은 지원하지 않습니다. 이점 주의 바랍니다.


#<문자상수>

<맷돌-C(한국형-C) 언어> 는 기본 64BiT 단위로 처리되므로 <문자상수> 도 최대 8Byte 크기를 지원합니다.
<한글> 의 경우는 최대 4자 까지, <영문> 의 경우는 최대 8자 까지 지원합니다.


#<형식문자>

<맷돌-C(한국형-C) 언어> 는 "%D" 등의 <형식문자> 는 지원하지 않습니다.
대신 다른 API 함수로 문자열<=>값 의 변환을 수행할 수 있습니다.


#<제어기능>

<맷돌-C(한국형-C) 언어> 와 <맷돌(G.MTDL.A)> 을 개발한 것은 <C 언어> 를 사용하여 누구나 쉽게 <제어> 를
할수 있게 만들기 위한 것입니다.

일반 마이컴(MCU) 등과 달리 <함수> 기반 동작을 하므로 사용자는 내부의 기능을 거의 알 필요가 없으며 단지 원하는
기능의 함수 호출만으로 제어를 수행할수 있게 됩니다.

이는 이미 기계, 기구에 정통한 기술자들의 경우는 약간의 C 언어 학습만으로도 이미 가지고 있는 풍부한 기술을
간단하게 제어와 접목할수 있다는 뜻이 됩니다.

설사 C 언어와 제어등을 전부 몰라도 둘을 조금씩만 학습해도 원하는 수준의 제어를 수행할수 있습니다.

PC 에서는 <통합개발환경> 자체의 <맷돌가상구동> 기능으로 PC 의 직렬포트나 주소지정으로 직접 제어기능을 수행할수 있고
G.M.RC.BASiC 등의 서보제어기를 PC 의 <직렬통신포트> 제어 함수를 사용하여 마이컴을 사용하지 않고도 PC 상에서 직접
마이컴상의 UART 제어와 똑같이 제어할수 있습니다.

이는 번거롭게 마이컴으로 개발하지 않고 <맷돌-C(한국형-C) 언어> 로 PC 에서 <개발검증> 기능으로 충분히 검증개발후
이 문서를 그대로 마이컴용 C 로 옮기는 방식의 개발이 가능함을 의미합니다(실제 써보면 대단히 편리합니다).


#<예약어>

<맷돌-C(한국형-C) 언어> 는 기준이 되는 <ANSI-C> 에서 거의 사용되지 않는 일부 예약어를 과감하게 제거 하였습니다.

이 <맷돌-C(한국형-C) 언어> 도 C 언어로 개발되었으며 이 과정에서 역시 아래 예약어 이외의 것은 사용되지 않았으며
지시어등 일부는 필요에 따라 향후 추가될수 있습니다.

break	  else	  switch	 case	  return		  continue	 for	    default	
goto	   do	    if	     while	 struct		  union		   double 	int	
long	   char	  float	  short	 unsigned	 signed		  void	   include	
define	 undef	 sizeof


#<연산자>

<맷돌-C(한국형-C) 언어> 는 "?" 를 사용한 [3항 연산] 은 지원하지 않습니다.

-	  -> 	--	 -=	 +	  ++	 +=	<	 << 	<<=	 <=	 >	 >>	 >> =	  >=	 =	
==	 !	  !=	 &	  &&	 &=	 |	 ||	|=	 ^	   ^=	 *	 *=	 /	 /=	 %	
%=	 .	  ~	  ?	


#<기호>

/* */	#	[	]	(	)	,	"	'	;	:	\	{	}	


#<특수기호>

보통 문자열 내부적으로 사용되는 제어문자로 필요에 따라 향후 추가될수 있습니다.

\\	\n	\0	\"	\'	\r	\t	


#<함수포인터>

<맷돌-C(한국형-C) 언어> 에서는 <함수포인터> 가 지원되지 지만 향후 필요에 따라 추가될수 있습니다.


#<선언과 동시 초기화>

<맷돌-C(한국형-C) 언어> 는 아직 <선언과 동시 초기화> 기능을 지원하지 않습니다.

이는 제어 기능과 무관한 것이라 개발시 우선순위에서 밀렸기 때문이며 향후 보완될 예정입니다.


#<문의/오류보고>

오류나 문의는 아래 <기계닉스> 로 연락 바랍니다.

"http://www.gigyenics.co.kr"
"gigyein@gmail.com"


최근작성:2022.07.15.금
초안작성:2009.10.03.토

기계닉스 첨단 대장장이 김 갑철

