4083|7

2144

帖子

3

TA的资源

五彩晶圆(中级)

楼主
 

【Atmel SAM R21创意大赛周计划】+ Contiki-OS移植篇 [复制链接]

本帖最后由 lyzhangxiang 于 2014-12-24 12:45 编辑

好吧,通过第一篇的探索,目前已经采用IAR来跑程序了,当然也修改了一下官方的程序结构,更符合我自己的习惯。

【Atmel SAM R21创意大赛周计划】+ 初步接触

继续说说现在的进度吧,基本上Contiki-OS已经移植差不多了,接下来基本上是Radio部分的驱动和CFS的移植了。贴图吧,不知道说点啥。

1、最精简的contiki-os结构


2、写了个简单的测试


3、添加了网络部分的contiki-os结构


测试程序
  1. /**
  2. * brief  leds_process
  3. * note   leds_process线程
  4. * param  None
  5. * retval None
  6. */
  7. PROCESS_THREAD(leds_process, ev, data)
  8. {
  9.     static struct etimer et_leds;

  10.     PROCESS_BEGIN();
  11.     etimer_set(&et_leds, CLOCK_SECOND);

  12.     while (1) {
  13.         PROCESS_WAIT_EVENT();
  14.         if (ev == PROCESS_EVENT_TIMER) {
  15.             printf("# LED0 toggle..\r\n");
  16.             LED_Toggle(LED_0_PIN);
  17.             etimer_reset(&et_leds);
  18.         }
  19.     }
  20.    
  21.     PROCESS_END();
  22. }


  23. /**
  24. * brief  dbgs_process
  25. * note   dbgs_process
  26. * param  None
  27. * retval None
  28. */
  29. PROCESS_THREAD(dbgs_process, ev, data)
  30. {
  31.     static struct etimer et_dbg;

  32.     PROCESS_BEGIN();
  33.     etimer_set(&et_dbg, 5*CLOCK_SECOND);

  34.     while (1) {
  35.         PROCESS_WAIT_EVENT();
  36.         if (ev == PROCESS_EVENT_TIMER) {
  37.             printf("# DBG task run..\r\n\r\n");
  38.             etimer_reset(&et_dbg);
  39.         }
  40.     }
  41.    
  42.     PROCESS_END();
  43. }
复制代码


主程序
  1. /**
  2. * brief  mian
  3. * note   程序入口
  4. * param  None
  5. * retval None
  6. */
  7. int main(void)
  8. {
  9.         system_init();
  10.     configure_console();
  11.         system_interrupt_enable_global();

  12.     clock_init();
  13.     process_init();
  14.     printf("# Contiki-OS on SAMR21_Xplained_Pro..\r\n");
  15.       
  16.     process_start(&etimer_process, NULL);
  17.     process_start(&dbgs_process, NULL);
  18.     process_start(&leds_process, NULL);

  19.         while (1) {
  20.         do {
  21.             
  22.         } while (process_run() > 0);
  23.         }
  24. }
复制代码


测试结果


最新回复

最近也在研究contiki ,参考了楼主的很多帖子,,希望能楼主分享一下contiki的移植例程。  详情 回复 发表于 2015-2-7 14:19

赞赏

3

查看全部赞赏

点赞 关注
个人签名电工
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
看着不错,进展很快啊。
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

板凳
 
最新进展,已经移植好 cfs-coffee文件系统啦

简单测试了一下,每隔5s读取一次文件内容,这个文件系统虽然小,性能还是很不错的,算是micro日志型文件系统支持垃圾回收等



  1. /**
  2. * brief  cfs_first
  3. * note   CFS初次使用
  4. * param  None
  5. * retval None
  6. */
  7. static void cfs_first(void)
  8. {
  9.     char * str = "www.eeworld.com";
  10.     xmem_init();
  11.    
  12. #if 0
  13.     cfs_coffee_format();while(1);
  14. #endif
  15.    
  16.     int fa = cfs_open( "/index.html", CFS_READ);
  17.    
  18.     if (fa < 0) {  
  19.         printf("No index.html file found, creating index.html!\r\n");
  20.         printf("Formatting FLASH file system for coffee...\r\n");
  21.         cfs_coffee_format();
  22.         printf("Done!\r\n");
  23.         
  24.         fa = cfs_open( "/index.html", CFS_WRITE);
  25.         int w = cfs_write(fa, (char*)str, strlen(str));
  26.         if (w < 0) {
  27.             printf("Can''t create index.html!\r\n");
  28.         }
  29.         cfs_close(fa);
  30.     }
  31. }
复制代码


  1. /**
  2. * brief  dbgs_process
  3. * note   dbgs_process
  4. * param  None
  5. * retval None
  6. */
  7. PROCESS_THREAD(dbgs_process, ev, data)
  8. {
  9.     char context[128];
  10.     static struct etimer et_dbg;

  11.     PROCESS_BEGIN();
  12.     etimer_set(&et_dbg, 5*CLOCK_SECOND);

  13.     while (1) {
  14.         PROCESS_WAIT_EVENT();
  15.         if (ev == PROCESS_EVENT_TIMER) {
  16.             int fa = cfs_open( "/index.html", CFS_READ);
  17.             int r  = cfs_read(fa, context, 20);
  18.             if (r < 0) {
  19.                 printf("Can''t read index.html!\r\n");
  20.             }
  21.             printf("index.html context: %s\r\n", context);
  22.             cfs_close(fa);
  23.             
  24.             etimer_reset(&et_dbg);
  25.         }
  26.     }
  27.    
  28.     PROCESS_END();
  29. }
复制代码




 
个人签名电工
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

4
 
继续更新,有点累,搞定rtime移植

RF驱动有点复杂,估计还要一个礼拜时间,相关东西可以参考这个论坛,下面是我搜索SAMR21的结果

http://www.avrfreaks.net/search/site/samr21

  1. http://www.avrfreaks.net
复制代码


关于Rtime移植部分的一些代码
  1. /**
  2. * @brief   rtimer_arch_init
  3. * @note    硬件定时器初始化
  4. * @param   none
  5. * @retval  none
  6. */
  7. void rtimer_arch_init(void)
  8. {
  9.     configure_tc();
  10.     configure_tc_callbacks();
  11. }


  12. /**
  13. * @brief   rtimer_arch_schedule
  14. * @note    硬件定时调度调度
  15. * @param   none
  16. * @retval  none
  17. */
  18. void rtimer_arch_schedule(rtimer_clock_t t)
  19. {
  20.     PRINTF("rtimer_arch_schedule time %u\n", t);
  21.    
  22.     CONF_TC_MODULE->COUNT32.CC[0].reg = t;
  23. }


  24. /**
  25. * @brief   rtimer_arch_now
  26. * @note    硬件定时当前时刻
  27. * @param   none
  28. * @retval  none
  29. */
  30. rtimer_clock_t rtimer_arch_now(void)
  31. {
  32.     rtimer_clock_t t;
  33.    
  34.     t = CONF_TC_MODULE->COUNT32.COUNT.reg;
  35.     return t;
  36. }


  37. /**
  38. * @brief   rtimer_isr_hook
  39. * @note    硬件定时器中断勾函数
  40. * @param   none
  41. * @retval  none
  42. */
  43. void rtimer_isr_hook(void)
  44. {
  45.     ENERGEST_ON(ENERGEST_TYPE_IRQ);

  46.     rtimer_run_next();
  47.    
  48.     if (process_nevents() > 0) {
  49.         /*
  50.          * 退出低功耗
  51.          * 如果之前进入了的话
  52.          */
  53.     }
  54.    
  55.     ENERGEST_OFF(ENERGEST_TYPE_IRQ);
  56. }
复制代码


 
个人签名电工
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

5
 
该论坛有不少好项目,
http://www.avrfreaks.net/projects
 
个人签名电工
 
 

回复

1071

帖子

7

TA的资源

纯净的硅(中级)

6
 
感谢楼主分享
 
 
 

回复

14

帖子

1

TA的资源

一粒金砂(中级)

7
 
最近也在研究contiki ,参考了楼主的很多帖子,,希望能楼主分享一下contiki的移植例程。

点评

基本上能分享的我都分享到论坛了,有问题可以讨论代码不太方便共享哦。  详情 回复 发表于 2015-2-7 19:41
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

8
 
songjw 发表于 2015-2-7 14:19
最近也在研究contiki ,参考了楼主的很多帖子,,希望能楼主分享一下contiki的移植例程。

基本上能分享的我都分享到论坛了,有问题可以讨论代码不太方便共享哦。



 
个人签名电工
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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