STM32移植contiki入门之二:简单编程点亮LED灯
来源:互联网 发布:欲望都市聊天软件 编辑:程序博客网 时间:2024/05/12 18:25
本篇介绍一个contiki下最简单的LED点亮程序。
PS:有人会问,为什么不首先打印hello world到串口?这是因为我觉得串口的程序比较难,在后面介绍会比较好。
在介绍本章之前,我先介绍一下contiki的事件驱动和protothread机制
Contiki两个主要机制:事件驱动和protothread机制,前者是为了降低功耗,后者是为了节省内存。
一、事件驱动
嵌入式系统常常被设计成响应周围环境的变化,而这些变化可以看成一个个事件。事件来了,操作系统处理之,没有事件到来,就跑去休眠了(降低功耗),这就是所谓的事件驱动,类似于中断。
二、protothread机制
传统的操作系统使用栈保存进程上下文,每个进程需要一个栈,这对于内存极度受限的传感器设备将难以忍受。protothread机制恰解决了这个问题,通过保存进程被阻塞处的行数(进程结构体的一个变量,unsiged short类型,只需两个字节),从而实现进程切换,当该进程下一次被调度时,通过switch(__LINE__)跳转到刚才保存的点,恢复执行。整个Contiki只用一个栈,当进程切换时清空,大大节省内存。
怎么说呢?简单的讲:contiki系统维护着一个事件队列,所有到来的事件都被加到该队列中,contiki系统按照一定的顺序处理这些事件。同时,contiki超强的“时间概念”为每个事件分配一个固定的时间间隔,如果一个事件的时间到来,那么执行该事件,时间结束,则转而执行其他的事件。
按照以前操作系统的概念,那么转到其他事件执行的时候,需要保存本事件的一些数据,例如变量,寄存器值等。但是contiki独特的protothread机制允许不保存这些,只保存事件(或者说进程,或者说程序)被阻塞的行数(我将其称为断点),这样在下次轮到该事件执行时,继续从该断点开始执行,直至结束。
先给出整个程序,让大家有个概念。
PROCESS(led_on_process, "led on");//见注一
AUTOSTART_PROCESSES(&led_on_process); //注二
PROCESS_THREAD(led_on_process, ev, data) //注三
{
PROCESS_BEGIN(); //注四
FIO1DIR2 = 0x01 << 18;
FIO5DIR0 = 0x07 << 2;
/* set LED pin as low level */
FIO1SET2 = (~0x01) << 18;
FIO5SET0 = (~0x07) << 2;
/*这里没什么好说的,初始化LED的控制寄存器,将其设置为输出模式,然后将相应的位置“0”,这样就能点亮LED灯了*/
PROCESS_END();
}
int main(void)
{
SystemInit ();//这里没什么可以说的,初始化CPU时钟,外围时钟,EMC时钟等
clock_init();//注五
process_init();//注六
procinit_init();
process_start(&led_on_process,NULL); //注七
autostart_start(autostart_processes);
while (1)
{
do{
}while (process_run() > 0);
}
}
- STM32移植contiki入门之二:简单编程点亮LED灯
- STM32移植contiki入门之三:从LED灯程序到contiki编程模型
- STM32开发之点亮LED灯
- STM32学习笔记之点亮LED灯
- STM32学习之点亮LED
- STM32移植contiki进阶之二:再叙systick
- STM32-点亮一个LED灯-流水灯
- STM32初探-点亮第一个led灯
- STM32-点亮LED灯(GPIO配置)
- STM32点亮LED
- STM32点亮LED
- STM32--点亮LED
- contiki STM32移植
- Contiki STM32移植
- mini2440裸机程序之二--点亮LED灯
- STM32移植contiki 从入门到进阶学习
- ARM嵌入式编程(无操作系统、基于MDK)之最简单的程序:点亮一个LED灯
- uboot-2011.12移植到S3C2440(二)——点亮LED灯,the very beginning。
- python核心编程第九章_文件系统的一个程序
- 用JAVA扫描指定文件夹下面所有以.txt结尾的文件,并将其绝对路径输出 .
- 阿里巴巴2014招聘考试研发类试题(南京站)
- 《UNIX环境高级编程》笔记--access函数
- linux shell 状态测试表达式含义
- STM32移植contiki入门之二:简单编程点亮LED灯
- 图文详解YUV420数据格式
- nosql hash算法优化
- android wifi驱动移植
- Qt 处理键盘按键事件:只能输入字母 keyPressEvent
- 悟 -- 生活
- GCD介绍(一): 基本概念和Dispatch Queue
- 在VS2010中使用wxWidgets 2.9.3
- Ubuntu下如何添加用户和组