CooCox CoOS 是一款针对ARM Cortex-M系列芯片而设计的实时系统内核。
CoOS特征:
- 免费并开源
- ARM Cortex M3及M0定制操作系统
- 高度可裁剪性,最小系统内核仅974Byte
- 支持优先级抢占和时间片轮转
- 自适应任务调度算法
- 中断延时时间趋近于零
- 堆栈溢出检测
- 信号量、邮箱、队列、事件标志、互斥等同步通信方式
- 支持多种编译器:ICCARM、ARMCC、GCC
#include <CoOS.h>
#include "stm32f10x.h"
OS_STK taskA_stk[128]; //建立一个任务栈A
OS_STK taskB_stk[128]; //建立一个任务栈B
void LED_GPIO_Init(void)
{
GPIO_InitTypeDef Weiqi_GPIO_InitStru;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,ENABLE);
Weiqi_GPIO_InitStru.GPIO_Pin = GPIO_Pin_5;
Weiqi_GPIO_InitStru.GPIO_Speed = GPIO_Speed_50MHz;
Weiqi_GPIO_InitStru.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOB,&Weiqi_GPIO_InitStru);
Weiqi_GPIO_InitStru.GPIO_Pin = GPIO_Pin_5;
Weiqi_GPIO_InitStru.GPIO_Speed = GPIO_Speed_50MHz;
Weiqi_GPIO_InitStru.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_Init(GPIOE,&Weiqi_GPIO_InitStru);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
}
void TaskA(void* pdata)
{
for(;;)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
CoTickDelay(10); //延时N个系统节拍 任务进入等待态(TASK_WAITING) 延时是10*100ms 等于1S 就是一秒钟一次?
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
CoTickDelay(10); //延时N个系统节拍 任务进入等待态(TASK_WAITING) 延时是10*100ms 等于1S 就是一秒钟一次?
}
}
void TaskB(void* pdata)
{
for(;;)
{
GPIO_SetBits(GPIOE,GPIO_Pin_5);
CoTickDelay(5); //延时N个系统节拍 任务进入等待态(TASK_WAITING) 延时是5*100ms 等于500 m?
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
CoTickDelay(5); //延时N个系统节拍 任务进入等待态(TASK_WAITING) 延时是5*100ms 等于500 m?
}
}
int main(void)
{
CoInitOS (); //操作系统初始化
LED_GPIO_Init();
/*
[IN1]创建任务的函数体
[IN2]任务函数体的传入参数列表
[IN3]任务优先级
[IN4]任务栈起始地址
[IN5]任务堆大小
*/
CoCreateTask (TaskA,0,0,&taskA_stk[128-1],128);
CoCreateTask (TaskB,0,1,&taskB_stk[128-1],128);
CoStartOS (); //启动操作系统开始多线程
while (1); //代码永远执行不到这里
}
实验现象 两个LED灯开始闪烁!
|