ARM实习之邮箱内存池定时器的使用.pdfVIP

  • 3
  • 0
  • 约1.32万字
  • 约 10页
  • 2019-10-26 发布于湖北
  • 举报
邮箱内存池定时器的使用 一.实验目的 1.了解邮箱、内存池、定时器的基本使用; 2.熟练使用邮箱+内存池实现多个线程间通信。 二.实验设计 本实验演示邮箱+内存池在RT-Thread 中作为线程与线程、中断与线程间通 信的手段是如何使用的。  创建2个线程,一个定时器对象,一个静态的邮箱对象,两个内存池。  其中一个线程往邮箱中发送邮件,邮件内容为填充了AD1采样数据+RTC 时间信息的内存块首地址。  定时器也会周期性往邮箱中发送邮件,邮件内容为填充了AD2采样信息 的内存块首地址。  一个线程往邮箱中收取邮件。 以下为示意图 三.程序设计 这个程序会创建2个动态线程,一个定时器对象,一个静态的邮箱对象, 两个内存池。其中一个线程往邮箱中发送邮件,邮件内容为填充了信息的内存块 首地址。定时器也会周期性往邮箱中发送邮件,邮件内容为填充了信息的内存块 首地址。一个线程往邮箱中收取邮件。具体程序代码以及各行注释(黑色部分) 如下: #includertthread.h #includeboard.h #includelcd1602.h #includeapp.h rt_uint8_ttimebuf[20]= {0,0,0,0,-,0,0,-,0,0,-,0,0,:,0,0,:,0,0,\0}; /* 指向线程控制块的指针 */ staticrt_thread_ttid1=RT_NULL; staticrt_thread_ttid2=RT_NULL; /* 邮箱控制块 */ staticstructrt_mailboxmb; /* 用于放邮件的内存池 */ staticcharmb_pool[256]; /* 用于放AD1采样数据+RTC时间信息的内存池 */ staticrt_uint8_tmempool[4096]; /* 内存池控制块 */ staticstructrt_mempoolmp1; /* 用于放AD2采样数据信息的内存池 */ staticrt_uint8_tmempool[4096]; /* 内存池控制块 */ staticstructrt_mempoolmp2; /* 定时器控制块*/ staticrt_timer_ttimer1; staticvoidtimer_timeout(void*parameter) { char*pblock; rt_uint32_t ADC_Data=0; /* 申请内存块 */ pblock=rt_mp_alloc(mp2,0); if(pblock!=RT_NULL){ /*AD2数据信息的采集,*/ 1 AD0CR=(AD0CR0x00FFFF00)|0x02|(124); /* AD0.1 () 设置 , 并进行第一次转换*/ 2 while((AD0DR0==0); /* */ () 等待转换结束 3 ADC_Data=AD0DR; /* ADC */ () 再次读取 结果 4 AD0CR=AD0CR|(124); /* */ () 再次启运转换 5 while((AD0DR0==0); /* */ ()

文档评论(0)

1亿VIP精品文档

相关文档