这几天在折腾uloong的板子,计划在外设驱动库的基础上,用μTenux进行项目的实现。
想在μTenux的基础上加载Sam3s官方的驱动库,没成功,编译老是出问题,头大。
看来对编译环境和C语言的理解有待提高啊。
请坛子里大神们开贴科普一下呀。
休息放松一下,去爱特梅尔官网上转转,发现有DEMO程序,下来玩玩。
顺道贴一下Jlink-Flash的基本用法吧。
先上官方DEMO的源码和bin文件。
——回复可见内容——
1/ Using the USB connection, burn the file demo.bin with SAM-BA at the
LZ的SAM-BA软件发现不了这块EK,改用Jlink-Flash软件。
打开Jlink-Flash
File-New Project新建下载工程
Option-Project settings-CPU按下图顺序设置目标芯片:
File-Open data file,选择压缩包里头的 sam3s_demo_1.4.bin文件。
这个时候会弹出一个对话框,填上起始地址400000:
按下F6烧写bin文件,ok后,掉电重启,电脑会发现一个122MB、FAT32格式的可移动磁盘,貌似是由板载NAND Flash+Sam3S4C构成的。
将源代码文件中sam3s-ek_demo_1.4\demo\resources\disk目录下demo文件夹全部拷到这个移动硬盘中。
掉电重启,DEMO程序就可以正常运行了。
如果不拷贝这个demo文件夹,DEMO程序就会没有图标哟。
上视频:
在DEMO运行过程中,很悲催的发现,QTouch板的K2键(向左键)是无法正常工作的,不知是不是硬件问题。
前段时间有筒子在坛子里反应说这块液晶屏画圆有问题。
ATMEL官方DEMO里面有测试画圆的例子,还是挺圆的。
beginning of SAM3S flash (address 0x400000). Set the GPNVM "Boot from
Flash".
2/ Power OFF and ON the board with the USB cable always connected.
3/ A new Removable Disk should appear in the computer explorer.
4/ Copy the demo folder in the root directory of this removable disk : a
demo folder should appear in it.
5/ When the copy operation is achieved, disconnect the USB cable, and
Power OFF and ON the board.
6/ The first screen of the demo ask for Touch Screen calibration, please
do this step carefully and then the demo is fully operational.
大致意思是用SAM-BA软件烧写bin文件,烧写结束会发现一个可移动磁盘,然后将源代码文件夹下面的demo文件夹拷到这个可移动磁盘根目录下,掉电重启,即可运行DEMO。
Target-connect就能正常连接上目标芯片
视频地址:http://player.youku.com/player.php/sid/XNTg4MjQ5NTY0/v.swf
这几天一直在折腾 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的驱动。。。。。
上午起了个早床,看在线讲座。不错。
中午闲着没事,在μ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的器件,硬件越简单,资源消耗就越严重。
今晚打老虎......
今天完成了主要传感器的二叉树算法驱动,不过发现了一些问题。
μ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了,接下来就是各个模块间的联合调试。
鄙人很少能够很深入去了解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相当带劲。
要是有,我第一个报名做试验品.
内核规范手册已经对系统相关函数作了很详实的解释,但是内核的一些静态变量,还是比较难找到准确的含义。
想想,如果把这些东西都解释一遍,那内核规范得要多少页啊......
以上个人看法,如有雷同,不胜荣幸,如有异议,欢迎拍砖。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |