环境:
主机:WIN8
开发环境:MDK4.72
ucgui版本:3.90
ucos版本:ucos-ii
mcu: stm32f103VE
说明:
本示例中task1时间片为1s,task2时间片为8s。task1每秒往消息队列写入1个数据,task2全部读取出来。所以task2每次能读到8个数据。
注意:
1.消息队列需要一个指针数组指向消息
2.应该有一个固定的消息数组存储消息,不应将局部变量填入发送消息函数
3.QSQPost为先进先出函数(FIFO),QSQPostFornt为后进先出函数(LIFO)
效果图:
源码:
#define TASK_STK_SIZE 512
/*********************************************************************
* 静态函数
**********************************************************************/
static void task_start(void *pdata);
static void task1(void *pdata);
static void task2(void *pdata);
/*********************************************************************
* 静态变量
**********************************************************************/
/*********************************************************************
* 任务堆栈空间
**********************************************************************/
static OS_STK Task_Start_Stk[TASK_STK_SIZE];
static OS_STK Task1_Stk[TASK_STK_SIZE];
static OS_STK Task2_Stk[TASK_STK_SIZE];
/*********************************************************************
* 信号量
**********************************************************************/
OS_EVENT *Semaphore;
/*********************************************************************
* 消息队列数组
**********************************************************************/
void *Msg_Group[10];
char Msg_Arr[10][30];
uint8_t Index_Msg_Arr = 0;
/*********************************************************************
* 函数
**********************************************************************/
int main(void)
{
//初始化内核
OSInit();
//创建任务
OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,10);
//启动任务
OSStart();
}
/*********************************************************************
* 任务函数
**********************************************************************/
static void task_start(void *pdata)
{
//载入世界
world_load();
//设置背景色
GUI_SetBkColor(0xb07c17);
GUI_Clear();
GUI_SetColor(GUI_BLACK);
Semaphore = OSQCreate(Msg_Group,10);
//新建任务
OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,11);
OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,12);
while(1)
{
OSTimeDlyHMSM(0,0,3,0);
}
}
static void task1(void *pdata)
{
char str[30] = {0};
uint8_t err = 0;
char *mail;
uint8_t i = 0;
OS_Q_DATA query;
while(1)
{
//打印接收的消息
OSQQuery(Semaphore,&query);
for (i = 0;i < query.OSNMsgs;i++)
{
//请求信号量
mail = OSQPend(Semaphore,0,&err);
//显示
sprintf(str,"task1 receive:%s",mail);
GUI_DispStringHCenterAt(str, 120, 40 + i * 20);
}
//显示
sprintf(str,"task1 time:%ds",OSTimeGet());
GUI_DispStringHCenterAt(str, 120, 5);
WM_Exec();
OSTimeDlyHMSM(0,0,8,0);
}
}
static void task2(void *pdata)
{
char str[30] = {0};
while(1)
{
//显示
sprintf(*(Msg_Arr + Index_Msg_Arr),"task2 send:%ds",OSTimeGet());
//发送信号量
OSQPost(Semaphore,*(Msg_Arr + Index_Msg_Arr));
Index_Msg_Arr++;
if (Index_Msg_Arr >= 10)
{
Index_Msg_Arr = 0;
}
//显示
sprintf(str,"task2 time:%ds",OSTimeGet());
GUI_DispStringHCenterAt(str, 120, 20);
WM_Exec();
OSTimeDlyHMSM(0,0,1,0);
}
}
上一篇:ucos-ii示例7:内存管理测试
下一篇:ucos-ii示例3:互斥型信号量测试
推荐阅读
史海拾趣
人才是企业发展的根本。国光新业深知这一点,因此始终注重人才的引进与培养。公司推出了“国新力”人才计划专项,构建了一支优秀人才梯队。目前,企业的技术团队中科技人员占比超过30%,其中拥有工程师以上职称的比例更是超过六成。这些高素质的人才为公司的技术创新与产品研发提供了源源不断的动力。
GradConn始终将技术创新作为公司发展的核心驱动力。公司拥有一支专业的研发团队,致力于开发新型连接器和电缆组件,以满足不断变化的市场需求。同时,GradConn的所有工厂均通过了ISO 9001:2015和ISO 14001:2015等国际质量管理体系认证,确保了产品的高质量和环境友好性。这些认证不仅提升了GradConn的品牌形象,还为其在全球市场上赢得了更多客户的信任和支持。
随着全球对环保和节能问题的日益关注,Heatron公司积极响应号召,致力于研发和生产环保节能的电加热产品。公司投入大量资源于新材料、新技术的研发中,成功推出了一系列低能耗、高效率的加热器产品。这些产品不仅满足了市场对环保节能的需求,还进一步巩固了Heatron在电子行业中的领先地位。
1994年,三星电子(苏州)半导体有限公司在苏州工业园区成立,成为园区首批入驻的外资企业之一。公司初期主要生产配套、低附加值产品,但随着市场的变化和竞争的加剧,公司开始寻求转型。2003年,苏州工厂开始转型生产核心产品,标志着公司从低端生产向高端制造的转变。此后,公司不断加大在智能制造方面的投入,采用先进的半导体自动化生产管理系统和ERP管理系统,实现了“无人化”自动化生产,生产自动化率可达90%以上。同时,公司始终坚持“绿色经营”的可持续发展理念,致力于保护及改善周边环境,履行企业的环保社会责任。
随着技术研发的不断深入和产品线的逐渐完善,贝特莱于2016年1月21日正式挂牌上市,进军资本市场。这一举措不仅为公司带来了更多的资金支持,也进一步提升了贝特莱的品牌知名度和市场竞争力。上市后,贝特莱得以加速其研发步伐,不断推出创新产品,满足市场的多样化需求。
在电子行业的快速发展中,Cavium Networks 公司凭借其创新的技术和敏锐的市场洞察力,成功推出了基于 MIPS64 的单核和双核 OCTEON 处理器系列。这款处理器为网络、无线、控制和存储应用提供了高度集成化和低成本的64位计算解决方案,成为当时业界领先的面向下一代智能网络的新型处理器。OCTEON 处理器的诞生,标志着 Cavium Networks 在网络通信领域的技术实力得到了进一步提升,也为其后续的发展奠定了坚实的基础。
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 如题。直接接在普通开关两端的延时开关电路,不用改变目前的布线方式直接接与开关两端, 可用原开关两端引出两个线作为一个控制信号,也可以加上声控,光控功能, 下图这个电路当可控硅导通 ...… 查看全部问答∨ |
|
本帖最后由 dontium 于 2015-1-23 12:47 编辑 Chuck向您介绍美国国家半导体的LMP90100/LMP91000可配置传感器模拟前端产品,以及可加快产品上市的精简集成式软硬件开发平台。 片段中介绍的产品为:LMP90100/LMP91000。 LMP90100 – 多通道24位传 ...… 查看全部问答∨ |