二、Contiki移植
使用KEIL MDK环境,移植到STM32L051C8单片机上,根据网上资料与里程总结如下:
1、创建STM32工程。
2、复制contiki-3.0目录下,core、cpu文件夹到工程目录下
3、保留core下sys文件夹和.h文件,其他文件夹删除
4、保留cpu\arm\stm32f103\clock.c文件,其他删除
5、复制contiki-3.0\platform\stm32test\contiki-conf.h配置文件到core目录下
目录如下
6、添加文件到keil工程,.c与.h
7、更改clock函数
a)系统时钟中断函数更改
b)系统时钟初始化函数更改
更改后如图
8、配置contiki
在contiki-conf.h文件中添加#define AUTOSTART_ENABLE1u,使能进程自动运行功能
其他配置日后在一点点研究
9、编译工程
会有错误,屏蔽掉找不到的头文件。
直到编译成功
10、编写进程例子
编写两个进程,一个进程打印hello ,另一个进程打印world,间隔时间1s打印一次,通过串口打印。
a)先声明注册进程
PROCESS(PrintfHello_ps, "Hello");
PROCESS(PrintWorld_ps, "World");
b)自动启动的进程放到自动启动数组中
AUTOSTART_PROCESSES(&PrintfHello_ps, &PrintWorld_ps);
c)创建事件标志变量
static process_event_t event_flag;
d)打印hello线程
PROCESS_THREAD(PrintfHello_ps, ev, data)
{
//线程开始
PROCESS_BEGIN();
//定义一个事件定时器
static struct etimer timer;
//设置事件定时器时间,并绑定为当前进程,溢出时间1s
etimer_set(&timer, 1*CLOCK_SECOND );
printf("PrintfHello_ps start\n");
//分配一个新的事件
event_flag = process_alloc_event();
while (1)
{
//等待定时器超时事件
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
//打印 hello
printf("hello ");
//投递事件,把event_flag这个事件投递到PrintWorld_ps进程,数据参数为NULL
process_post(&PrintfHello_ps, event_flag, NULL);
//复位定时器,重新开始计时
etimer_reset(&timer);
}
PROCESS_END();
}
e)打印world进程
PROCESS_THREAD(PrintWorld_ps, ev, data)
{
PROCESS_BEGIN();
printf("PrintfWorld_ps start\n");
while (1)
{
//等待event_flag事件
PROCESS_WAIT_EVENT_UNTIL(ev == event_flag);
//打印world.
printf("world.\n");
}
PROCESS_END();
}
f)主函数
int main(void){
/* Configure the system clock to 32 MHz */
SystemClock_Config();
PeripheralClock_Config();
BspHardwareInit();
//contiki时钟初始配置
clock_init();
//进程初始化
process_init();
//开始事件定时器
process_start(&etimer_process, NULL);
//自动启动线程
autostart_start(autostart_processes);
while(1) {
do {
} while(process_run() > 0);
idle_count++;
/* Idle! */
/* Stop processor clock */
/* asm("wfi"::); */
}
return 0;
}
11、输出结果
二、Contiki移植相关推荐
- 嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX
嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX 本篇笔记将简单介绍RTX,包括基本架构,如何在Keil中配置.需要安装ARM-MDK和一块硬件板,笔记以STM32F4Discovery为例子 ...
- [嵌入式] 重温Mini2440(二)移植Linux-4.9.270
重温Mini2440(二)移植Linux-4.9.270 一. 获取Linux内核 二. 安装编译工具 三. 配置内核 四. 修改驱动 五. 生成uImage 六. U-Boot引导内核 一. 获取L ...
- U-Boot移植教程之二:移植
内容来自 韦东山<嵌入式Linux应用开发完全手册> 一.U-Boot移植 开发板smdk2410的配置适用于大多数S3C2410单板,或是只需要极少的修改即可使用.但是目前U-Boot中 ...
- tiny4412学习(二)之移植linux-4.x支持设备树
硬件平台:tiny4412 系统:linux-4.4 文件系统:busybox-1.25 编译器: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 2014 ...
- ThreadX应用开发笔记之二:移植ThreadX到STM32H7平台
前面我们将ThreadX成功移植到了STM32F4平台,但这只是我们的部分应用.我们希望将ThreadX的优势发挥到我们的更多应用中,所以在这一篇中我们就来实现将ThreadX移植到STM32H7 ...
- android变声后的文件,仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题...
版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决 ...
- [二] Nuttx移植-星瞳pyboard开发板
目录 一.Nuttx配置文件 二.构建自己的配置文件 1. include/board.h文件构建 2. kernel && scripts 构建 3. nsh/defconfig 构 ...
- 仿QQ语音变声功能实现(二)---移植到android studio 并解决部分问题
版权声明:转载必须注明本文转自张鹏辉的博客: http://blog.csdn.net/qingtiangg 大家好,距离上一篇博客半年过去了,关于上一篇博客很多人加我QQ留言问了几个问题,最近不忙决 ...
- 二、移植u-boot-2016.03到Jz2440之启动过程分析
2.u-boot-2016.03启动过程分析 从添加Jz2440单板这一节可知,成功添加Jz2440单板后,把编译好的u-boot.bin烧写到Jz2440开发板,重新启动开发板,开发板串口没 ...
最新文章
- 面试题:如何理解 Linux 的零拷贝技术?
- rlwrap 让Linux下的sqlplus变得好用
- Web Cookie详解
- python3.6安装-python3.6的安装及注意事项
- c语言复制的代码不能运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
- spring javafx_带有Spring的JavaFX 2
- php 中 的含义
- centos 7下安装mysql
- JavaScript 求和(字符串转换成数组、for循环求和)
- VAST2 0视频广告投放解决方案改变视频网站未来技术格局
- python九宫格矩阵排数
- W3af详细安装与基本使用
- Egret Wing常用快捷键
- 秘笈大公开 | 魏泓手把手教你利用无菌动物,提高国自然中标率!
- Could not enlist in transaction on entering meta-aware object!”
- 三行代码搭建一个全能书籍系统(wiki)
- 简单的前后端交互的案例
- 详解 AJAX-SpringBoot 前后端数据交互
- 刮刮乐、幸运大转盘 1
- mysql144,通过phpMyAdmin从MySQL错误144中恢复
热门文章
- 解决Could not build wheels for pikepdf which use PEP 517 and cannot be installed directly
- android+ios+账号互通,ios和安卓游戏账号能互通吗?
- Android调用系统输入法
- Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
- 服务器柜机位置摆放电子图,柜式空调摆放位置有什么要注意的吗
- plex插件显示无服务器,deepin 15.11 安装plex和插件
- 攻壳机动队中的塔奇克马有灵魂吗?烧脑深度思考,慎点
- 令狐冲和TCP/IP协议的第三层协议的关系(经典)
- vite:vue中引入图片报错require is not defined
- 服务器网页篡改,网站服务器网页防篡改系统