0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C# 用来开发上位机挺舒服

STM32嵌入式开发 来源:STM32嵌入式 作者:沈丹 2021-06-27 10:31 次阅读

作为嵌入式开发者,已经熟悉了C语言跟VS。推荐你也了解下C#,用来开发上位机挺舒服。如果你仔细与其它语言比较,就会感觉到很香。

C#良好兼容了值类型、引用类型,在发展中逐步解决了其他高级语言没解决好的问题。很好的总结了前人的经验,在基础语法上就区分了值类型和引用类型。对初次接触编程的同学来说这一点容易造成学习障碍,但是只要掌握了它,就会给实际工作带来极大便利。

反观历史,C#也曾经因为“值类型/引用类型”饱受诟病,“拆箱”和“装箱”一直是个招黑的设计。但后来我们看到,随着泛型的成熟和普及,随着泛型容器代替通用容器,装箱和拆箱的问题已经在很大程度上解决了。

还有对异步的支持等等,C#的设计最初带来了一些问题,但是最终还是交上了一份满意的答卷。

充分利用栈空间,非常高效,做了一部分C/C++擅长的事。

值类型有一大特点,就是能充分利用栈空间。高级语言的GC特性一直饱受诟病,但下面的Unity常见代码,运行时没有GC:

// 通过输入的三维向量,移动物体的位置void Move(Vector3 input){// 演示代码,有意分成很多行 input = input.normalized; Vector3 move = input * 2.0f; move *= Time.deltaTime. transform.position += move; }

这段代码没有在堆上分配空间,你所看到的操作全都是在栈上进行的,GC压力为0。我认为这是C#最令人惊艳的一点。

一般来说数组长度较长,默认分配在堆上。但是C#也提供了便利的语法,在栈上分配数组,对项目后期优化来说简直是神技:

public void unsafe foo(){int* bar = stackalloc int [10];}

没错,C#依然保留了指针,但一般仅用于局部的unsafe代码。在局部热点可以完全解放性能。

良好的语法设计和库函数设计,引导程序员写出更快且更自然的代码。

C#中最常用的容器List,也具有一些良好的设计,当然其它语言也有类似的优点:

// 新建一个list,长度为0。但在堆中预留10万个位置 List《int》 list = new List《int》(100000);// 加入很多元素,由于容量足够没有GCfor (int i=0; i《89000; i++) {list.Add(i); }// 用过以后清空list,长度变成0list.Clear();// 但容量还是10万,继续增加元素还是没有GCfor (int i = 0; i 《 99000; i++) {list.Add(i); }

list在预留空间充足时,添加元素不会产生GC。而且List和值类型结合使用,在内存占用上也有优势。当然,很多其它语言也有类似的设计,可以说别的语言做的好的部分,C#做的也一样好。

继承、泛型、接口、类型约束等等高级特性,都有着良好且自洽的设计。

最初接触C#的时候,看看int的原型,收获很大:

public struct Int32 : IFormattable, IConvertible, IComparable, IComparable《Int32》, IEquatable《Int32》 {// 。..。 }

熟悉C++的人,经过思考,可以很好的理解IComparable、IEquatable以及它们的泛型形式。同时也能猜出“Interface”的概念。思考C#的底层设计,给人的感觉就是自然、规范、恰到好处。

总之,C#语言及其标准库的设计,非常值得借鉴和推崇。

C#的良好设计让它有着越来越广泛的应用。有C语言基础的朋友可以快速上手C#,适合开发单片机的上位机。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18266

    浏览量

    288227
  • C语言
    +关注

    关注

    180

    文章

    7527

    浏览量

    128192
  • 代码
    +关注

    关注

    30

    文章

    4554

    浏览量

    66726

原文标题:用C#开发上位机挺舒服,文末送资料

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    下位CY7C68013A发送数据,上位C#读取数据,会丢帧或者帧内错位的原因?

    下位CY7C68013A发送数据,上位C#在1个while循环内不断地读取数据,510字节1帧,1秒333帧、1秒667帧、1秒1333
    发表于 02-27 07:31

    C#上位机之新建工程

    由于课程需要使用C#语言开发一个上位机。主要功能有可用通过串口读取下位机的数据,并将其传入数据库内。 首先,需要建立一个C#的工程。我是用的软件是VS2019。 1. 打开VS201
    发表于 05-29 16:58 0次下载
    <b class='flag-5'>C#</b><b class='flag-5'>上位</b>机之新建工程

    使用pycharm开发上位机配置pyqt5的环境

    上位机的开发过程中,使用QT的图形化界面,是开发上位机最好最简单的选择,因此我将讲述配置pyqt5的环境。 软件安装: 安装:pycharm的社区2021.02版 QT(安装参考https
    发表于 05-29 16:12 0次下载
    使用pycharm<b class='flag-5'>开发上位</b>机配置pyqt5的环境

    STM32USB开发(二)HID Slave通信之简单上位开发

    在网上找了一圈发现,用C#开发上位机还是比较简单的,因此在这里和大家分享一下开发的过程。
    发表于 05-29 15:55 6次下载
    STM32USB<b class='flag-5'>开发</b>(二)HID Slave通信之简单<b class='flag-5'>上位</b>机<b class='flag-5'>开发</b>

    上位机软件开发项目案例(一)之C#开发

    该软件为线束连接器自动化生产设备上位机软件,系统采用高级编程语言C#开发,基于WPF框架,下位机为西门子S7-1500系列PLC,上位机软件主要功能为结合自动化设备提供相应的人机操作界
    发表于 05-29 15:53 5次下载
    <b class='flag-5'>上位</b>机软件<b class='flag-5'>开发</b>项目案例(一)之<b class='flag-5'>C#</b><b class='flag-5'>开发</b>

    项目实战:C#上位机+arduino下位机+控制点亮LED灯

    上位机:C#上位机通过串口发送接收控制协议,来控制下位机; 下位机:arduino下位机主控,接受上位机串口协议控制GPIO硬件引脚; 硬件电路:面包板LED串220R电路,以ar
    发表于 05-18 10:51 4次下载
    项目实战:<b class='flag-5'>C#</b><b class='flag-5'>上位</b>机+arduino下位机+控制点亮LED灯

    C#开发简单的串口上位

    采用C#开发上位机非常方便,具体步骤如下:1.绘制一个上位机的界面,如下图所示: 不要忘记还有下面的串口模块serialPort1 2.初始化部分: 波特率编辑框中加入需要的波特率 实现COM口选择
    发表于 05-10 14:27 1次下载
    <b class='flag-5'>C#</b><b class='flag-5'>开发</b>简单的串口<b class='flag-5'>上位</b>机

    C#做一个简单的串口收发上位

    上位机相当于一个软件系统,可以用于接收数据、控制数据。即可以对接收到的数据直接发送操控命令来操作数据。上位机可以接收下位机的信号。下位机是一个控制器,是直接控制设备获取设 备状况的计算机。上位
    发表于 05-10 10:27 1次下载
    <b class='flag-5'>C#</b>做一个简单的串口收<b class='flag-5'>发上位</b>机

    自己做一个C#串口上位

    最近想发一个之前自己做的一个简单的串口上位机,当然,工作时写的要比这个复杂了。除了C#可以写上位机,我同事也有用QT的,具体的哪个好不 做评判。第一次接触C#还是从我实习的时候才认知
    发表于 05-09 14:24 4次下载
    自己做一个<b class='flag-5'>C#</b>串口<b class='flag-5'>上位</b>机

    C#上位开发常遇问题

    C#上位开发常遇问题C#引用C++ 动态库/静态库 静态库 动态库 unsafe和fixed关键字的应用 unsafe fixed Path类的使用 写在结尾最近完成了一个小项目的
    发表于 05-09 11:21 0次下载
    <b class='flag-5'>C#</b><b class='flag-5'>上位</b>机<b class='flag-5'>开发</b>常遇问题

    C#上位开发数据模拟上传下发

    C#上位开发数据模拟上传下发 (1)串口扫描,获取串口号。 (2)可选单通道,双通道,多通道,来获取不同数据例如温湿度。 (3)数据下发,可以控制下位机。 (4)chart示意图实时显示,有滚动条,可以清空图标 (5
    发表于 05-09 09:56 1次下载
    <b class='flag-5'>C#</b><b class='flag-5'>上位</b>机<b class='flag-5'>开发</b>数据模拟上传下发

    C#|上位开发新手指南(三)框架

    上位开发中,Windows Forms是使用最广泛的C#框架之一。Windows Forms是.NET Framework中的一个GUI框架,提供了丰富的GUI控件和易于使用的编程 模型,可以
    发表于 05-08 10:27 3次下载
    <b class='flag-5'>C#</b>|<b class='flag-5'>上位</b>机<b class='flag-5'>开发</b>新手指南(三)框架

    C#|上位开发新手指南(一)概述

    C#是一种功能强大的编程语言,用于开发Microsoft Windows平台上的应用程序。在工业控制、自动化、智能化等领域,使用C#开发上位机已经成为一种常见 的做法。如果你对于如何学
    发表于 05-08 10:24 9次下载
    <b class='flag-5'>C#</b>|<b class='flag-5'>上位</b>机<b class='flag-5'>开发</b>新手指南(一)概述

    C#上位机:串口通讯

    语言与开发技术: C#、Winform。 串口通讯是上位机的基础功能,可以通过USB等COM串口进行数据的收发,实现数据采集,自动控制等功能。一套完整的串口通讯功能可以分 为以下几个功能:属性
    发表于 05-08 10:23 2次下载
    <b class='flag-5'>C#</b><b class='flag-5'>上位</b>机:串口通讯

    C#编写简易的上位

    标题C#编写简易的上位机 代码如下:
    发表于 05-08 09:42 7次下载
    <b class='flag-5'>C#</b>编写简易的<b class='flag-5'>上位</b>机