liuyongliuyong 发表于 2012-12-26 13:07:17

基于STC12C5A60S2单片机的数码相框设计

这个是我做的毕业设计,一个数码相框,同时加入了系统设置、万年历、演示程序等。本来想加入电子书功能,但是还没有实现。使用了FATFS文件系统和pt轻量级多任务系统,使整个系统的实时性比较好!而且pt轻量级多任务系统只占用两个字节的RAM资源,非常适合在单片机上应用。数码相框解码显示一幅128X240分辨率的图片只需4秒,以及很不错了!一开始的时候使用的是FAT32文件系统,慢的要死,使用了FATFS文件系统后,刷新一幅图片的速度整整提高了一倍!图片可以到我的相册里看,视频拍的很不清楚,等下次有清晰的再上传!

sky5566 发表于 2012-12-26 13:24:40

有实际范例程序吗?{:lol:}

lcw_swust 发表于 2012-12-26 14:02:38

"pt轻量级多任务系统只占用两个字节的RAM资源",对此很感兴趣

bbsview 发表于 2012-12-26 14:11:52

围观一下什么情况

liuyongliuyong 发表于 2012-12-27 13:15:55

lcw_swust 发表于 2012-12-26 14:02 static/image/common/back.gif
"pt轻量级多任务系统只占用两个字节的RAM资源",对此很感兴趣

pt的全称是Protothreads,

Protothreads是一种针对C语言封装后的宏函数库,为C语言模拟了一种无堆栈的轻量线程环境,能够实现模拟线程的条件阻塞、信号量操作等操作系统中特有的机制,从而使程序实现多线程操作。每个Protothreads线程仅增加10行代码和2字节RAM的额外硬件资源消耗。对于资源紧缺而不能移植嵌入式操作系统的嵌入式系统,使用Protothreads能够方便直观地设计多任务程序,能够实现用线性程序结构处理事件驱动型程序和状态机程序,简化了该类程序的设计。在爱问共享可以下载,你只要在百度输入它的全称就行了!

liuyongliuyong 发表于 2012-12-27 13:17:51

这个是整个工程的源程序,用keil4打开

liuyongliuyong 发表于 2012-12-27 13:18:25

这个是整个工程的源程序,用keil4打开!!!

luohui5003 发表于 2012-12-27 14:50:51

不错,值得学习!!!

lcw_swust 发表于 2012-12-27 16:03:29

本帖最后由 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(),的问题是不存在的。

liuyongliuyong 发表于 2012-12-27 16:56:31

lcw_swust 发表于 2012-12-27 16:03 static/image/common/back.gif
大概看了下代码,注意到里面“PT_WAIT_UNTIL”是这样定义的:
#define PT_WAIT_UNTIL(pt, condition)          ...

呵呵,,,看来你看的挺细的,理解的很对!你说的三个任务不存在,那三个任务是在系统开机时显示的,就像我们手机开机显示的开机画面一样,那个任务主要完成的是系统初始化,初始化完成后就进入桌面,等待其他操作!

liuyongliuyong 发表于 2012-12-27 17:00:37

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/

sunocean 发表于 2012-12-27 17:01:34

liuyongliuyong 发表于 2012-12-27 13:15 static/image/common/back.gif
pt的全称是Protothreads,

Protothreads是一种针对C语言封装后的宏函数库,为C语言模拟了一种无堆栈的轻 ...

好像在知网见过论文

liuyongliuyong 发表于 2012-12-27 17:08:45

sunocean 发表于 2012-12-27 17:01 static/image/common/back.gif
好像在知网见过论文

恩,那个小东西真心不错,能玩转它在单片机上应用是个不错的选择,毕竟利用它能方面的设计出像mp4一样的界面,每个任务都像有个while(1)循环一样

sunocean 发表于 2012-12-27 17:10:28

liuyongliuyong 发表于 2012-12-27 17:08 static/image/common/back.gif
恩,那个小东西真心不错,能玩转它在单片机上应用是个不错的选择,毕竟利用它能方面的设计出像mp4一样的 ...

我毕业设计也要用到类似的东西,我比较懒,还没开始写,呵呵

liuyongliuyong 发表于 2012-12-27 17:23:42

sunocean 发表于 2012-12-27 17:10 static/image/common/back.gif
我毕业设计也要用到类似的东西,我比较懒,还没开始写,呵呵

呵呵,,,没有办法,我们学校这个学期就要完成论文和答辩,不写不行呀!学校真不知道怎么搞的,以往都是五月份回来搞,我们这个学期就搞,所以这个学期就呆学校搞设计!

sunocean 发表于 2012-12-27 17:25:07

liuyongliuyong 发表于 2012-12-27 17:23 static/image/common/back.gif
呵呵,,,没有办法,我们学校这个学期就要完成论文和答辩,不写不行呀!学校真不知道怎么搞的,以往都是 ...

岂不是耽误找工作?

yklstudent 发表于 2012-12-27 17:33:15

这个值得一顶

Jimmyxu 发表于 2012-12-27 18:01:27

不错,支持~

liuyongliuyong 发表于 2012-12-27 18:47:28

sunocean 发表于 2012-12-27 17:25 static/image/common/back.gif
岂不是耽误找工作?

呵呵,,,只能答辩完找了,不过答辩完还有一个月过年,找不找也说不定了!学校就这样搞的,没有办法啊!

sgzzour 发表于 2012-12-27 19:08:59

楼主厉害,几乎将这款单片机的资源发挥到极致。。。

liuyongliuyong 发表于 2012-12-28 10:08:53

sgzzour 发表于 2012-12-27 19:08 static/image/common/back.gif
楼主厉害,几乎将这款单片机的资源发挥到极致。。。

也没有用到多少,就是RAM用的多点,然后就是SPI接口,定时器。我的DS1302坏了,所以我的时间是用定时器实现的软时钟

sky5566 发表于 2012-12-28 10:11:53

这个只能称 poll 程序,与多工作业系统好像没有关系.以前常用 case 自己写比较清楚.

mbass51 发表于 2012-12-28 10:18:29

能否告知STC12C5A60S2,如何移植fatfs呢?

edkaifa 发表于 2012-12-28 13:35:07

楼主是西门吹雪么?

wooz 发表于 2012-12-28 17:54:43

51到这样很不错了,现在都是玩ARM

liuyongliuyong 发表于 2012-12-28 17:57:45

wooz 发表于 2012-12-28 17:54 static/image/common/back.gif
51到这样很不错了,现在都是玩ARM

恩,ARM虽然好玩,但是太耗精力了。现在还玩不起,以后慢慢玩!

wangyj173 发表于 2012-12-30 19:55:02

关注pt,不知使用时要注意些什么?

liuyongliuyong 发表于 2013-1-1 12:03:22

mbass51 发表于 2012-12-28 10:18 static/image/common/back.gif
能否告知STC12C5A60S2,如何移植fatfs呢?

FATFS里面有两个C程序,pff.c可以不用修改,就是把SD卡的读写扇区及初始化函数移植到diskio.c里面就行了!

liuyongliuyong 发表于 2013-1-1 12:04:52

mbass51 发表于 2012-12-28 10:18 static/image/common/back.gif
能否告知STC12C5A60S2,如何移植fatfs呢?

FATFS是完全脱离硬件,所以它跟硬件没有关系,只要RAM容量够的单片机都可以进行移植,只要提供SD卡的相关读写函数给它就可以对SD卡中的文件进行读写操作!

jetli 发表于 2013-1-1 19:51:53

liuyongliuyong 发表于 2012-12-27 13:18 static/image/common/back.gif
这个是整个工程的源程序,用keil4打开!!!

不错啊。

图片存放在SD咔有没有特别要求,格式化?名称?

mbass51 发表于 2013-1-2 10:21:45

liuyongliuyong 发表于 2013-1-1 12:03 static/image/common/back.gif
FATFS里面有两个C程序,pff.c可以不用修改,就是把SD卡的读写扇区及初始化函数移植到diskio.c里面就行了 ...

希望可以出教學,造福人

ws1057 发表于 2013-1-2 10:44:27

liuyongliuyong 发表于 2013-1-2 14:58:35

rerainings 发表于 2013-1-2 14:02 static/image/common/back.gif
天外有天啊表示膜拜

呵呵,,,我也是学习别人的哦!自己技术也不是很强!还得继续努力呀!

liuyongliuyong 发表于 2013-1-2 15:01:04

jetli 发表于 2013-1-1 19:51 static/image/common/back.gif
不错啊。

图片存放在SD咔有没有特别要求,格式化?名称?

有,BMP图片是24位的,分辨率是128X240,要支持32位的和更大分辨率都要修改程序,还有文件名不支持中文和长文件名

liuyongliuyong 发表于 2013-1-2 15:04:27

edkaifa 发表于 2012-12-28 13:35 static/image/common/back.gif
楼主是西门吹雪么?

我不懂你在说什么,我只是根据我自己的理解来说的!或许用词不当,表达的不清楚,但是至少做出的东西是真的!我也承认程序不全部是我自己写的,我承认我一个人不可能写出那么好的程序。我贴图只是想让更多人的知道有这么个东西,程序可以这么写,别无他意!

liuyongliuyong 发表于 2013-1-2 15:06:37

sky5566 发表于 2012-12-28 10:11 static/image/common/back.gif
这个只能称 poll 程序,与多工作业系统好像没有关系.以前常用 case 自己写比较清楚.
...

恩,但是有点像多任务呀,这是我自己的理解,跟我们以前写的程序不一样,所有的任务都放在主函数的while(1)大循环中处理,那个pt也是用case语句实现的,只是采用了阻断,达到条件自己退出任务!

liuyongliuyong 发表于 2013-1-2 15:07:54

mbass51 发表于 2013-1-2 10:21 static/image/common/back.gif
希望可以出教學,造福人

呵呵,,,不敢当!互相学习!你可以下载源程序看看,移植FATFS很简单的!

jetli 发表于 2013-1-2 18:12:51

liuyongliuyong 发表于 2013-1-2 15:04 static/image/common/back.gif
我不懂你在说什么,我只是根据我自己的理解来说的!或许用词不当,表达的不清楚,但是至少做出的东西是真 ...

{:titter:}

人家认为 你 的头像,,,很有 西门吹雪 的风范,,,,西门吹雪 知不知道是谁?不知道???那当我没说,,,,{:titter:}

wanglituan 发表于 2013-1-2 22:01:13

很不错的程序..顶

vc8fans 发表于 2013-1-3 09:14:38

看得眼馋能共享源代码就好了,,

追枫少年 发表于 2013-1-3 09:24:02

{:sweat:}{:sweat:}{:sweat:}

CodeMonkey 发表于 2013-1-3 10:46:51

pt...听起来很强大的东西

liuyongliuyong 发表于 2013-1-6 16:40:25

jetli 发表于 2013-1-2 18:12 static/image/common/back.gif
人家认为 你 的头像,,,很有 西门吹雪 的风范,,,,西门吹雪 知不知道是谁?不知道?? ...

{:sweat:}

wgm_123 发表于 2013-1-7 10:30:35

先记号一下,待后学习,谢谢哦

fengyuxiaoxiao 发表于 2013-1-8 17:03:47

有时间也学习下{:smile:}

edkaifa 发表于 2013-1-23 13:19:09

受教了 期待楼主的代码

Syth 发表于 2013-1-23 23:32:25

有空了仔细看下,{:smile:}

liuyongliuyong 发表于 2013-2-17 12:06:36

edkaifa 发表于 2013-1-23 13:19 static/image/common/back.gif
受教了 期待楼主的代码

源程序在八楼!

yangjing29 发表于 2013-8-20 11:11:19

顶起来呀,,,很好,,,呵呵

toptrying 发表于 2013-8-20 11:57:03

不错,值得学习!!!

383067944 发表于 2013-8-23 11:04:33

牛X               

zlo007 发表于 2013-9-26 15:28:15

mark 慢慢看

YF_Wang 发表于 2013-11-13 21:09:19

很不错,谢谢分享!!!

sunplus 发表于 2014-1-13 10:30:56

谢谢 分享

七匹洋 发表于 2014-1-15 16:22:23

楼主好厉害啊
页: [1]
查看完整版本: 基于STC12C5A60S2单片机的数码相框设计