C#上位机实战开发指南

所需积分/C币:40 2017-12-05 23:41:30 402KB PDF
288
收藏 收藏
举报

基于C#的上位机开发实战指南,介绍了上位机软件开发过程中重点内容以及注意事项。
12c#的前世今生 C#是微软发布的一种面向对象,运行于NET之上的高级语言。也是微软近几 年主推的开发语言,可以说是微软、NET框架的主角。只要具备一些C语言基础 航可以非常迅速的入门C#开发,这也是我极力推荐使用c#开发上位机的一个重 要原因。 13难以置信的 Visual studio2015 Visual studio2015(以下简称S2015)是微软推出的开发环境,C#也是基于 此开发。相比较之前的版本,VS2015具有更强大的调试功能,甚至集成了安卓 IoS等跨平台开发环境。作为一个强大的集成开发环境,VS2015同时还能支持 STM32单片机的编译。 具体教程请参看:htt:/www.openedv.com/thread-10273-1-1html。 笔者认为VS2015是宇宙最强DE,完虐我们常用的单片机开发环境如KEL2 AR等。更多使用技巧就留给读者自己去发现吧 14Vs2015的安装与使用 第二章C#语法基础 21c#编程概述 本章将为上位机廾发打基础,当然具有C语言或者单片机廾发绎验的同学也 可以跳过本章,直接进入第三章窗体程序的学习中。因为C#和C语言在语法上 大致相同。本章只讲解一·些与单片机C语言相差较大的部分,其余不再过多讲解。 代码分析也全部放在第三章以后。若想深入学习C#,请参考专业入门书籍,推 荐《C#图解教程》(第四版) 22命名空间 在C#中,命名空间提供了一种组织相关类和其它类型的方式。我理解的命名 空间就是一个集装箱,里面可以装下很多类和方法。其实我们也可以认为所谓的 命名空问相当于C语言中的头文件,只不过 include变为了 usIng namespace。具 体的书写规范见代码清单2-1。 代码清单2-1:命名空间书写规范 1. using System; //命名空间类似于头文件 2. using System. Collections. Generic //using include; Systerm = XXXX. h 3. using System. ComponentModel using System. Data; 5. using System. Drawing 6. using System. Text 7. using System. windows Forms 8 9.//用户自定义命名空间,相当于新定义一个头文件 10.//一般情况下一个上位机工程对应一个新的命名空间 11. namespace Demo 1 23 14. public partial class Form1 Form 15 16 〃/构造函数,新建窗体「程时自动创建这段代码,可先忽略 17 public Form1() 18 InitializeComponent() 222 012 这段代码在新建工程之后由VS2015自动创建,第1到7行代码全都为系统 臼带的命名空间。第11行为开发人员自定义的命名空间,之后的每一个上位机 项目都是一个自定义命名空间 大概了解了C#命名空间的书写格式规范后,我们再简单回忆一下C语言中头 文件的书写规范并比较二者的异同点,C头文件书写格式见代码清单2-2。 代码清单2-2:C头文件书写规范 #ifndef USaRt H 2. *define USART H 34 5. #include "stm32f10x.h" 6. #include "stdio. h 78g inc⊥ude" string,h 10. #define TxBuffsize 256 11. 12 13 #define Debug_ON 14 5 16. #define Debug PutInfo(fmt, arg.)doif(DebugON)printf(fmt, ##arg); while(o) 17 18 19. void USART Config(void) 20. void USART1 SendByte(uint8 t DataTosend) 21. void USART1 SendString(const char* String ToSend); 22. void USART1 SendBuff(uint8 t* DataToSend, uint8 t DataNum); 23. 24. 25。#endi千 通过代码清单2-2我们很容易发现,C#的命名空间和C的头文件遵循一样的 规则,即要想使用某方法某凶数则必须要包含方法所在的命名空问或者头文件。 这是相同点。不同点则表现在C语言在声明了头文件和函数接口后必须要在对应 的C文件中编写函数体后才可使用。C#则将省去了函数声明,直接即可编写对应 的函数休。 23类 231什么是类 在C#开发中,类(cass)至关重要。可以认为类是C井一个很大的主题。关于 的讨论将一直延续到本书结束。我们在单片机软件廾发中设计数据结构时往往离 不开先设计结构体,其实类就相当于结构体,这也是面向对象的一个前提条件。 我们可以将类抽象成一个既能存储数据又能执行代码的数据结构。它包含数据成 员和函数成员,因此类对c#代码的封装起着举足轻重的作用。 232如何声明一个类 类的声明和结构体类似,即定义了一个新类的成员和特征。但是它并不创建 类的实例,相当于结构体声明后并不分配内存,只有在使用时声明后才会分配内 存一样,类的声明和实例化不可混淆。类的声明方式如代码清单2-3所示 代码清单2-3:类的声明方式 using System; //命名空间类似于头文件 2. using System. Collections. Generic // usIng≈ include; systerm≈xxxx.h 3. using System. ComponentModel 4. using System. Data 5. using System. Drawing 6. using System.Text 7. using System. Windows Forms; 9.//用户自定义命名空间,相当于新定义一个头文件 10.//一般情况下一个上位机程对应一个新的命名空间 11. namespace Demo 13 14 public partial class Form1 Form 15. /构造函数,新建窗体工程吋自动创建,可先忽略 17 public Form1( 18 19 Initializecomponent() 22 0 22 //类的声明方式 23 class myclass 24. 25 //成员声明... 26. //c1ass为类的关键字, Myclass为类名 27 28 29.} 从代码清单2-3可以清晰看出,类的声明非常简单。其中类的成员可以是变 量,也可以是函数方法。 24Main:程序由你开始 每一个C#程序都必须有一个类带有Main函数(方法),它是程序的开始,它 通常被声明在 Program类中。这就好比我们在开发单片札时喜欢将main数声 明在 main. c中一样。通常 Program.cs文件随工程一起创建,详细代码见图2-1。 D4remo-Vicrosofr Visual Studio 文件相视图项目世生成)调回队1工具①体茶构()测)分恒心窗口某 1·Ayc向动=占三|■1 3 usirg Sys:cm. WindowsForms 勾解夹汽客”emo11 STar i c class Program s-atic void vain( Applicaticn. EnsblevizualStylos O Application. Set Compatibl clout RenccringDefcult(fal:c) Application, Run(new Foru1 O) 图2-1 从图中我们清晰的看到了 Class关键字,其实 Progra.cs木身就是一个类文 件 25变量与常量 251值类型与引用类型 值类型和我们单片机开发中的数据类型类似,需要一段独立内存存放它的实 际数据。如果值类型变量定义在方法(函数)内部那么在调用结束后这片内存回收 相反如果定义为全局,那这片内存则不公被回收。这和C基本一样。char,int foat,enum, struct等都是值类型。 引用类型是一个特殊的类型,它的存储需要两片内存。实例数据存放在堆中 引用存放在栈中,引用可以理解为指针。县体引用类型为什么需要两片内存不再 做任何讨论,我们只需要知道引用类型的使用和常规的值类型有什么区别就行 C语言中如果我们表示一段字符串可以定义一个指针,在C排中直接使用 string关 键字即可定义。 string便是一个非常典型的引用类型,它不遵循值类型的规则。 当我们定义个 string类型变量并且第次赋值吋假设它在地址0x020000中 那么在第二次赋值再次查看内存时,它凵绎不在上一次地址中,即引用类型每次 在使用后都会变更内存地址。引用类型在并行多线程的使用中尤为重要 当然,在上位机开发中我们可以将引用类型当作一般类型来使用。 252声明变量 C#声明变量和C语言相同,声明过程完成两件事 给变量命名,并且关联一种类型 ●编译器为其分配一·片内存 25.3变量的作用域 类中的变量作用域就在类中,类被回收,变量即被回收。方法(哟数)内部变 量作用域为整个方法体。其中如果变量是某循环某判断中定义的,作用域就在循 环或者判断休内。 254访问修饰符 代码清单2-3中类的声眀在 class前未添加任何访问修饰符,C#规定无访问修 饰符的情况下类成员即为隐式私有,外部不可访问 C#常川的访问修饰符有以下5个 ◇私有的: private ◇公开的: public ◇受保扩的: protected 内部的: interna1 ◇受保护内部的: protected internal 顾名思义, private私有即外部不可访问,只能在类的内部使用,而 public 修饰的变量则可以在类的外部访问。关于 private和 public以及变量在类中的 使用查看代码清单2-4。 代码清单24:访问修饰符及变量在类中的简单使用 1. using System //命名空间类似于头文件 2. using System. Collections. Generic //using include; Systerm XXxXh 3. using System. ComponentModel 4. using System. Data, 5. using System. Drawing; using System. Text; 7. using System. windows Forms 8. 9.//用户自定义命名空间,相当于新定义一个头文件 10.//一般情况下一个上位机工程对应一个新的命名空间 11. namespace Demo 12. 13 public partial class Form1 Form 14 15 //构造函数,新建窗体工程时自动创建,可先忽略 16 public Form1() 17. 18 Initializecomponento) 19 20 21 int data0 =0: //全局变量声明,变量声明后即可在方法中使用 22 //与C语言相同 23 24. 25. //类的声明方式 26 class MyClass 27. 28 /成员声明 29 /c1ass为类的关键字,MyC1ass为类名 30 31 int data1 =0; //无修饰符默认隐式私有 32 //外部不可访问 33 34 public int data2=8;/公有,外部可访问 35 36. 37.} 从代码清单2-4可看岀类 MyClass中data2添加了修饰符 public,因此它可以 在类的外部被调用 2.6多线程的使用 261线程概述 相信大家在嵌入式RToS中就已经接触过多线程(多任务)的处理机制。同样在 多线程的使用下C#便可以并行执行代码。注意,这里的并行并不是真正意义上 的同时执行,只是仁务上下文切换速度极快,给人的感觉好像是在并行 个C#程序开始于一个单线程(Main方法入口),这个线程是由操作系统自动 创建的,我们也称之为主线程或者UI线程。同时主线程下可以创建多个子线程。 262何时使用多线程 多线程一般情况下用在后台处理耗时任务,主线程保持执行。对于 Winform 来讲,如果所有耗时仼务都放在主线程执行,那就会带来鼠标键盘等响应迟钝现 象。为了避免这个现象,我们可以在主线程中再创建一个子线程,这样就避免了 阻塞主线程,导致U响应迟钝的现象。一个优秀的交互软件必定会有多线程的 使用。 263多线程的优缺点 在多线程的帮助下,我们可以快速的实现异步操作,这使待软件的U|可以 迅速响应,给客户一个极佳的U体验。无论我们是否使用过RTOS,但STM32 中的DMA我相信大家使用的非常之多,DMA在进行内存拷贝传输时完全不需要 CPU干预,出此我们完全可以理解为DMA是一个全硬件实现的子线程。 当然多线程并非全无缺点,最大的问题便是加大了代码的复杂性。当然多线 程本身非常简单,但线程间的交互却非常复杂,使用不当甚至会带来间歇性或重 复性的BUG。同时多线程无意问又增加了CPU资源的消耗 264多线程的简单使用 一般情况下上位机多线程都使用局部线程,它和局部变量类似,用时创建, 用完销毁。全局线程在上位机开发当中使川的相对比较少。当然全局也可以使川 但必须要自己实现挂起和恢复函数,系统自带的接口函数已经过时,容易造成阻 塞,实际开发中我们也几乎很少用到全局线程。因此我将只介绍局部线程的使用 方法。局部线程存在于方法中,像局部变量一样使用,具体介绍请看代码清单 2-5。 代码清单2-5:局部线程的使用 1. using System //命名空间类似于头文什 2. using System. Collections. Generic //using include; Systerm XXXXh using System. ComponentModel; 4. using System. Data 5. using System. Drawing 6. using System.Text 7. using System. Threading 8. using System. Windows Forms

...展开详情
试读 14P C#上位机实战开发指南
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
耿股DaShenMeng 没啥用,很少只有10几页,还都没啥用。
2020-09-01
回复
xw791488540 还行吧,就是太基础了
2019-04-12
回复
岁月静好莫视流年 同上,太差了,只有10几页
2018-09-30
回复
michaelyuhui 太差了,只有10几页
2018-01-15
回复
  • 分享精英

    成功上传11个资源即可获取
关注 私信 TA的资源
上传资源赚积分or赚钱
    最新推荐
    C#上位机实战开发指南 40积分/C币 立即下载
    1/14
    C#上位机实战开发指南第1页
    C#上位机实战开发指南第2页
    C#上位机实战开发指南第3页

    试读结束, 可继续读2页

    40积分/C币 立即下载 >