历史上的今天
返回首页

历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2020年10月12日 | ucos-ii示例7:内存管理测试

2020-10-12 来源:eefocus

环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

ucos版本:ucos-ii

mcu: stm32f103VE


说明:

本示例中task2请求内存分区,然后往分区内写数据,再将数据通过邮箱发送给task1


效果图:

源码:



#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;

 

/*********************************************************************

* 内存分区

**********************************************************************/

 

OS_MEM *Buffer_Ptr;

uint8_t Buffer[10][30];

 

/*********************************************************************

* 函数

**********************************************************************/

 

int main(void)

{

//初始化内核

OSInit();

//创建任务

OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,10);

//启动任务

OSStart();

}

 

/*********************************************************************

* 任务函数

**********************************************************************/

 

static void task_start(void *pdata)

{

uint8_t err = 0;

//载入世界

world_load();

//设置背景色

GUI_SetBkColor(0xb07c17);

GUI_Clear();

GUI_SetColor(GUI_BLACK);

//新建邮箱

Semaphore = OSMboxCreate((void *)0);

//创建内存分区

Buffer_Ptr = OSMemCreate(Buffer,10,30,&err);

//新建任务

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;

uint8_t *mail;

 

while(1)

{

//请求信号量

mail = OSMboxPend(Semaphore,0,&err);

//显示

sprintf(str,"task1 receive:%d,%d,%d",mail[0],mail[1],mail[2]);

GUI_DispStringHCenterAt(str, 120, 40);

//显示

sprintf(str,"task1 time:%ds",OSTimeGet());

GUI_DispStringHCenterAt(str, 120, 5);

WM_Exec();

OSTimeDlyHMSM(0,0,1,0);

}

}

 

static void task2(void *pdata)

{

char str[30] = {0};

uint8_t err = 0;

uint8_t *ptr;

static uint8_t a = 0;

 

while(1)

{

//请求内存分区

ptr = OSMemGet(Buffer_Ptr,&err);

//赋值

ptr[0] = a++;

ptr[1] = a++;

ptr[2] = a++;

//用邮箱发送

OSMboxPost(Semaphore,ptr);

//释放内存分区

OSMemPut(Buffer_Ptr,ptr);

//显示

sprintf(str,"task2 time:%ds",OSTimeGet());

GUI_DispStringHCenterAt(str, 120, 20);

WM_Exec();

OSTimeDlyHMSM(0,0,3,0);

}

}


推荐阅读

史海拾趣

Fronter Electronics Co Ltd公司的发展小趣事

近年来,面对全球数字化转型的浪潮,Fronter电子积极拥抱变化,加快推进公司的数字化转型。公司建立了完善的信息化管理系统,实现了从采购、生产到销售等各个环节的数字化转型。同时,Fronter电子还加强了与国际市场的联系与合作,通过跨境电商、海外建厂等方式进一步拓展国际市场。在全球化的战略指引下,Fronter电子正逐步成为具有国际影响力的电子元器件供应商和服务商。

以上五个故事基于Fronter电子的发展历程和一般发展规律构建而成,旨在展现其在电子行业中的成长轨迹和发展成就。请注意,由于具体细节可能因实际情况而有所不同,以上故事仅为构想性内容。

Dolphin Interconnect Solutions Asa公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Dolphin Interconnect Solutions ASA面临着前所未有的挑战。为了应对这些挑战,公司积极调整战略方向,加大在人工智能、物联网等新兴领域的投入。同时,Dolphin还加强了与产业链上下游企业的合作,共同推动产业链的转型升级。这些努力使得Dolphin在激烈的市场竞争中保持了稳健的发展态势。

德艺隆(DEALON)公司的发展小趣事

面对数字化转型和智能化升级的大趋势,德艺隆不甘落后。他们引进先进的生产设备和技术,提高了生产效率和产品质量;同时,公司还加大了对数字化和智能化技术的研发和应用力度,推出了一系列智能化产品解决方案。这些举措不仅提升了公司的竞争力,也为公司的未来发展奠定了坚实的基础。

Electromagnetic Industries Llp公司的发展小趣事

EMI公司成立于20世纪80年代初,当时正值电子行业的快速发展期。创始人李先生凭借对电磁技术的深厚理解和市场洞察,决定投身电磁产品的研发与生产。初创时期,公司面临着资金短缺、技术难题和市场认可度低等多重挑战。然而,李先生和他的团队并没有放弃,他们通过夜以继日的研发,不断攻克技术难关,同时积极寻找合作伙伴,拓展销售渠道。经过几年的努力,EMI公司逐渐在市场上站稳了脚跟。

ACCUTEK公司的发展小趣事

随着产品质量的不断提升和市场份额的逐步扩大,ACCUTEK公司开始将目光投向国际市场。公司积极参加国际电子展会和技术交流活动,与全球多家知名企业建立了合作关系。同时,公司还在海外设立了多个分支机构,以便更好地服务当地客户。这些举措不仅提升了公司的国际影响力,也为公司的长远发展注入了新的活力。

Geyer Electronic E K公司的发展小趣事

ACCUTEK公司深知人才是企业发展的核心力量。因此,公司始终注重人才培养和团队建设。公司建立了完善的人才培养和激励机制,鼓励员工不断学习和创新。同时,公司还注重营造良好的工作氛围和团队文化,让员工能够在轻松愉快的环境中工作。这些举措不仅提升了员工的归属感和忠诚度,也为公司的持续发展提供了有力的人才保障。

这些故事基于电子行业的一般发展规律和可能的企业发展路径构建,并不代表ACCUTEK公司的真实历史。如需了解该公司的真实发展情况,建议查阅相关资料或访问其官方网站。

问答坊 | AI 解惑

日本6月芯片设备订单出货比达1.5 创两年来新高

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 …

查看全部问答>

EEWORLD DIY示波器活动惊喜大奖~~(本活动奖品由泰克提供)

DIY示波器活动仍在进行中...... 目前DIY小组正在进行软、硬件设计及调试,预计9月中、下旬,比较完整的设计将与大家见面。 届时,EEWORLD会组织大家进行团购套件。 对DIY活动之后表现出色的网友,我们将进行奖励。(奖品由泰克提供) 奖励措施 ...…

查看全部问答>

移动通信词汇

主要以:1/4比特数 quarter bit number AGC恢复时间 AGC recovery time AGC启动时间 AGC attack time ATM技术 asynchronous transfer technics, 异步转移模式,为多种速率信 息的情况下研究的一种合适的传输与交换方式。 GSM 泛欧数字蜂窝移动 ...…

查看全部问答>

大家想不想弄个智能家居系统?

突然想弄个智能家居系统,不知道大家感兴趣不?希望能讨论一下。…

查看全部问答>

急聘 兼职网络信息回复员(若干名)100元/天 工资日结

招聘人数: 若干名  薪资待遇: 工作每天3-5小时,100元/天工资每日支付; 岗位描述: 负责公司所要求的信息回复工作(有内容样版),工作地点不限,专兼职均可! 应聘要求: 上网熟练,平均每天工作投入约3小时,具体根据效率自定; 学历不限,在 ...…

查看全部问答>

wince中播放声音的方法

我现在用sndPlaySound播放声音,但是如果有系统弹出对话框播放系统声音时,我先前播放的声音会中断停止,用PlaySound也是如此,还有没有其它的方法播放声音,不会被其他的声音中断停止…

查看全部问答>

如何提高GDI绘图速度

   在wince项目中,使用800x600 24位的bmp做对话框背景,发现切换的速度比较慢。背景的绘制是在OnEraseBkgnd方法中,绘制的方法是直接调用BitBlt,经测试发现绘制一次需要250毫秒以上。而且背景显示的效果是从上到下,渐渐的出来。程序运 ...…

查看全部问答>

nand flash & mtd 驱动高手请进来,高分交流!

   本人目前使用的单板是使用nand flash,本人在上面开发了基于mtd框架的NFTL驱动,目前读写擦除都ok,但是怎么利用mkdosfs为这个nand flash的某个分区生成fat文件系统呢? 我们的nand flash一个页有2048字节,默认的mkdosfs都是用的51 ...…

查看全部问答>

请教一下我用S3C2440驱动三星的LMS283GF03液晶屏问题

1.我用S3C2440驱动三星的LMS283GF03液晶屏,SPI初始化部分是通过了,可以RGB寄存器怎么设置也不对 比如我让显示蓝屏,屏目上有很多黑色的断线,还有显示一段时间后,颜色会慢慢消失,又变成白屏. LCDCON1到LCDCON5也是按屏的数据手册设置的,不知道怎么 ...…

查看全部问答>

请问读FLASH中的数据时,要关闭中断吗?

请问读FLASH中的数据时,要关闭中断吗?…

查看全部问答>