⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme.c

📁 UCOS_UCGUI_MDK_LPC2134的移植代码.rar
💻 C
字号:
/********************************************************************************************
----------------------------------UCOSII学习笔记---------------------------------------------

2008年4月9日:
    使用ZLG提供的在KEIL下的UCOSII模板文件。
    在 项目设置页面内 的 asm 选项卡 中选择 no warning 后,依然存在两个告警,但是这两个告警不影响程序运行。
    具体原因未知。

    如果添加自己的中断处理函数,注意以下几点:
    1、target.c文件中需要在VICInit函数中 添加 中断初始化信息
    2、target.c内TargetInit函数中 添加 中断程序 初始化信息
    3、IRQ.s文件末 添加 中断句柄,目的是发生中断后能够找到对应的中断处理函数来处理
    4、中断服务程序的命名和写法都发生变化。
        以I2C为例
        void I2c_Exception(void)
        {
            OS_ENTER_CRITICAL();
            ----------
            VICVectAddr = 0;                    // 通知中断控制器中断结束 
            OS_EXIT_CRITICAL();
        }
        4.1、I2c_Exception名字之所以是这样,是因为在IRQ.s文件中句柄定义的时候是定义成这样的。
        如果这里修改,那么IRQ.s文件中也需要修改。
        4.2、中断程序内处理需要一条通知中断控制器中断结束的语句之外,还需要进入临界区和退出临界区代码。
    
2008年4月9日15:36:40:

    I2C0读写EEPROM代码添加完毕。
    ZLG提供的UCOSII下的IIC驱动程序不能指定子地址读写。
    经过修改之前提供的IIC接口函数,完成了UCOSII下的移植。

手机号13510773588:

    UART0驱动代码修改。
    实际使用发现有问题。不能直接使用。具体在UART0Getch函数。
    原函数如下:
    uint8 UART0Getch(void)
    {
        uint8 err;
        OS_ENTER_CRITICAL();

        while ((U0LSR & 0x00000001) == 0)
        {                                           // 没有收到数据 
            U0IER = U0IER | 0x01;                   // 允许接收中断 
            OSSemPend(Uart0Sem, 0, &err);           // 等待接收数据 
        }
        
        err = U0RBR;                                // 读取收到的数据 
        OS_EXIT_CRITICAL();
        return err;
    } 
    由于配套的UART0例程只有一个任务,所以,看不出有什么问题。
    但是,一旦两个任务同时运行,问题就来了。
    具体分析如下:
    由于该函数进去后就 进入临界段代码区。所以,运行OSSemPend后,程序进入等待状态,由于进入了临界区
    所以,程序等待后 内核不会 调度 其他高优先级的任务运行。
    从而导致程序在这里死等。
    为了解决该问题,修改了该函数。
    uint8 UART0Getch(void)
    {
        uint8 err;
        

        while ((U0LSR & 0x00000001) == 0)
        {                                           // 没有收到数据 
            U0IER = U0IER | 0x01;                   // 允许接收中断 
            OSSemPend(Uart0Sem, 0, &err);           // 等待接收数据 
        }
        OS_ENTER_CRITICAL();
        err = U0RBR;                                // 读取收到的数据 
        OS_EXIT_CRITICAL();
        return err;
    } 
    仅仅将 OS_ENTER_CRITICAL()函数换个地方即可。

2008年4月10日17:12:50:
    INT8U OSMboxPost (OS_EVENT *pevent, void *msg)
    发送邮箱消息后,会将  msg 指针传递给 邮箱 pevent 结构体内的一个 指针
    通过
    void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
    可以将该指针做为返回值弹出
    但是要注意类型转换。












*********************************************************************************************/



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -