这篇测评是对板载更多资源的学习,目前有测试了ADC、rtc、随机数、看门狗等其他资源,都比较简单,目前这些资源也用不上,所以就没有太认真测试,只是功能出来就OK了,顺道今天把rt-thread移植到开发板上,之前这个os还没有使用过,不过早几年有ucos的产品经验,大概看了下rt-thread,基本都差不多吧,而且现在keil支持rt-thread,省了很多事情,使用也都大同小异吧,移植过程非常顺利,rt-thread的中断管理那块都已经帮移好了,直接拿过来就能用,跑了两个闪灯的任务,总共加起来也没用到1小时,还是很顺利的,和裸机程序比较,时钟那块要改下,其他都直接用。后面试了下rt-thread的邮箱功能,很好用,基本平时使用的功能就全部有了,其实这块开发板功能是很丰富的,但是很多功能现在用不到,所以就没心思去认真弄了,所以这次测评先到移植完rt-thread这么多,下面来看下几个代码,显示main函数
- DISANLE_SYSTEM_IRQ();
-
- system_init();
- peripheral_init();
- system_config();
-
- thread_mailbox_init();
- thread_sample_init();
-
- ENANLE_SYSTEM_IRQ();
-
- while(1)
- {
- led_blink(LED_RED);
- rt_thread_mdelay(500);
- }
- return 0;
然后是创建线程,全部采用静态,ram不大,动态就不折腾了
- rt_err_t result;
- result = rt_thread_init(&thread1,
- "thread1",
- thread1_entry, RT_NULL,
- &thread1_stack[0], sizeof(thread1_stack),
- 5, 5);
- if (result == RT_EOK) rt_thread_startup(&thread1);
- result = rt_thread_init(&thread2,
- "thread2",
- thread2_entry, RT_NULL,
- &thread2_stack[0], sizeof(thread2_stack),
- 5, 5);
- if (result == RT_EOK) rt_thread_startup(&thread2);
-
- return 0;
创建邮箱
- rt_err_t result;
- /* ????? mailbox */
- result = rt_mb_init(&mb,
- "mbt", /* ??? mbt */
- &mb_pool[0], /* ????????? mb_pool */
- sizeof(mb_pool) / 4, /* ????????,??????? 4 ?? */
- RT_IPC_FLAG_FIFO); /* ?? FIFO ???????? */
- if (result != RT_EOK)
- {
- return -1;
- }
任务一,发送邮箱内容
- void thread1_entry(void* parameter)
- {
- while (1)
- {
- rt_mb_send(&mb, (rt_uint32_t)&but);
- rt_thread_mdelay(300);
- }
- }
任务二,接收邮箱内容
- void thread2_entry(void* parameter)
- {
- struct buttonMag *str;
-
- while (1)
- {
- if (rt_mb_recv(&mb, (rt_uint32_t *)&str, RT_WAITING_FOREVER) == RT_EOK)
- {
- led_blink(LED_BLUE);
- }
- }
- }
代码运行一段时间,看看会不会有问题,应该问题不大,rt-thread移植真是方便,现在还记得以前一直ucos的时候,可是花了好多心思,ARM7的中断管理可没有context-M3这么好,还记得ARM体系结构那本书还是不错的。
|