×
单片机 > 单片机程序设计 > 详情

Contiki 在STM32 中的移植

发布时间:2020-06-04 发布时间:
|

使用野火的板子进行Contiki移植: 

开发环境:IAR+STM32 

代码移植基本上参照xukai871105 前辈的教程,不同之处是使用的是寄存器的操作方式,并没有是用STM32 的库函数。 

代码如下:



#include "contiki.h" 

#include "stm32/usart/usart.h" /* For usart_puts()*/ 

#include /* For printf() */ 

#include "sys/clock.h"


#include "sys/process.h"

#include "sys/procinit.h"

#include "sys/etimer.h"

#include "sys/autostart.h"


PROCESS(hello_world_process, "Hello world");  /*声明一个函数,该函数是进程的执行体,即进程的thread函数指针所指的函数;定义一个进程 */

AUTOSTART_PROCESSES(&hello_world_process);  /*AUTOSTART_PROCESSES宏实际上是定义一个指针数组,存放Contiki系统运行时需自动启动的进程*/


/*Define the process code*/ 

PROCESS_THREAD(hello_world_process, ev, data) 

    PROCESS_BEGIN(); 




    PROCESS_END(); 

}

unsigned int idle_count = 0;


int main()

{

  clock_init();

  uart_init(72,115200);

  printf("Initialising ");



  process_init();

  process_start(&etimer_process, NULL);

  autostart_start(autostart_processes);

  //process_start(&blink_process,NULL);

  printf("Processes running ");

  while(1) {

    do 

    {

    } 

    while(process_run() > 0);

    idle_count++;

    /* Idle! */

    /* Stop processor clock */

    /* asm("wfi"::); */ 

    printf("idle_count:%d ",idle_count);

  }

  return 0;

}


实现简单的串口发送。在编译过程中出现no definition for “autostart_processes”错误,跟踪代码后发现有如下宏:


#if ! CC_NO_VA_ARGS

#if AUTOSTART_ENABLE

#define AUTOSTART_PROCESSES(...)                    

struct process * const autostart_processes[] = {__VA_ARGS__, NULL}

#else /* AUTOSTART_ENABLE */

#define AUTOSTART_PROCESSES(...)                    

extern int _dummy

#endif /* AUTOSTART_ENABLE */


便在头文件添加了


#define AUTOSTART_ENABLE 1


但依然解决不了错误;经过百度后知道在前面没有调用宏PROCESS(name, strname) ;AUTOSTART_PROCESSES(…);致使后面的autostart_processes未定义。 

最后编译完成后,烧写到板子时提示代码区域有误便使用了ifc 文件便解决问题。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析