你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

UI设计新方法:使用C++builder的即见即得辅助设计

[复制链接]
liangzuoyang 提问时间:2012-6-16 14:51 /

我先介绍一下我自己吧,
我之前对MCU也是一知半解,一步步的自学过来,2008-2012
在国内某家代理商工作,工作的内容是负责st mcu FAE相关工作,
现在是在自谋职业。
 
我对UI,RTOS 的研究是源于开发 全彩LED视频处理器。
开发这个系统,是我人生中第一次编写完全系统的代码。
 准备工作时,我先去学习RTOS 的知识,特别是ucOSII,
结果是挺痛苦的,好长一段时间都没用得起来。基于我之前的FAE/AE的工作,
我对stm32 了解比较多,对Cortex-M3 这个核也了解过(工作需要).
觉得自己只要一个简单的任务调度即可以完成工作,并且自己写一个任务调度系统
要比去学/用 ucOSII 要快,并且害怕没有技术支持,所以花了几个月写了个RTOS,现在已经稳定应用
于多款产品中.
   我开发的这个全彩LED视频处理器有个小屏,需要用到菜单设置参数,我对菜单系统的理解来源于mstar 模拟TV 的菜单(我早期是做TV),
全彩LED视频处理器上理论上可以,但是这个菜单主要是个十字链表,可以把各个菜单联系起来,但是很痛苦的是,
只要改一点内容都需要去重新看这个大大的链表,以用来确定内容应填在那个节点.
 
痛苦之余,我想去选择ucGUI,等的菜单系统,但是庞大的代码,还到处看书,到最后,就关键的,移植这一关我都过不了.
可能年纪大一此了,还真的无法有把握去吃透,也没有那个精力,还真头痛.
 
十分无耐,偶儿我看到了一个消息,微软有一个micro .NET 可以做出很漂亮的界面(是去拜访客户中了解到的)
开发很方便,是在virtual studio中开发,即见即所得,可以生成在MCU中运行的菜单,我心里面迎来一丝暑光。
但是当我详细去了解这个 micro.NET的时候,,发现micro.NET编译出来的BIN 要200多K,且RAM要求很大,
当时,没有一颗ST 的MCU满足这个要求,我投身micro.NET的路被堵死了。
 
不过micro.NET 给我的启发是 嵌入式菜单也可以使用即见即所得这种设计方法.
 
联系我自己的知道的,我读高职时,就接触过的c++builder(现在一直在用,当时我电子专业,去计算机专业旁听来的)
他的VCL 菜单结构对我印像很深。
我试着以VCL的理念去设计菜单,可以问题就来了,为了实现VCL这种代码复用,窗体管理,消息派送等功能,
必需使用有c++类这种功能,才可以实现。。
头又开始痛了,怎么会一直走都是绝路呢,st 的外设库等,都是使用c的。绝大多数的MCU code都使用C,
当时IAR5.50,倒是支持c++,但他这个C++并不是标准的C++,而是由日本人发明的,工业c++,比标准的
c++俺割了很多,不通用,很多c++的概念并不支持.虽然该c++能满足我的要求,但是不流行,我查他的资料,
网上说他很少用,也很久没有更新了,并且编译出来的bin 沉余太多,效率不高,占用的空间比较小。
 
我要实现VCL 类似的功能,必需有类继承的功能才行,又遇到绝路。
 
机会来了,偶然遇到一个台湾牛人写的文章,使用了c语言本身实现了C++大部分的功能,
确实利害,在你的程序里面只要加一个头文件,就让C语言实现class,new,继承等功能,
他的这个头文件,只是用typedef     ## molloc 这三个C的基本元素,就能实现了C++大部分功能。
后续我把这个粘上,一起分享.我用起来现在都用得顺了,使用C语言,以C++的角度组织代码,
会让代码很容易管理,但是性能并不会下降,这个真的是好东西。
 
直到遇到这个好东西,所有的条件都成熟了。之后我就开始设计这些菜单的元素.
设计这个类似VCL的东西,思路也挺简单。
1.先设计一个类,  这个类包含一些特性,
    如座标,颜色,实现方法如drawing, KeyEvent 等函数。
2.这个类是可以继承的。可以动态new() 分配。
3.使用虚函数实现多态性,使得各个窗口组件都可以使用同样的接口访问.
4.使用C++Builder 的控件设计菜单,运行时,把控件的状态生成基于我们自己写的
   菜单控件,并把这些特性(颜色,座标,等赋值为c++builder 的VCL一样。
5.编写LCD底层驱动函数,只有一个基本的DrawPixel(x,y,R,G,B);
 
 
 我现在设计的这个库已经可以实现
   1.标签
   2.按钮
   3.文本框
   4.对话框
   5.图片.
menu.jpg
 
后结我需要用到新的控制,会慢慢增加.

下面是我的联系方式,我喜欢交朋友,有问题大家一起研究。
目前我主要做系统方面的研发
 专用图型芯片+FPGA+MCU  ,数据库,上位机软件等,
因为早前在代理商support ST mcu,也积累一些资料,都是自己闲时,
摆送,都很乐意与各位网友分享.
 
1.  Flash loader for stm8/stm32   (包括上下位机)
2. OS for Cortex-M3 源码,  简单,合适初学者研究,和工程应用.
3.即见即所得菜单库.(需安装c++builder2010)
 
联系人:梁祚扬
名称:深圳市洲泰科技有限公司
地址:深圳市宝安西乡107国道339号(西成工业区公交站)吉美禾大厦1018
网址:www.zoti.cc
邮件:alex_liang@zoti.cc
手机:13600442925
电话:0755-26489058
传真:0755-23048855
邮编:518000
QQ: 1516526384
 
c实现C++的一些介绍.
本文介绍一种轻量级的面向对象的C语言编程框架:LW_OOPC。LW_OOPC是Light-Weight Object-Oriented Programming in(with) C的缩写,总共一个.h文件,20个宏,约130行代码,非常的轻量级,但却很好的支持了很多面向对象的特性,比如继承、多态,可以优美的实现面向接口编程。这个框架系由台湾的高焕堂先生以及他的MISOO团队首创,之后由我继续改进优化,最后,经高焕堂同意以LGPL协议开源(开源网址参见后文)。
       用C语言实现OO?我没听错吗?这听起来真是太疯狂了!… 大家都知道,C++支持了面向对象和面向泛型编程,比C要更强大些。那么,为什么要在C语言中实践面向对象呢?为什么不直接使用C++呢?
 
为什么要用面向对象?
面向过程方式开发的系统,代码复杂,耦合性强,难以维护,随着我们所要解决的问题越来越复杂,代码也变得越来越复杂,越来越难以掌控,而面向对象改变了程序员的思维方式,以更加符合客观世界的方式来认识世界,通过合理的运用抽象、封装、继承和多态,更好的组织程序,从而很好地应对这种复杂性。
 
为什么不直接使用C++
C和C++之争由来已久,可能要持续到它们中的一种去世^_^。C语言以其简洁明快,功能强大的特点,深得开发人员的喜爱,尤其是在嵌入式开发领域,C语言更是占据了绝对老大的地位。在我看来,语言只是工具,作为程序员,我们要做的是:选择合适的语言,解决恰当的问题。我们要尊重事实,考虑开发环境(软硬件环境),考虑团队成员的水平,从商用工程的角度讲,选择团队成员擅长的语言进行开发,风险要小很多。
       一些从Java/C#转到C的程序员们,无法从面向对象切换到面向过程,但又必须与C语言同事们在遗留的C系统上开发软件,他们有时会非常困惑:C语言是面向过程的编程语言,如何实践面向对象,甚至面向接口编程呢?此时,就非常需要在C语言中实现面向对象的手段,而LW_OOPC正是应对这一难题的解决之道。
 
LW_OOPC是什么?
       简而言之:LW_OOPC是一套C语言的宏,总共1个.h文件(如果需要内存泄漏检测支持以及调试打印支持,那么还需要1个.c文件(lw_oopc.c,约145行)),20个宏,约130行代码。LW_OOPC是一种C语言编程框架,用于支持在C语言中进行面向对象编程。
 
 
 
 
 
 
 
收藏 评论0 发布时间:2012-6-16 14:51

举报

0个回答

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版