Chocore 发表于 2012-4-15 18:54:37

【好文分享】CoX:让你在ARM编程时得心应手

CoX:让你在ARM编程时得心应手
随着ARM的发展越来愈快,应用越来越广泛,现在ARM Cortem M系列已经基本走向取代8位、16位MCU的时代。正式因为这样,推出ARM Cortem M系列CPU的厂商如雨后春笋一般迅速增加。厂商在推出自己产品是无益会在自己的产品中增加各种差异化、特色化功能,然而,这就让开发的工程师,在开发产品时变得比较困难。特别是在产品需要优化和升级,更换硬件平台时。软件的更换也会变得相当复杂,所以,ARM也推出一些软件设计方面的标准-CMSIS,CMSIS统、一了启动和内核相关的代码,给出了一个规范的标准,然而,这远远不够,一个系统会用到CPU的各种各样的外设,而这些外设,CMSIS还没给出明确的标准,虽然,在CMSIS 1的后期版本里面做过相关工作,最后也无疾而终!
幸好CooCox 推出了一个完善的标准——CoX标准。深入了解并研究代码后发现,CoX不仅很好的实现了厂商的特性,还提出了所有的共性。下面从我体验RTC来说说CoX给我们带来的方便!
首先,我从github上面clone了整个的CoX仓库,具体方法,参考http://www.coocox.com/cox/Cox_Github.html,关于git的用法等,这个里面有帮助链接,这里就不详细去介绍了。
Clone完了之后发现有许多分支,选择了NUC1xx的分支,由于我要做个简单的万年历,于是开始研究RTC方面的代码,发现API很简单,发现就需要先做一个初始化配置并使能相关中断就可以用来读写时间了,芯唐的RTC实现了一个完整的万年历系统,可以直接从寄存器读出年月日时分秒,还有星期。甚至连是否是瑞年也会有标志位。用起来很方便!xRTC也是这么定义的,在xtTime的结构体中,包含了年月日时分秒和星期这些元素。但是,我以前用过ST芯片,发现STM32F1xx系列的RTC只有一个32位数据计数器,应该是不能和xtTime所定义的标准相兼容的,正当我有此疑惑的时候,我看到另外一个配置宏以及对应的两个API,static unsigned longxRTCConvertTimeToCounter(xtTime *xtTime) 和static void xRTCConvertCounterToTime(xtTime *xtTime, unsigned long ultimeCounter)。这两个API的用途就是实现xtTime结构体和数据计数器之间的相互转换的。有了这两个API,所有的RTC都可以统、一成一种通用的标准——即用统、一的API,用固定格式的数据结构(参数统、一)。于是,我轻松的写完了一个简单的例程,对比,CooCox在组件里面上传的例程,大同小异,不同的是,我全部用CoX接口实现。很简单的代码,如图所示:

在用CoX库写代码时,首先,第一件事情就是配置系统时钟:
xSysCtlClockSet(48000000, xSYSCTL_OSC_MAIN | xSYSCTL_XTAL_12MHZ);
这个函数有两个参数,第一个就是最终需要得到的系统时钟,第二个参数是对应的配置,如果使用,内部时钟就选xSYSCTL_OSC_INT,使用外部晶振就选xSYSCTL_OSC_MAIN,并“与”上开发板实际的晶振值。
其次,就是使能和复位外设:
xSysCtlPeripheralReset(xSYSCTL_PERIPH_RTC);
xSysCtlPeripheralEnable(xSYSCTL_PERIPH_RTC);
如果有管脚的话,就配置相关管脚:
xSPinTypeUART(UART0RX,PB0);
    xSPinTypeUART(UART0TX,PB1);
RTC一般没有相关外部管脚,这一步没有,上面的是以串口为例说明的。
再次,调用外设的初始化函数、外设使能函数、中断使能和中断回调配置等:
xRTCTimeInit();初始化RTC外设
xRTCIntCallbackInit(xRTCCallback);   初始化 回调函数
xRTCIntEnable(xRTC_INT_SECOND);在外设层使能中断
xIntEnable(INT_RTC);    在内核层使能中断
对于RTC的话,还要配置一个初始时间,这个就可以通过xRTCTimeWrite(&tTime1, xRTC_TIME_CURRENT)函数实现。至此,只用在每次发生中断是,用xRTCTimeRead(&tTime1, xRTC_TIME_CURRENT)读出当前的时间就行了!
研究完了RTC代码发现,CoX代码真的将各个厂商的差异和共性变现的一览无余。于是,RTC在应用时变得很方便快捷。从一个系列的MCU换到另外一个系列,只需修改基本配置就行了!当然RTC只是一个很简单的外设,要统、一很简单,下面我会进一步研究其他代码,一步步揭开CoX的神秘面纱!

wszyjsw2 发表于 2012-4-15 19:21:57

好东西 支持一下 辛苦了

lilolog 发表于 2012-4-15 19:41:16

马克,lz的软件很有意思

mint 发表于 2012-4-15 22:07:07

貌似是个蛮新的东西~~~
可以学习下~~~

苦行僧 发表于 2012-4-15 22:13:21

这个是干什么用的哇,没见过 啊{:lol:}

lyzhangxiang 发表于 2012-4-16 08:59:55

coocox   听说很好用

xingkong911 发表于 2012-4-16 09:11:35

支持一下,这样能更好带动新手入门,只有入了门才能有动力深入研究寄存器等细节的东西

Chocore 发表于 2012-4-22 18:11:02

CoX的开发过程在github上面可以轻松的获取,除此之外,CoOS的代码等开源项目也会陆续放到github上,方便大家查看和参与

【共享】CoOS开源项目地址
CooCox日前在他们的开源代码仓库中公开了CoOS的源码,例子,文档。
而且大家很关心的OS测试代码在这个上面也能够找到哦。
代码仓库的地址是https://github.com/coocox/CoOS

下面是给不熟悉CoOS的用户的一个简单介绍:

CoOS特征:
免费并开源
ARM Cortex M3及M0定制操作系统
高度可裁剪性,最小系统内核仅974Byte
支持优先级抢占和时间片轮转
自适应任务调度算法
中断延时时间趋近于零
堆栈溢出检测
信号量、邮箱、队列、事件标志、互斥等同步通信方式
支持多种编译器:ICCARM、ARMCC、GCC

zcx2012 发表于 2012-4-22 18:35:47

好东西 支持一下

format 发表于 2012-4-22 19:58:35

看8楼最后的介绍

很像Ucos

ww1228 发表于 2012-4-22 20:22:26

这个软件用起来是挺方便的,特喜欢里面的向导模式,帮助我们快速生成代码,有的芯片还可以图形化配置IO,以前打算自己写个代码生成器的,但自从看到这个软件就打消了念头.软件其它方面就不太清楚了

yixin1851 发表于 2012-4-22 20:55:59

支持一下

bygreencn 发表于 2012-4-22 21:06:21

支持一下

xml2028 发表于 2012-4-22 22:42:44

貌似是个蛮新的东西~~~

jjj2012 发表于 2012-4-22 23:26:54

楼上头像和一个同学很想
页: [1]
查看完整版本: 【好文分享】CoX:让你在ARM编程时得心应手