Copyright (c) 2014 苏州大学飞思卡尔实验室(版权声明)
All rights reserved.

《AMQXFW_Semaphore》工程说明
时          间：2014-08-12  
版          本：V3.0
作          者：王磊

1. 工程概述
(1)本工程为K60微控制器MQX系统应用工程，提供MQX信号量的使用样例
(2)工程中使用了3个信号量：SEM_READ读信号量（初值0）、SEM_WRITE写信号量（初值5）与SEM_INDEX共享区访问信号量（初值1），
用来实现读数据任务与写数据任务对共享数据区的互斥访问。共享数据区由宏ARRAY_SIZE决定，写任务数量由宏NUM_WRITERS决定
(3)初始化串口4作为默认通信设备与外界通信，波特率为9600，1位停止位，无校验
(4)读数据任务必须等待共享数据区中有数据才能读；每次只有1个写数据任务能对共享数据区进行数据写入；读写任务访问共享数据区前必须先获得
SEM_INDEX信号量
(5)5个任务：
    task_main:开总中断，系统自启动任务，打印欢迎信息，创建其它任务
    task_A:闪烁小灯1，每1秒切换一次亮暗状态
    task_B:闪烁小灯2，每2秒切换一次亮暗状态
    task_read:读数据任务。等待获取SEM_READ信号量及SEM_INDEX信号量读取共享区数据，读取完成后释放SEM_WRITE信号量及
              SEM_INDEX信号量
    task_write:写数据任务。等待获取SEM_WRITE信号量及SEM_INDEX信号量向共享区数据写数据，
                              写入完成后释放SEM_READ信号量及SEM_INDEX信号量
(6)系统使用外部扩展48M有源晶振，工作时钟总线频率为96M

2. 软件环境
(1)Freescale Kinetis Design Studio v1.1.0
(2)Freescale MQX 4.1.0

3. 硬件环境
(1)K60-C型板
(2)串口4发送引脚为PTE24,接收引脚为PTE25
(3)串口5发送引脚为PTD9,接收引脚为PTD8
(4)串口转USB接线：白色：发送线(Tx,Transmitter);绿色：接收线(Rx,Receive);黑色：地线

4. 实验现象
(1)读任务与写任务交替执行，并将执行过程通过串口4显示出来，如：
Task 10005 is waiting to write...
Task 10005's writing has been completed
Task 10006 is waiting to write...
Task 10006's writing has been completed
Reading data...
 Data 0:0x10005
Reading data...
 Data 1:0x10006
Task 10005 is waiting to write...
Task 10005's writing has been completed
Task 10006 is waiting to write...
Task 10006's writing has been completed
Reading data...
 Data 2:0x10005
Task 10005 is waiting to write...
Task 10005's writing has been completed
Task 10006 is waiting to write...
Task 10006's writing has been completed
Reading data...
 Data 3:0x10006
Reading data...
 Data 4:0x10005
(3)指示灯1每1秒闪烁1次，指示灯2每2秒闪烁1次

5. 备注
(1)本工程使用的是MQX自带的设备驱动如，GPIO和UART,并使用指示灯应用构件light。
(2)若要修改设备驱动的属性可以在工程目录bsp下的init_gpio.c和init_uart.c文件中修改相关的结构体变量
(3)可以通过使用config目录下的宏定义来添加和删除相关的设备驱动，如"#define BSPCFG_ENABLE_ITTYE      1",
为MQX系统添加带有中断的串口设备4
(4)在任务运行时需要使用MQX的驱动设备时,可以使用"fp=fopen("ittye:",IO_SERIAL_RAW_IO);"这样的形式
(5)用户自定义的ISR放在isr.h中声明,在isr.c中实现