这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【8.05更新μTenux工程下1-wire总线器件二叉树算法驱动有视频+μTe

共40条 4/4 |‹ 1 2 3 4 跳转至
高工
2013-07-30 01:30:18     打赏
31楼

这几天一直在折腾 Atmel 驱动库的加载,没搞定。据说是ATMEL驱动库和MDK编译宏之间的不和谐。

STM32F4又被人连哄带骗掠夺走了。突然想起手头上还有块Stellaris-LaunchPad,LM4F的U。

跑去TI找了一堆驱动库,打开μTenux工程,加载。

哟呵,还真跑起来了。

在μTenux工程里面小修改了一下,RGB轮闪10次,进入μTenux系统。

虽然没在任务里面点灯,但无论如何,μTenux能够调用驱动库,离用任务点灯也不远了。

先视频伺候(爪机党,只能看个大概,勿拍),睡一觉起来再整理这楼【done】。


视频地址:http://player.youku.com/player.php/sid/XNTg5MTg4MDAw/v.swf



用Stellaris-LaunchPad在μTenux下点灯


建立3个任务A、B、C,每个任务分别使红色LED、蓝色LED、绿色LED闪烁4次,优先级A>B>C。

A、B完成闪烁后进入sleep状态,C完成闪烁后唤醒A和B。

每次闪烁,串口打印相关信息。



视频伺候(这回是真点着了):


视频地址:http://player.youku.com/player.php/sid/XNTg5NTI4NjYw/v.swf


今晚好好再折腾一下sam3的驱动。。。。。


高工
2013-07-30 15:48:25     打赏
32楼

山寨是科技进步的源动力之一。

我是个希望科技不断进步的好同志,你懂的.


高工
2013-07-31 15:49:43     打赏
33楼

上午起了个早床,看在线讲座。不错。

中午闲着没事,在μTenux工程下写了个nokia_5110的驱动,LM4F平台的。

实际上是从51单片机源代码移植过来的。重点移植了图片点阵的函数。

写字符的函数没有仔细关注。

在此共享,有需要的筒子回复一把哈.

——回复可见内容——

仅仅能用而已,代码风格就不要吐槽了,我只是移植。



在μTenux工程下,建立A、B、C三个任务,优先级A>B>C。


A驱动5110显示LZ的头像并点亮蓝色LED;B驱动5110显示EEPW的LOGO并点亮绿色LED;C是个职业唤醒任务,专门用来唤醒A和B,并点亮红色LED。每个任务都打印自己的作用。


实现的过程中遇到了些小麻烦,由于5110本身不带字库,所以需要占用大量内存空间和任务堆栈空间保存字符点阵数据。默认512大小不行了,我一狠心,直接上到2048.


图片伺候:

任务A,显示snake0301的头像并点亮蓝色LED,猛戳图片可看高清无码图。

任务B,显示EEPW的logo并点亮绿色LED,猛戳图片可看高清无码图。

任务C,只用于唤醒A和B并点亮红色LED,猛戳图片可看高清无码图。

串口打印信息:



还不过瘾,视频伺候,哇咔咔


视频地址:http://player.youku.com/player.php/sid/XNTg5ODMzNTI0/v.swf

这里有个问题十分不解,裸奔的时候5110显示的图案都是正常的,一加到μTenux的任务里面就反色了。

疑惑。

明天开始正式折腾传感器的驱动了。

准备用1-wire的器件,硬件越简单,资源消耗就越严重。

今晚打老虎......


高工
2013-08-05 02:23:54     打赏
34楼

今天完成了主要传感器的二叉树算法驱动,不过发现了一些问题。

μTenux中ltostr()函数貌似有bug,我16位传感器的sn,只能打印出13位。

debug发现变量获取的sn都是正常的,ltostr函数会丢弃一个0.

比如0x03,转换后调用putstring()只能打印出一个3,0x00转换后调用putstring()只能打印一个0.

1-wire总线时序要求比较严格,顺道写了个delay函数,还算比较精确。

上算法驱动和延时函数,老规矩,回复下载。

——回复可见内容——


创建2个任务A和B,优先级相同,采用端口集合点的形式进行任务调度。


A完成传感器的相关操作,B负责打印输出。B调用集合点端口,A回应集合点端口,如此往复。

为了显示效果,把十年前的51板也翻出来了,让上面的18b20最后发挥一下余热。

上图(猛戳可看高清无码图):

LM4F的EK和外围一个小电路。

外围小电路,上拉电阻忘记焊了,果断加上504可调电阻。

这个上拉电阻整整调试了我半天时间,初始化一直不成功。

后来才发现,LM4F的IO口内部没有设置上拉,也可能是我的GPIO配置不对。

反正加了这个上拉电阻,世界清静了。


上保存的串口打印信息:

----------------------------------------------------
        micro Tenux Version 1.6.00(build 0180)      
            Supported MCU is TI LM4F232H5QD         
  Copyright(c) 2008-2013 by Dalian uLoong Co.,Ltd.  
----------------------------------------------------


uT will init the GPIOs;
Rendevons port sample create step 1-Create Rendevons port, ID is 1 !
Rendevons port sample create step 2-Create Task A, ID is 2 !
Rendevons port sample create step 3-Create Task B, ID is 3 !
Rendevons port sample create step 4-Start Task B;


Task B will start task A;
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 0;
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 0;
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.8度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 1;
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 0;
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 2;
传感器 SN 为 ;2854EDC530086------当前温度为:85.0度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.1度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 2;
传感器 SN 为 ;2854EDC530086------当前温度为:34.3度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 2;
传感器 SN 为 ;2854EDC530086------当前温度为:34.0度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 2;
传感器 SN 为 ;2854EDC530086------当前温度为:33.8度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 2;
传感器 SN 为 ;2854EDC530086------当前温度为:33.7度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 2;
传感器 SN 为 ;2854EDC530086------当前温度为:33.6度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 3;
传感器 SN 为 ;2854EDC530086------当前温度为:33.5度
传感器 SN 为 ;2885D5C5300CF------当前温度为:85.0度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 3;
传感器 SN 为 ;2854EDC530086------当前温度为:33.4度
传感器 SN 为 ;2885D5C5300CF------当前温度为:34.5度
传感器 SN 为 ;28B7A42C2009D------当前温度为:37.0度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 3;
传感器 SN 为 ;2854EDC530086------当前温度为:33.3度
传感器 SN 为 ;2885D5C5300CF------当前温度为:34.2度
传感器 SN 为 ;28B7A42C2009D------当前温度为:36.9度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ...... 
Task A will Rpl rendevons port ...... 
Task B will print the parameter buy Sensors......
 传感器数量为 3;
传感器 SN 为 ;2854EDC530086------当前温度为:33.1度
传感器 SN 为 ;2885D5C5300CF------当前温度为:34.0度
传感器 SN 为 ;28B7A42C2009D------当前温度为:36.9度
Task B will Cal rendevons port......
 Task A is now accept rendevons port 
Task A is now  Operating the Sensors ......


视频伺候:


视频地址:http://player.youku.com/player.php/sid/XNTkxNzQ0ODAw/v.swf


到此,基本外围器件的驱动就ok了,接下来就是各个模块间的联合调试。



高工
2013-08-05 23:27:29     打赏
35楼

鄙人很少能够很深入去了解RTOS,内核之类的云云更是两眼一抹黑。

可以毫不夸张的说,我把第一次献给了μTenux.

凭借着一点点的c语言基础和热情,我开始了μTenux之旅。

接触μTenux也有一段时间了,下面从应用的角度,扒一扒一个菜鸟的看法,欢迎各路大神各种拍砖。

让板砖飞舞得更加猛烈些吧。


编程语言。c语言是必须的,特别是指针和结构体。打开μTenux工程,就能发现大量的这些玩意儿。

几乎和任务相关的所有参数都是使用的结构体类型,参数的传递也基本上都是基于指针的运算。

我不禁想起大学c语言老湿的一句话:学习c,不会用指针,你就相当于没学c。

想想,学java的童鞋多幸福啊。


开发板。必备一块,μTenux支持的芯片很多,我手头上除了sam3s4c外,还有LM4F和STM32F407都能够正常运行μTenux。

学习μTenux之前,恶补了一下μCOSII的内容,发现任哲的那本《嵌入式实时操作系统μC/OS-II原理及应用》一书中,把μCOSII在DOS下进行了移植(可能是移植到x86架构的CPU吧),直接在windows操作系统下用Borland C就能够运行μCOSII,对于手头上没有EK的童鞋可是一大福音。


第一次接触μTenux的时候,觉得这货真恐怖,包含的文件多得让人咋舌。

后来仔细看了一下,发现悠龙真的很用心在做这个系统。

工程文件虽然是很多,但是包含了近20种MCU芯片的在三大编译平台(MDK、IAR、Eclipse,μT-studio应该属于Eclipse范畴吧)下的工程文件。

后来出的v1.6又为各个MCU建立了独立的工程文件,眼睛一下轻松了很多。


起初研究μTenux觉得代码好臃肿,太罗嗦。其实学习到后来,发现这真是个很好的习惯。啰嗦的直接好相处就是代码的可读性很强。

想想也是,看看VHDL和verilog,为什么在严谨、复杂的项目环境中,还是建议采用VHDL,一样的道理。

从个人的角度来看,可以预计,μTenux其实可以应用到一些要求比较高的项目环境中。


慢慢进入系统的实验环节,悠龙的实验也是做得很傻瓜,代码结构清晰明了,就连我这种菜鸟都能很轻松的读懂,基本上只要你认识汉字,就能够根据教程完成实验。

不要觉得简单,有些实验的思考题,还是要静下心来好好思考并尝试一番才能得到答案。


关于学习的方法。μTenux是个很庞大的c语言程序,各种函数,各种参数,想学完了再去应用μTenux是不现实的。个人的办法是,在使用μTenux的时候,同时打开内核规范,一边用一边翻查内核规范。还要注意预编译的情况,不要把预编译的代码误读成正常运行的代码,这点也是偶有切肤之痛的地方。还有c语言的基本功,不懂的地方,还是得多请教大神。



和其他操作系统的差异。据文件记载,μTenux暂不支持虚拟内存的管理,只能管理物理内存。

换句话说MMU是不被支持的。MMU是个双刃剑,Linux支持它,能够很大程度上提高系统的可靠性和安全性,可以运行很大的app;但MMU的存在,使得应用程序的运行时间变得不可控,这可是RTOS的致命缺陷啊。

据说μTenux今后的中间件会支持MMU哟。

μCOSII中,有一个信号量集的东东。

意思是说,某个任务的状态可能由多个信号量才能确定,这多个信号量就组成一个信号量集,完成对某个任务的控制。

而μTenux没有信号量集的概念,不过它的事件标志和μCOSII的信号量集似乎有些相似,估计可以看做等效吧。

μCOSII邮箱好像每次只能容纳1条信息,而μTenux能够收取多条信息,μCOSIII里面直接就取消了邮箱。

貌似和内核实现的机制有关,内核还不是偶研究的对象.虽然有些了解,就不拿出来贻笑大方了。

关于FPU。浮点运算单元是现在很多MCU都具备的东东,目前μTenux还没有支持FPU吧。


一点想法。能推出Proteus仿真不?这话抛出来估计要被大神们鄙视现在Proteus8.0已经包含TI的LM3S的MCU了,我也见过不少在Proteus中仿真μCOS的例程,各种基础实验、μCGUI,有板有眼,做得的确不错。

同时也发现,好多大学的童鞋买不起板,就在Proteus下玩μCOS相当带劲。

要是有,我第一个报名做试验品.

内核规范手册已经对系统相关函数作了很详实的解释,但是内核的一些静态变量,还是比较难找到准确的含义。

想想,如果把这些东西都解释一遍,那内核规范得要多少页啊......


以上个人看法,如有雷同,不胜荣幸,如有异议,欢迎拍砖。




高工
2013-08-05 23:58:37     打赏
36楼
欢迎堂主围观啊,拍砖哈。

高工
2013-08-07 21:40:16     打赏
37楼
占楼留坑

高工
2013-08-07 22:21:52     打赏
38楼

其实整个项目还没有结束,只是完成了驱动库未包含的器件驱动。

剩下还有BQ32000D和EEPROM器件的驱动,都是I2C的接口,基本都有API可以直接调用。

但是上位机软件的调试还需要一段时间,所以项目整体的移植,可能还会需要一段时间。

听闻活动进入尾声,为了使进程看起来圆满,决定在真正结束之前做一个小结。

无论怎样,项目最终的移植情况,会在合适的时候,发布出来。


感谢悠龙、感谢EEPW,感谢CCAV、MTV,感谢TV,使我有机会接触μTenux。

没接触过很多操作系统,了解也不够深入,但是,从我个人角度来看,操作系统是趋势。

悠龙很诚意地组织了此次的活动,拿到开发板的那一天,我和我的小伙伴都惊呆了。

尼玛,6层板,MCU是艾特梅尔。

虽然只是M3,但是ATEML的工业级水准,这个是业界公认的。

第一感觉,这板够分量。

学习和移植进行中,由于ATMEL官方的驱动库总是无法正常加载。

添加过多驱动头文件的话,编译速度实在是令人捉急。

后来选择在Stellaris-LaunchPad的LM4F芯片下运行μTenux,基本上完成了项目所需的前期工作。

整个活动期间,得到了悠龙软件大神们(王总、阿奔、泽龙、etc......)的鼎力支持,

通过这次活动,比较深入的了解了以μTenux为代表的RTOS基本概念和应用方法。

但是内核方面,认识相当有限,不过相信随着应用次数的增多,会逐渐形成一定的概念。

目前μTenux还未见有中间件发布,据说近期会陆续有相关中间件发出。

这又是一次学习的机会,会持续关注μTenux。

虽然LZ的进程在大神面前显得很弱智,但是也是用心完成的,希望能给学习μTenux的童鞋一点帮助。

这是一次活动的结束,也是新学习之旅的起点。


最后,再次感谢悠龙和EEPW能够提供这次学习的机会。

非常感谢。



高工
2013-08-07 22:32:09     打赏
39楼
感谢阿奔兄弟的支持啊。

高工
2013-08-07 22:32:39     打赏
40楼
军爷,同感。

共40条 4/4 |‹ 1 2 3 4 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]