C语言在单片机应用开发例子


C语言介绍

C是一种通用的编程语言,广泛用于系统软件与应用软件的开发。早期,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。 C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐,成为最近25年使用最为广泛的编程语言[2]。目前,C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows, Mac OS X, Linux, Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。二十世纪八十年代至今的有关程序开发工具,一般都支持匹配ANSI C的语法。

一个简单C语言添加通信后缀函数

		unsigned int AddSuffix(unsigned char *Src, unsigned int SrcLen)
		{
			unsigned int	i;
			unsigned int	j;
			unsigned char	*Pt;

			Pt						=	Src + SrcLen;	// Source buffer must big!!

			j						=	0;

			for( i = 0; i < SrcLen; i++ ) {				// All the data.

				*(Pt + j++)			=	*(Src + i);

				if( *(Src + i) == 0x0d ) {				// Is 0x0d ?

					*(Pt + j++)		=	0x55;
				}
			}

			for( i = 0; i < j; i++ ) {					// Shift data.

				*(Src + i)			=	*(Pt + i);
			}

			return( j );								// Aim length.
		}
		

一个C语言串口通信函数

		void UartApp( Uart_Recv *Dev )
		{
			unsigned char	Status;
			unsigned char	DataTp;
			unsigned short	i;
			unsigned short	Num;
			
			if( Dev->Nonius == 0 ) {					// Have data?

				return;
			}
			
			OS_ENTER_CRITICAL()
			
			Num									=	Dev->Nonius;
			
			OS_EXIT_CRITICAL()
			
			i									=	Num;

			Dev->FrameLen						=	0;
			
			while( i-- ) {								// Out data.

				DataTp							=	Dev->Data_buf[Dev->OutLen++];
				if( Dev->OutLen >= RECV_AT_MAX ) {

					Dev->OutLen					=	0;
				}
				
				Dev->Frame_buf[Dev->FrameLen++]	=	DataTp;
			}

			OS_ENTER_CRITICAL()
			
			Dev->Nonius							=	Dev->Nonius - Num;
			
			OS_EXIT_CRITICAL()
			
			#if DEBUG_PRINT
			Uart1Printf("Dev->FrameLen=%d\r\n", Dev->FrameLen);
			for( i = 0; i < Dev->FrameLen; i++ ) {
				
				if( Dev->Frame_buf[i] < 0x0f ) {
				
					Uart1Printf("0%x ", Dev->Frame_buf[i]);
				}
				else {
					
					Uart1Printf("%x ", Dev->Frame_buf[i]);
				}
			}
			Uart1Printf("\r\n");
			#endif
			
			Status	=	PrintData( Dev->FrameLen, Dev->Frame_buf );
			
			if( Status == false ) {
				
				IWDG_Init();							// print err
				
				while(1);
			}
		}
		

桂ICP备2022000325号-1

桂公网安备45070302000697