栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Contiki内核的STM32移植

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Contiki内核的STM32移植

  1. 找一个STM32的UART的打印例程,最好支持printf函数。
  2. 将contikicoresys目录下的autostart.c、etimer.c、process.c和timer.c加入到工程中。
  3. 在include路径中,加入contikicore、contikicoresys、contikicorelib、contikicpu。
  4. 把cpuarmstm32f103目录下的clock.c加入到工程中。
  5. 在clock.c中,用#include "stm32f10x.h"和#include "stm32f10x_it.h"替换原来的#include 和#include
  6. 把platformstm32test目录下的contiki_conf.h加入到include路径中。
  7. 把systick初始化函数改为:

void clock_init() {
    if ( SysTick_Config ( SystemCoreClock / CLOCK_SECOND ) ) {
        while ( 1 );
    }
}

  把systick中断函数改为:

void SysTick_Handler ( void ) {
    current_clock++;

    if ( etimer_pending() && etimer_next_expiration_time() <= current_clock ) {
        etimer_request_poll();
        // printf( "%d, %dn", clock_time(), etimer_next_expiration_time() );
    }

    if ( --second_countdown == 0 ) {
        current_seconds++;
        second_countdown = CLOCK_SECOND;
    }
}

最后把stm32f10x_it.c的void SysTick_Handler(void){}删除。
  8. 将main.c修改如下:

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "led.h"
#include 
#include 
#include 
#include 
#include 

PROCESS ( blink_process, "Blink" );
PROCESS_THREAD ( blink_process, ev, data ) {
    PROCESS_BEGIN();

    while ( 1 ) {
        static struct etimer et;
        etimer_set ( &et, CLOCK_SECOND );
        PROCESS_WAIT_EVENT_UNTIL ( etimer_expired ( &et ) );
        LED0 = !LED0;
    }

    PROCESS_END();
}

PROCESS ( blink_process_2, "Blink" );
PROCESS_THREAD ( blink_process_2, ev, data ) {
    PROCESS_BEGIN();

    while ( 1 ) {
        static struct etimer et_2;
        etimer_set ( &et_2, CLOCK_SECOND / 2 );
        printf ( "I am runningrn" );
        PROCESS_WAIT_EVENT_UNTIL ( etimer_expired ( &et_2 ) );
        LED1 = !LED1;
    }

    PROCESS_END();
}

unsigned int idle_count = 0;
AUTOSTART_PROCESSES ( &blink_process, &blink_process_2 );

int main ( void ) {
    NVIC_Configuration();
    uart_init ( 9600 );
    LED_Init();
    clock_init();
    process_init();
    process_start ( &etimer_process, NULL );
    autostart_start ( autostart_processes );
    printf ( "Processes runningn" );

    while ( 1 ) {
        do {
        } while ( process_run() > 0 );

        idle_count++;
        
        
        
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号