6167|7

2955

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

我也来玩玩多线程 [复制链接]

看着chenzhufly把多线程Photothreads在LPC1343上玩的有声有色,有贴为证https://bbs.eeworld.com.cn/viewthread.php?tid=103789,我也禁不住要试试。因为LPC1114同样资源紧张,呵呵 下面就一试。

同样我也参考了Photothreads的例程example-small,更多的参考了chenzhufly的photothreads的那个帖子,在帖子里chenzhufly对photothreads已经做过了介绍,这里我就不再重复了。下面是我修改的完的全部代码,附件里有我修改的工程文件。

#include "LPC11xx.h"   /* LPC11xx Peripheral Registers */
#include "gpio.h"
#include "pt.h"
/* Two flags that the two protothread functions use. */
static int protothread1_flag, protothread2_flag;
char flag = 0;
static struct pt pt1, pt2;


typedef unsigned char   uint8;                  //defined for unsigned 8-bits integer variable
typedef signed   char   int8;                   //defined for signed 8-bits integer variable
typedef unsigned int  uint16;                 //defined for unsigned 16-bits integer variable
typedef signed   int  int16;                  //defined for signed 16-bits integer variable
typedef unsigned long   uint32;                 //defined for unsigned 32-bits integer variable
typedef signed   long   int32;                  //defined for signed 32-bits integer variable
typedef float           fp32;                   //single precision floating point variable (32bits)
typedef double          fp64;                   //double precision floating point variable (64bits)

 

void Delay(uint16 dly);
void DelayMs(uint16 dly);
static int protothread1(struct pt *pt);
static int protothread2(struct pt *pt);
/*****************************************************************************
**   Main Function  main()
******************************************************************************/
int main (void)
{
  /* Basic chip initialization is taken care of in SystemInit() called
   * from the startup code. SystemInit() and chip settings are defined
   * in the CMSIS system_<part family>.c file.
   */
  GPIOInit();
  /* use port0_7 as output event*/
  GPIOSetDir( PORT0, 7, 1 );
  /* Initialize the protothread state variables with PT_INIT(). */
    PT_INIT(&pt1);
    PT_INIT(&pt2);

  while( 1 )
  {
   protothread1(&pt1);
   protothread2(&pt2);
   };
}
/*
*************************************************************************************************************
** Function name   : Delay
** Descriptions    : Delay
** Global variables:
** Input parameters:
** Returned value  :
** Calling modules :
** Example     :
** Created by      : LiXiaohai
** Created date    : 2010-04-29
**-----------------------------------------------------------------------------------------------------------
** Modified by     :
** Modified date   :
**-----------------------------------------------------------------------------------------------------------
*************************************************************************************************************
*/
void DelayMs(uint16 dly)
{
 while(dly--)
 {
  Delay(2678);
 }
}
/*
*************************************************************************************************************
** Function name   : void Delay(uint16 dly)
** Descriptions    : Delay
** Global variables:
** Input parameters:
** Returned value  :
** Calling modules :
** Example     :
** Created by      : LiXiaohai
** Created date    : 2010-04-29
**-----------------------------------------------------------------------------------------------------------
** Modified by     :
** Modified date   :
**-----------------------------------------------------------------------------------------------------------
*************************************************************************************************************
*/
void Delay(uint16 dly)
{
 while(dly--);
}
static int
protothread1(struct pt *pt)
{
  /* A protothread function must begin with PT_BEGIN() which takes a
     pointer to a struct pt. */
  PT_BEGIN(pt);

  /* We loop forever here. */
  while(1) {
    /* Wait until the other protothread has set its flag. */
    PT_WAIT_UNTIL(pt, protothread2_flag != 0);
    flag = ~flag;
    GPIOSetValue(PORT0,7,flag);

    /* We then reset the other protothread's flag, and set our own
       flag so that the other protothread can run. */
    protothread2_flag = 0;
    protothread1_flag = 1;

    /* And we loop. */
  }
  /* All protothread functions must end with PT_END() which takes a
       pointer to a struct pt. */
    PT_END(pt);
}
/**
 * The second protothread function. This is almost the same as the
 * first one.
 */
static int
protothread2(struct pt *pt)
{
  PT_BEGIN(pt);

  while(1) {
    /* Let the other protothread run. */
    protothread2_flag = 1;

    /* Wait until the other protothread has set its flag. */
    PT_WAIT_UNTIL(pt, protothread1_flag != 0);
    DelayMs(500);

    /* We then reset the other protothread's flag. */
    protothread1_flag = 0;

    /* And we loop. */
  }
  PT_END(pt);
}

gpio_photothreads.rar (69.81 KB, 下载次数: 45)

[ 本帖最后由 lixiaohai8211 于 2010-5-16 22:03 编辑 ]
此帖出自NXP MCU论坛

最新回复

对于LPC1114之类的小东西,本身Flash空间就小。我个人觉得,还是裸跑更加节省。用几个中断,流程弄清楚。相信也会比跑“线程”跟稳定。  详情 回复 发表于 2010-6-8 10:37
点赞 关注(1)
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 

回复
举报

2万

帖子

74

TA的资源

管理员

沙发
 
此帖出自NXP MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

小提示:以前不知道怎么导入不压缩的工程文件,今天我又研究了一下,居然还真让我发现了,呵呵。下面就说说方法。

点击如上图中的红圈表示的Import existing projects,会弹出如下的对话框

点击红圈表示后面的Browse按钮找到对应的工程文件夹即可,如下图示

[ 本帖最后由 lixiaohai8211 于 2010-5-16 22:02 编辑 ]
此帖出自NXP MCU论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

5979

帖子

8

TA的资源

版主

4
 
  不错~~~
此帖出自NXP MCU论坛
 
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

5
 

回复 4楼 chenzhufly 的帖子

呵呵 都是跟你学习的..
此帖出自NXP MCU论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

107

帖子

0

TA的资源

一粒金砂(高级)

6
 

多谢!!研习下

很好的东西, 有时间演习下 , 学习
此帖出自NXP MCU论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(中级)

7
 

东西很好,但是不使用

对于LPC1114之类的小东西,本身Flash空间就小。我个人觉得,还是裸跑更加节省。用几个中断,流程弄清楚。相信也会比跑“线程”跟稳定。
此帖出自NXP MCU论坛
 
个人签名www.weboch.com.cn
NXP MCU RFID Logic automotive  IC & solution
 
 

回复

92

帖子

0

TA的资源

一粒金砂(中级)

8
 

东西很好,但是不使用

对于LPC1114之类的小东西,本身Flash空间就小。我个人觉得,还是裸跑更加节省。用几个中断,流程弄清楚。相信也会比跑“线程”跟稳定。
此帖出自NXP MCU论坛
 
个人签名www.weboch.com.cn
NXP MCU RFID Logic automotive  IC & solution
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表