?? readme.c
字號:
/********************************************************************************************
----------------------------------UCOSII學(xué)習(xí)筆記---------------------------------------------
2008年4月9日:
使用ZLG提供的在KEIL下的UCOSII模板文件。
在 項目設(shè)置頁面內(nèi) 的 asm 選項卡 中選擇 no warning 后,依然存在兩個告警,但是這兩個告警不影響程序運(yùn)行。
具體原因未知。
如果添加自己的中斷處理函數(shù),注意以下幾點:
1、target.c文件中需要在VICInit函數(shù)中 添加 中斷初始化信息
2、target.c內(nèi)TargetInit函數(shù)中 添加 中斷程序 初始化信息
3、IRQ.s文件末 添加 中斷句柄,目的是發(fā)生中斷后能夠找到對應(yīng)的中斷處理函數(shù)來處理
4、中斷服務(wù)程序的命名和寫法都發(fā)生變化。
以I2C為例
void I2c_Exception(void)
{
OS_ENTER_CRITICAL();
----------
VICVectAddr = 0; // 通知中斷控制器中斷結(jié)束
OS_EXIT_CRITICAL();
}
4.1、I2c_Exception名字之所以是這樣,是因為在IRQ.s文件中句柄定義的時候是定義成這樣的。
如果這里修改,那么IRQ.s文件中也需要修改。
4.2、中斷程序內(nèi)處理需要一條通知中斷控制器中斷結(jié)束的語句之外,還需要進(jìn)入臨界區(qū)和退出臨界區(qū)代碼。
2008年4月9日15:36:40:
I2C0讀寫EEPROM代碼添加完畢。
ZLG提供的UCOSII下的IIC驅(qū)動程序不能指定子地址讀寫。
經(jīng)過修改之前提供的IIC接口函數(shù),完成了UCOSII下的移植。
手機(jī)號13510773588:
UART0驅(qū)動代碼修改。
實際使用發(fā)現(xiàn)有問題。不能直接使用。具體在UART0Getch函數(shù)。
原函數(shù)如下:
uint8 UART0Getch(void)
{
uint8 err;
OS_ENTER_CRITICAL();
while ((U0LSR & 0x00000001) == 0)
{ // 沒有收到數(shù)據(jù)
U0IER = U0IER | 0x01; // 允許接收中斷
OSSemPend(Uart0Sem, 0, &err); // 等待接收數(shù)據(jù)
}
err = U0RBR; // 讀取收到的數(shù)據(jù)
OS_EXIT_CRITICAL();
return err;
}
由于配套的UART0例程只有一個任務(wù),所以,看不出有什么問題。
但是,一旦兩個任務(wù)同時運(yùn)行,問題就來了。
具體分析如下:
由于該函數(shù)進(jìn)去后就 進(jìn)入臨界段代碼區(qū)。所以,運(yùn)行OSSemPend后,程序進(jìn)入等待狀態(tài),由于進(jìn)入了臨界區(qū)
所以,程序等待后 內(nèi)核不會 調(diào)度 其他高優(yōu)先級的任務(wù)運(yùn)行。
從而導(dǎo)致程序在這里死等。
為了解決該問題,修改了該函數(shù)。
uint8 UART0Getch(void)
{
uint8 err;
while ((U0LSR & 0x00000001) == 0)
{ // 沒有收到數(shù)據(jù)
U0IER = U0IER | 0x01; // 允許接收中斷
OSSemPend(Uart0Sem, 0, &err); // 等待接收數(shù)據(jù)
}
OS_ENTER_CRITICAL();
err = U0RBR; // 讀取收到的數(shù)據(jù)
OS_EXIT_CRITICAL();
return err;
}
僅僅將 OS_ENTER_CRITICAL()函數(shù)換個地方即可。
2008年4月10日17:12:50:
INT8U OSMboxPost (OS_EVENT *pevent, void *msg)
發(fā)送郵箱消息后,會將 msg 指針傳遞給 郵箱 pevent 結(jié)構(gòu)體內(nèi)的一個 指針
通過
void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
可以將該指針做為返回值彈出
但是要注意類型轉(zhuǎn)換。
*********************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -