C#上位机实战开发指南上位机实战开发指南第一章C#和Visual Stduio 1.1.NET时代在. NET以前,特别是20世纪90年代,Windows程序员几乎使用了VB、c或c。 一些c和c开发人员使用纯Win32 Api,但很多人选择使用MFC。 这些语言开发困难,基础代码复杂。 21世纪初,越来越多的开发人员需要安全、集成度高、面向对象的开发框架。 2002年,微软按计划发布了. NET框架的最新版本。 它具有以下特点:多平台可以在服务器、台式机等任意计算机系统上运行。 安全性即使存在可疑代码,也能提供更安全的运行环境。 行业标准使用HTTP、SOAP、JSON等标准通信协议。 在2016年最新一期的编程语言排行榜中,C#.NET排名第四,呈上升趋势。 排名如图1-1所示。 图1-1 1.2C#的前世一生C#是微软发表的面向对象,是在. NET上运行的高级语言。 也是微软近年来推进的开发语言,可以说是微软. NET框架的主角。 有了几种c语言的基础,就可以非常迅速地开始C#开发。 这也是强烈推荐使用C#开发上位机的重要原因之一。 1.3难以置信的visual studio 2015 visual studio 2015 (以下简称VS2015 )是微软的开发环境,C#也是以其开发为基础的。 与以前的版本相比,VS2015具有更强大的调试功能,并集成了安卓、IOS等跨平台开发环境。 作为强大的集成开发环境,VS2015还支持编译STM32单片机。 参见具体教程: VS2015是宇宙中最强大的IDE,它虐待我们常用的单片机开发环境,如KEIL、IAR等。 让读者自己发现使用更多的技术。 1.4VS2015的安装和使用的安装和使用第2章第2章C#语法基础2.1C#编程概要本章是上位机开发的基础,当然有c语言和单片机开发经验的同学也跳过本章whatsapp网页版,第3章窗体程序因为C#和c语言在语法上基本相同。 本章只说明与单片机的c语言有很大不同的部分,其馀的不怎么说明。 代码分析也全部摆在第三章以后。 想深入学习c#时,请参考专业入门书,推荐C#图解教程 (第4版)。 2.2在命名空间C#中,命名空间提供了一种用于组织相关类和其他类型的方法。 我理解的命名空间是集装箱,里面有很多种类和方法。 实际上,命名空间可能相当于c语言的头文件,但include为using namespace。 具体的书写规范见代码清单2-1。 代码列表代码列表2-1 :命名空间标记规则:命名空间标记规则1.using System; /命名空间是头文件2.using system.collections.generic; using-include; systermxxxx.H3.using ponent模型; 4.using System.Data; 5.using System.Drawing; 6.using System.Text; 7.using System.Windows.Forms; 8. 9./用户自定义命名空间相当于定义新的头文件10./通常较高级别的机械项目是新的命名空间11.namespace demo 12. 13.14.publicpartialclassform 13360 for 首先是17 .公共格式1 () 18. 19 .初始化组件() 20. 21. 22.该代码在新建工程后由VS2015自动生成,从第1行到第7行的代码都是系统固有的命名空间。 第11行动开发者定制的命名空间是之后每个上位机项目定制的命名空间。 在理解了C#名称空间的表记形式的规范之后,让我们简单回忆起c语言开头文件的表记规范,比较两者的不同点。 c头文件的书写形式请参照代码清单2-2。代码列表代码列表2-2:C头文件描述规范头文件描述规范1.# ifndef _ _ usart _ h2. # define _ _ usart _ h3.4.5. # include STM 32 f 10 x.h 6. # include stdio.h 7. # include string.h 8.9. 10.# definexbuffsize 256.12.13.# define debug _ on1. 15.16.# definedbugputinfo (fmt,arg . ) do if (debug _ on ) printf (fmt while (0) 17.18.19.voidatusart _ config (void ) 20.voidausart1_ send byte (uint8_ tdata to send ) 21.voidausart1_ send string (const char * string ) 22 .使用voidausart1_ sendbuff (uint8_ t * datat to send,uint8_t DataNum) 23. 24. 25.#endif代码列表2-2,您可以轻松地看到C#命名空间和c头文件遵循相同的规则。 也就是说,要使用方法函数,必须包含方法所在的命名空间或标题文件。 这是同一点。 不同之处在于,在声明标题文件和函数接口后,可以在相应的c文件中写入函数主体,然后使用c语言。 C#可以省略函数宣言,直接描述对应的函数本身。 类别2.3类别2.3.1类别什么类别在C#开发中,类别(class )很重要。 班级被认为是C#的一大主题。 那个讨论一直持续到本书的末尾。 我们在单片机的软件开发中设计数据结构时,往往不能设计结构,实际上相当于结构whatsapp网页版,这也是面向对象的前提条件。 类可以被抽象化为同时存储数据和代码的数据结构。 由于包含数据成员和函数成员,因此类在封装C#代码中起着重要作用。 2.3.2类如何声明类的声明和结构类似,即如何定义新类的成员和特征。 但是,不创建类的实例与结构声明后不分配内存,只在使用时声明后分配内存相同,类的声明和实例化不能混淆。 类的声明方法如代码清单2-3所示。 代码清单代码清单2-3 :类声明方法:类声明方法1.using System; /命名空间是头文件2.using system.collections.generic; using-include; systermxxxx.H3.using ponent模型; 4.using System.Data; 5.using System.Drawing; 6.using System.Text; 7.using System.Windows.Forms; 8. 9./用户自定义命名空间相当于定义新的头文件10./通常较高级别的机械项目是新的命名空间11.namespace demo 12. 13.14.publicpartialclassform 13360 for 17 .公共格式1 () 18. 19 .初始化组件() 20. 21. 22./类的声明方式23.class MyClass 24. 25./成员声明.26./类是类的关键字,MyClass是类名27. 28. 29.从代码列表2-3中可以看出,类的声明非常简单。 类的成员可以是变量或函数方法。 2.4Main:程序通过您启动程序,所有C#程序都必须具有Main函数(方法)的类。 这是程序的开始,通常在Program类中声明。 这就像开发单片机时喜欢在main.c中声明main函数一样。 通常whatsapp网页版,Program.cs文件与项目一起创建,详细代码请参见图2-1。 图2-1从图中清楚地看到Class关键字,但Program.cs本身是类文件。 2.5变量、常量变量、常量2.5.1类型、参照类型类型类型和参照类型与我们单片机开发中的数据类型类似,需要在独立的存储器中存储实际数据。 如果在方法(函数)中定义了值类型变量,则在调用完成后将重用此内存。 相反,如果定义为全局,则不会回收此内存。 这和c基本相同。 char、int float、enum、struct等都是值类型。 引用类型是特殊类型,存储需要两个内存。 实例数据存储在堆栈中,参照存储在堆栈中,参照被理解为指针。具体的引用类型为什么需要两个内存,必须停止讨论。 只要知道引用类型的使用和通常类型的值的不同就可以。 在c语言中,如果字符串指示可以定义指针,则在C#中直接使用string关键字进行定义。 string是非常常见的引用类型,不遵循值类型规则。 如果定义了string型变量,并且在第一次分配时位于地址0 x02000000,则在第二次分配中再次显示内存时,每次使用引用类型(而不是上一次地址)时内存地址都会发生更改。 引用类型对于并行多线程的使用尤其重要。 当然,在上位机开发中,可以将引用型作为一般型来利用。 2.5.2声明变量声明变量C#声明变量与c语言相同,声明过程完成两个步骤。 命名变量,并将相关类型编译器分配给其2.5.3变量的范围变量的范围类变量范围位于类中,将收集类并收集变量。 方法(函数)内部变量范围是整个方法主体。 如果变量在循环的某个判定中被定义,则工作区域在循环或判定内。 2.5.4访问修饰符访问修饰符代码列表2-3中的类声明未在class之前添加访问修饰符,C#规定了如果没有访问修饰符,类成员是隐式的,不能从外部访问。 C#中常用的访问修饰符有以下5个。 私有:私有:公开:受公共保护:受保护:内部:受保护的内部:受保护的内部:正如受保护的内部的名称所示,私有无法进行外部访问,只能在类内部使用有关在私有和公共和类中使用变量的信息,请参见代码列表2-4。 代码列表代码列表2-4 :在类中简单地使用访问修饰符和变量:在类中简单地使用访问修饰符和变量1.using System; /命名空间是头文件2.using system.collections.generic; using-include; systermxxxx.H3.using ponent模型; 4.using System.Data; 5.using System.Drawing; 6.using System.Text; 7.using System.Windows.Forms; 8. 9./用户自定义命名空间相当于定义新的头文件10./通常较高级别的机械项目是新的命名空间11.namespace demo 12. 13.publicpartialclassform 13360 form 13 建立建构函式时会自动建立它,首先是16.public form1() 17. 18.initialize component () : 19. 20. 21.int data0=0; /全局变量声明、变量声明后方法中可用的22./类的声明方法26.class MyClass 27. 28./成员声明. 29./class是类的关键字,MyClass是类名30. 31.int data1=0; /无限定符默认私有32./不可外部访问33.34 .公共int data2=0; public,可外部访问35. 36. 37.从代码列表2-4发现修饰符public被添加到类MyClass中,并且可以在类外部调用。 2.6使用多线程多线程的线程概述性线程概述相信在嵌入式RTOS中可能接触到多线程(多任务)处理机制。 使用多线程时,C#也可以并行执行代码。 请注意,这里的并行并非真正意义上同时执行,而是在任务上下文之间切换非常快,只会给人一种并行的感觉。 C#程序以操作系统自动创建的单线程(主方法条目)开头,也称为主线程或UI线程。 同时,可以在主线程下创建多个子线程。 2.6.2使用多线程时使用多线程时,通常在后台处理耗时的任务,主线程继续运行。 在Winform中,如果所有耗时的任务都在主线程上运行,则会出现鼠标键盘等响应迟钝的现象。为了避免这种情况,您可以在主线程中创建另一个子线程,以避免主线程被阻止并减慢UI响应。 良好的交互式软件必须在多线程中使用。 2.6.3多线程优势和缺点多线程优势和缺点多线程帮助快速实现异步操作,软件UI能够快速响应,为客户提供良好的UI体验。 完全可以理解,DMA是完全硬件实现的子线程,因为不管是否使用了RTOS,STM32的DMA仍相信正在使用很多,并且DMA在内存复制传输期间完全不需要CPU干预。 当然,并不是所有的多线程
免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。