基于STC12C5A60S2单片机的数码相框设计
这个是我做的毕业设计,一个数码相框,同时加入了系统设置、万年历、演示程序等。本来想加入电子书功能,但是还没有实现。使用了FATFS文件系统和pt轻量级多任务系统,使整个系统的实时性比较好!而且pt轻量级多任务系统只占用两个字节的RAM资源,非常适合在单片机上应用。数码相框解码显示一幅128X240分辨率的图片只需4秒,以及很不错了!一开始的时候使用的是FAT32文件系统,慢的要死,使用了FATFS文件系统后,刷新一幅图片的速度整整提高了一倍!图片可以到我的相册里看,视频拍的很不清楚,等下次有清晰的再上传!有实际范例程序吗?{:lol:} "pt轻量级多任务系统只占用两个字节的RAM资源",对此很感兴趣 围观一下什么情况 lcw_swust 发表于 2012-12-26 14:02 static/image/common/back.gif
"pt轻量级多任务系统只占用两个字节的RAM资源",对此很感兴趣
pt的全称是Protothreads,
Protothreads是一种针对C语言封装后的宏函数库,为C语言模拟了一种无堆栈的轻量线程环境,能够实现模拟线程的条件阻塞、信号量操作等操作系统中特有的机制,从而使程序实现多线程操作。每个Protothreads线程仅增加10行代码和2字节RAM的额外硬件资源消耗。对于资源紧缺而不能移植嵌入式操作系统的嵌入式系统,使用Protothreads能够方便直观地设计多任务程序,能够实现用线性程序结构处理事件驱动型程序和状态机程序,简化了该类程序的设计。在爱问共享可以下载,你只要在百度输入它的全称就行了! 这个是整个工程的源程序,用keil4打开 这个是整个工程的源程序,用keil4打开!!! 不错,值得学习!!! 本帖最后由 lcw_swust 于 2012-12-27 16:34 编辑
liuyongliuyong 发表于 2012-12-27 13:15 static/image/common/back.gif
pt的全称是Protothreads,
Protothreads是一种针对C语言封装后的宏函数库,为C语言模拟了一种无堆栈的轻 ...
大概看了下代码,注意到里面“PT_WAIT_UNTIL”是这样定义的:
#define PT_WAIT_UNTIL(pt, condition) \
do { \
LC_SET((pt)->lc); \
if(!(condition)) { \
return PT_WAITING; \
} \
} while(0)
而楼主的一个任务是这样定义的:
static
PT_THREAD(MainTask(struct pt *pt))
{
PT_BEGIN(pt);
/* 设备初始化 */
Driveinit();
/* 系统定时器 */
ostime_init();
GUI_BRCLOGO();
while(1) {
PT_WAIT_UNTIL(pt, maintaskcnt == 100);
。。。
看起来,就是当条件不成立时return,所以当maintaskcnt !=100时,每调用一次MainTask(),就会执行一次Driveinit()、ostime_init()、GUI_BRCLOGO(),不知道我理解得对不对。
不过,这个东东倒是挺有意思的。
-------------------------------------------------------
再次看了一下,之前以为LC_SET是在lc.h里的那个定义,后来才知道,应该是lc_switch.h里那个定义,
也就是说,利用switch语句来实现这个功能:“在返回前保存了当前的阻塞位置,待下一次***被调用时,直接跳到阻塞位置执行,再次判断运行条件是否满足,并执行后续程序或继续阻塞。”
也就是说,我上面说的重复执行Driveinit()、ostime_init()、GUI_BRCLOGO(),的问题是不存在的。 lcw_swust 发表于 2012-12-27 16:03 static/image/common/back.gif
大概看了下代码,注意到里面“PT_WAIT_UNTIL”是这样定义的:
#define PT_WAIT_UNTIL(pt, condition) ...
呵呵,,,看来你看的挺细的,理解的很对!你说的三个任务不存在,那三个任务是在系统开机时显示的,就像我们手机开机显示的开机画面一样,那个任务主要完成的是系统初始化,初始化完成后就进入桌面,等待其他操作! lcw_swust 发表于 2012-12-27 16:03 static/image/common/back.gif
大概看了下代码,注意到里面“PT_WAIT_UNTIL”是这样定义的:
#define PT_WAIT_UNTIL(pt, condition) ...
我是在别人的基础上进行移植的,花了时间看懂了他的程序再移植到自己的开发板上的!原先的是这个牛人开发的http://www.boolesion.net/ liuyongliuyong 发表于 2012-12-27 13:15 static/image/common/back.gif
pt的全称是Protothreads,
Protothreads是一种针对C语言封装后的宏函数库,为C语言模拟了一种无堆栈的轻 ...
好像在知网见过论文 sunocean 发表于 2012-12-27 17:01 static/image/common/back.gif
好像在知网见过论文
恩,那个小东西真心不错,能玩转它在单片机上应用是个不错的选择,毕竟利用它能方面的设计出像mp4一样的界面,每个任务都像有个while(1)循环一样 liuyongliuyong 发表于 2012-12-27 17:08 static/image/common/back.gif
恩,那个小东西真心不错,能玩转它在单片机上应用是个不错的选择,毕竟利用它能方面的设计出像mp4一样的 ...
我毕业设计也要用到类似的东西,我比较懒,还没开始写,呵呵 sunocean 发表于 2012-12-27 17:10 static/image/common/back.gif
我毕业设计也要用到类似的东西,我比较懒,还没开始写,呵呵
呵呵,,,没有办法,我们学校这个学期就要完成论文和答辩,不写不行呀!学校真不知道怎么搞的,以往都是五月份回来搞,我们这个学期就搞,所以这个学期就呆学校搞设计! liuyongliuyong 发表于 2012-12-27 17:23 static/image/common/back.gif
呵呵,,,没有办法,我们学校这个学期就要完成论文和答辩,不写不行呀!学校真不知道怎么搞的,以往都是 ...
岂不是耽误找工作? 这个值得一顶 不错,支持~ sunocean 发表于 2012-12-27 17:25 static/image/common/back.gif
岂不是耽误找工作?
呵呵,,,只能答辩完找了,不过答辩完还有一个月过年,找不找也说不定了!学校就这样搞的,没有办法啊! 楼主厉害,几乎将这款单片机的资源发挥到极致。。。 sgzzour 发表于 2012-12-27 19:08 static/image/common/back.gif
楼主厉害,几乎将这款单片机的资源发挥到极致。。。
也没有用到多少,就是RAM用的多点,然后就是SPI接口,定时器。我的DS1302坏了,所以我的时间是用定时器实现的软时钟 这个只能称 poll 程序,与多工作业系统好像没有关系.以前常用 case 自己写比较清楚.
能否告知STC12C5A60S2,如何移植fatfs呢? 楼主是西门吹雪么? 51到这样很不错了,现在都是玩ARM wooz 发表于 2012-12-28 17:54 static/image/common/back.gif
51到这样很不错了,现在都是玩ARM
恩,ARM虽然好玩,但是太耗精力了。现在还玩不起,以后慢慢玩! 关注pt,不知使用时要注意些什么? mbass51 发表于 2012-12-28 10:18 static/image/common/back.gif
能否告知STC12C5A60S2,如何移植fatfs呢?
FATFS里面有两个C程序,pff.c可以不用修改,就是把SD卡的读写扇区及初始化函数移植到diskio.c里面就行了! mbass51 发表于 2012-12-28 10:18 static/image/common/back.gif
能否告知STC12C5A60S2,如何移植fatfs呢?
FATFS是完全脱离硬件,所以它跟硬件没有关系,只要RAM容量够的单片机都可以进行移植,只要提供SD卡的相关读写函数给它就可以对SD卡中的文件进行读写操作! liuyongliuyong 发表于 2012-12-27 13:18 static/image/common/back.gif
这个是整个工程的源程序,用keil4打开!!!
不错啊。
图片存放在SD咔有没有特别要求,格式化?名称?
liuyongliuyong 发表于 2013-1-1 12:03 static/image/common/back.gif
FATFS里面有两个C程序,pff.c可以不用修改,就是把SD卡的读写扇区及初始化函数移植到diskio.c里面就行了 ...
希望可以出教學,造福人 rerainings 发表于 2013-1-2 14:02 static/image/common/back.gif
天外有天啊表示膜拜
呵呵,,,我也是学习别人的哦!自己技术也不是很强!还得继续努力呀! jetli 发表于 2013-1-1 19:51 static/image/common/back.gif
不错啊。
图片存放在SD咔有没有特别要求,格式化?名称?
有,BMP图片是24位的,分辨率是128X240,要支持32位的和更大分辨率都要修改程序,还有文件名不支持中文和长文件名 edkaifa 发表于 2012-12-28 13:35 static/image/common/back.gif
楼主是西门吹雪么?
我不懂你在说什么,我只是根据我自己的理解来说的!或许用词不当,表达的不清楚,但是至少做出的东西是真的!我也承认程序不全部是我自己写的,我承认我一个人不可能写出那么好的程序。我贴图只是想让更多人的知道有这么个东西,程序可以这么写,别无他意! sky5566 发表于 2012-12-28 10:11 static/image/common/back.gif
这个只能称 poll 程序,与多工作业系统好像没有关系.以前常用 case 自己写比较清楚.
...
恩,但是有点像多任务呀,这是我自己的理解,跟我们以前写的程序不一样,所有的任务都放在主函数的while(1)大循环中处理,那个pt也是用case语句实现的,只是采用了阻断,达到条件自己退出任务! mbass51 发表于 2013-1-2 10:21 static/image/common/back.gif
希望可以出教學,造福人
呵呵,,,不敢当!互相学习!你可以下载源程序看看,移植FATFS很简单的! liuyongliuyong 发表于 2013-1-2 15:04 static/image/common/back.gif
我不懂你在说什么,我只是根据我自己的理解来说的!或许用词不当,表达的不清楚,但是至少做出的东西是真 ...
{:titter:}
人家认为 你 的头像,,,很有 西门吹雪 的风范,,,,西门吹雪 知不知道是谁?不知道???那当我没说,,,,{:titter:} 很不错的程序..顶 看得眼馋能共享源代码就好了,, {:sweat:}{:sweat:}{:sweat:} pt...听起来很强大的东西 jetli 发表于 2013-1-2 18:12 static/image/common/back.gif
人家认为 你 的头像,,,很有 西门吹雪 的风范,,,,西门吹雪 知不知道是谁?不知道?? ...
{:sweat:} 先记号一下,待后学习,谢谢哦 有时间也学习下{:smile:} 受教了 期待楼主的代码 有空了仔细看下,{:smile:}
edkaifa 发表于 2013-1-23 13:19 static/image/common/back.gif
受教了 期待楼主的代码
源程序在八楼! 顶起来呀,,,很好,,,呵呵 不错,值得学习!!! 牛X mark 慢慢看 很不错,谢谢分享!!! 谢谢 分享 楼主好厉害啊
页:
[1]