你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 Nucleo的contiki移植 (一)准备工作

[复制链接]
笨,小黑 发布时间:2015-2-3 22:25
本帖最后由 笨,小黑 于 2015-2-3 22:36 编辑
! j, x1 a1 E4 R$ W. T) F! V
! ?6 d$ A9 J9 |% Y4 ]拿到 Nucleo 已经一个多月了  因为公司项目的缘故,无法第一时间跟大家分享开发经验,实在抱歉。
; R5 Y! g; g1 D" @1 K# ^% c1 w作为研究生最后 一年的实习生,论文项目两边要兼顾,业余时间变得有点不够用。) E/ W9 `( y$ J% ]* `; @( e& l
论坛里搜索了一下,stm32区只有2篇关于contiki的帖子,关于6lowpan的更是没有4 T3 B5 W8 }# _
这里先给大家简单介绍一下contiki的移植步骤。
. A. F- i; ~# [; o( k3 q/ R4 I, N介绍一下:      /****** baidu baike *****/
Contiki 是一个适用于有内存的嵌入式系统的开源的、高可移植的、支持网络的多任务操作系统。包括一个多任务核心、TCP/IP 堆栈、程序集以及低能耗的无线通讯堆栈。Contiki 采用 C 语言开发的非常小型的嵌入式操作系统,运行只需要几K的内存。[1]0 @! Q( [$ D+ T; c) @$ z: x
Contiki 是一个小型的,开源的,极易移植的多任务电脑操作系统。它专门设计以适用于一系列的内存受限的网络系统,包括从8位电脑到微型控制器的嵌入系统。它的名字来自于托尔·海尔达尔的康提基号。, U6 p4 f! {5 x' ]. e& r( |
Contiki只需几kilobyte的代码和几百字节的内存就能提供多任务环境和内建TCP/IP支持。
1 ^3 A( W7 o! z, q7 D
2 |( A( }" l6 B+ t  S* t4 F
/****** baidu baike *****/
3 R( w$ r$ a/ {# R* J7 U. p% a先确认下移植个什么任务最好,反正新的芯片到我手里,我最喜欢的就是点LED。1秒一闪,简单直观。9 d3 {: d! c, T* o

% x" o( \0 @+ _7 ~Contiki是事件驱动机制的,产生“事件“就是我们需要去做的事情。途径不多:通过时钟定时,定时事件到就产生一个事件;通过某种中断,某个中断发生,就产生某个事件例如外部中断。& t+ }5 n0 B7 F+ }$ H
  1. /***********% m1 F2 q  E' O! k( v' C
  2. contiki task 3 o1 S  |9 [/ z6 z1 }
  3. ************/
    % x$ [  G) `9 g/ k6 h, P
  4. #include "stm32f0xx.h"
    & q% }5 S8 w, S5 R2 b, [
  5. #include <stdint.h>
    2 r4 U3 p% b7 H/ _5 W" J( f$ Q
  6. #include <stdio.h>% i" |- j- f; c, O8 b" `
  7. #include <debug-uart.h>
    + V, W0 F% C0 s# B  ^4 H
  8. #include <clock.h>0 ]' b0 Q" v! X7 ~+ T: B  n
  9. #include <sys/process.h>
    % v& |+ R0 a+ D/ s3 \( ~
  10. #include <sys/procinit.h>
    # f7 B7 n5 S$ J% y* M' {* C
  11. #include <etimer.h>: }. J  A& P( Q, e- L4 s& g. C
  12. #include <sys/autostart.h>
    " O* C' O) q9 o
  13. #include "gpio_common.h"//gpio obj
    * l1 P, A9 b: X! X
  14. #ifdef CONFIG_GPIO_STM32F072RB( z7 J; Q, W' [5 a2 d  W, q* L
  15. #include "stm32f072_gpio.h"8 G9 T) h, w" m/ m% C$ m
  16. #else
    + b1 B4 D$ [( T' f) z0 E* }5 s
  17. void led_init(void){} //空实现/ t3 u7 l4 e# K  `8 ^6 ~
  18. #endif. ]& ]' d0 R. t

  19. 1 j9 a2 \; y9 p3 R: F9 q
  20. PROCESS(blink_process, "LED"); //注册任务$ A4 r0 c* `# f6 G, S1 G$ t4 J  C& u
  21. AUTOSTART_PROCESSES(&blink_process);) S! f8 t  b) G, W
  22. //自动启动任务
    # J! U( F$ ^8 S
  23. PROCESS_THREAD(blink_process, ev, data)
    # v2 H. h7 E) }
  24. //任务线程 ! M1 b( B" p/ t' e0 Q& q5 ^! x
  25. {
    3 i6 ?+ t/ @* f2 C2 \3 ~( C3 K
  26. / K) q) y+ {& y# h4 L
  27.   PROCESS_BEGIN();
    0 S/ y2 J8 n) S9 V4 v' r
  28.   while(1)
    8 a  [7 R: J) v6 i( ^$ ^2 w6 y
  29.   {
    # A6 ?" I; b) E0 u
  30.     static struct etimer time_e;
    + m" t, Q. d7 {
  31.     etimer_set(&time_e, CLOCK_SECOND);
    $ g2 W" e% y3 _0 t
  32.     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&time_e));8 e3 A  J) O0 I) v) U5 s6 F  p
  33.     6 u; @6 u% n& }- l& R0 i& A- O. B/ G
  34.     GPIO_ResetBits(GPIO_LED_GR,GPIO_Pin_LED);! d! n6 K9 x& m2 ~( y* I
  35. //led on 1 t+ G0 o% Y  ~9 z, \/ ^) G
  36.     etimer_set(&time_e, CLOCK_SECOND);
    + v  F0 D1 [0 P% L/ M7 ~
  37.     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&time_e));1 F$ d1 q) @2 H& K
  38.     GPIO_SetBits(GPIO_LED_GR,GPIO_Pin_LED);0 ]8 O: B0 C* J! W, I& {* v
  39. // led off
    0 f  r" x% W- S: U5 \1 h
  40.    
      [+ e( q' t! Y. V, u7 A
  41.   }3 }6 z  C2 F  r6 L! `, {, `
  42.    PROCESS_END();; }, |/ K8 F5 z/ ?- k9 g0 B
  43. }) U$ C/ ]) _7 s! _/ d; N
  44. 1 D5 _) E6 R( q2 U- a* }" L

  45. ( d) B  |, q& P" \( }! Y
  46. int main()1 k8 a3 ^- Y1 x( @. w
  47. {( h, x% Z! |# Y5 J! `: z4 m1 q
  48.   uart_init(9600);
    ' f: i& }/ n1 ?+ @9 v- A3 S
  49.   led_init();
    3 H- J' p7 P. o
  50.   printf("led init ok \r\n");
      H& P0 x: s' C- R0 h
  51. //顺便可以知道串口是否初始化成功了, d6 S0 D0 R8 w: `" X5 L
  52.   clock_init();; f# c. |6 n$ p: {# M
  53.   process_init();: ]+ c. s( H! C) g+ }
  54.   process_start(&etimer_process, NULL);
    6 [1 S: X* R! b6 \* |, W
  55.   autostart_start(autostart_processes);
    , f; a2 b2 M+ n! M& o
  56.   while(1) {" I# \$ S/ p" g7 p0 K
  57.    ;
    % H& W( f" q, M+ G+ J
  58. }  |2 U: C$ x! D6 W0 g% O
复制代码
5 }% }6 A, D4 |; z1 G5 T
8 k: ~) j3 W- M: c# L5 f8 b6 a( I: k
今天暂时写到这里,思路是搬运的自STM32的移植的。 空了继续写
/ J$ }4 B, S, y; r0 ]
2 X# p+ G: i" Y, Z. i/ L
* U4 x% u: t6 d) w2 P  P9 {( z7 ~& r* \
4 C  T: h, J8 d/ v9 U$ ]! P; K
赞 收藏 评论6 发布时间:2015-2-3 22:25

举报

6个回答
笨,小黑 回答时间:2015-2-3 22:26:04
我写的代码那么多  被吞了?
jingangshi521 回答时间:2015-2-3 23:36:56
好贴子 !!!
shaoziyang 回答时间:2015-2-3 23:39:21
笨,小黑 发表于 2015-2-3 22:26
6 Q+ J, L& N6 u1 C" ]0 ^" z我写的代码那么多  被吞了?
# d- j6 x% |7 J( J6 g7 R6 t
有时会出现这样的情况。代码太长,可以分几段发,或者放在附件。
0406445 回答时间:2015-9-10 06:37:23
楼主求更新
anny 回答时间:2015-9-10 08:21:04
代码打包好点
happy1993 回答时间:2016-5-5 16:40:54
楼主请问你是用什么工具开发的?keil?IAR?还是直接在linux下makefile?
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版