亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 請問,有人在學(xué)習(xí)研究RTOS-uC/OS-II嗎? [打印本頁]

作者: kingink1983    時間: 2008-09-14 18:22
標(biāo)題: 請問,有人在學(xué)習(xí)研究RTOS-uC/OS-II嗎?
作為開源的實時嵌入式OS,uC/OS-II在嵌入式應(yīng)用領(lǐng)域挺多的?墒俏野l(fā)現(xiàn)嵌入式論壇里沒有人提及這個系統(tǒng),不知道有人在學(xué)習(xí)這個沒?如果有,大家可以交流一下l

另外,有個小建議:嵌入式開發(fā)這個版塊能不能根據(jù)嵌入式OS進行細化,畢竟嵌入式OS的主流還是不止一類的。

順便附上一個uC/OS-II的官方網(wǎng)站:http://www.micrium.com/
作者: dreamice    時間: 2008-09-14 18:36
呵呵,這是我學(xué)習(xí)OS的入門操作系統(tǒng),基本上所有代碼都看過,希望一起交流
作者: kingink1983    時間: 2008-09-14 23:44
樓上的哥們,你把這個系統(tǒng)的那些底層關(guān)系都縷順了沒有,很多東西看得我很頭大呀
作者: dreamice    時間: 2008-09-15 09:04
原帖由 kingink1983 于 2008-9-14 23:44 發(fā)表
樓上的哥們,你把這個系統(tǒng)的那些底層關(guān)系都縷順了沒有,很多東西看得我很頭大呀


呵呵,我也說不好,不過你沒搞明白的可以貼出來,這個OS我差不多搞了一年,短小精干的OS,還是挺不錯的。
作者: kingink1983    時間: 2008-09-16 11:07
原帖由 dreamice 于 2008-9-14 18:36 發(fā)表
呵呵,這是我學(xué)習(xí)OS的入門操作系統(tǒng),基本上所有代碼都看過,希望一起交流

INT8U  const  OSUnMapTbl[] = {
    0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x00 to 0x0F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x10 to 0x1F                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x20 to 0x2F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x30 to 0x3F                             */
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x40 to 0x4F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x50 to 0x5F                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x60 to 0x6F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x70 to 0x7F                             */
    7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x80 to 0x8F                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0x90 to 0x9F                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xA0 to 0xAF                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xB0 to 0xBF                             */
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xC0 to 0xCF                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xD0 to 0xDF                             */
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,       /* 0xE0 to 0xEF                             */
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0        /* 0xF0 to 0xFF                             */
};

能幫忙告訴這個表示如何建立的嘛? 作者也沒說他的構(gòu)造思路

另外:在os——mem.c文件的OSMemCreate(……)函數(shù)中:
OS_MEM  *OSMemCreate (void *addr, INT32U nblks, INT32U blksize, INT8U *err)
{
#if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
    OS_CPU_SR  cpu_sr;
#endif   
    OS_MEM    *pmem;
    INT8U     *pblk;
    void     **plink;
    INT32U     i;


#if OS_ARG_CHK_EN > 0
    if (addr == (void *)0) {                          /* Must pass a valid address for the memory part. */
        *err = OS_MEM_INVALID_ADDR;
        return ((OS_MEM *)0);
    }
    if (nblks < 2) {                                  /* Must have at least 2 blocks per partition      */
        *err = OS_MEM_INVALID_BLKS;
        return ((OS_MEM *)0);
    }
    if (blksize < sizeof(void *)) {                   /* Must contain space for at least a pointer      */
        *err = OS_MEM_INVALID_SIZE;
        return ((OS_MEM *)0);
    }
#endif
    OS_ENTER_CRITICAL();
    pmem = OSMemFreeList;                             /* Get next free memory partition                */
    if (OSMemFreeList != (OS_MEM *)0) {               /* See if pool of free partitions was empty      */
        OSMemFreeList = (OS_MEM *)OSMemFreeList->OSMemFreeList;
    }
    OS_EXIT_CRITICAL();
    if (pmem == (OS_MEM *)0) {                        /* See if we have a memory partition             */
        *err = OS_MEM_INVALID_PART;
        return ((OS_MEM *)0);
    }
    plink = (void **)addr;                            /* Create linked list of free memory blocks      */
    pblk  = (INT8U *)addr + blksize;
    for (i = 0; i < (nblks - 1); i++) {
        *plink = (void *)pblk;
        plink  = (void **)pblk;
        pblk   = pblk + blksize;
    }
    *plink              = (void *)0;                  /* Last memory block points to NULL              */
    pmem->OSMemAddr     = addr;                       /* Store start address of memory partition       */
    pmem->OSMemFreeList = addr;                       /* Initialize pointer to pool of free blocks     */
    pmem->OSMemNFree    = nblks;                      /* Store number of free blocks in MCB            */
    pmem->OSMemNBlks    = nblks;
    pmem->OSMemBlkSize  = blksize;                    /* Store block size of each memory blocks        */
    *err                = OS_NO_ERR;
    return (pmem);
}
/*$PAGE*/

其中的pblk  = (INT8U *)addr + blksize;這個轉(zhuǎn)化,不會造成地址截斷嘛,畢竟addr所占的空間不止一個字節(jié)吧


[ 本帖最后由 kingink1983 于 2008-9-16 11:08 編輯 ]
作者: nicozhou    時間: 2008-09-16 12:38
osek的干活。。。。。。
作者: zhlyp    時間: 2008-09-16 13:23
原帖由 kingink1983 于 2008-9-14 18:22 發(fā)表
作為開源的實時嵌入式OS,uC/OS-II在嵌入式應(yīng)用領(lǐng)域挺多的?墒俏野l(fā)現(xiàn)嵌入式論壇里沒有人提及這個系統(tǒng),不知道有人在學(xué)習(xí)這個沒?如果有,大家可以交流一下l

另外,有個小建議:嵌入式開發(fā)這個版塊能不能根 ...


哈哈,
你所在的板塊是
首頁 &raquo; CU論壇 &raquo; Linux &raquo; 匯總貼列表 &raquo; 嵌入式開發(fā) &raquo;
作者: eveson    時間: 2008-09-16 13:34
我覺得應(yīng)該開個實時嵌入式操作系統(tǒng)的板塊
作者: dreamice    時間: 2008-09-16 14:01
標(biāo)題: 回復(fù) #5 kingink1983 的帖子
我簡單說一下關(guān)于這個表的作用及構(gòu)造算法(一次面試中被問到,慚愧沒答出來 )。
作用:找出優(yōu)先級最低位為1的位置。大家知道,優(yōu)先級越高,其數(shù)值越小,所以,在這里也即找出優(yōu)先級最高的位置。
算法:
(1)對于一個8位數(shù),如果是奇數(shù),那么最低位必為1,如00000001(十進制1),00000101(十進制5)……,所以,我們只需要計算偶數(shù)位即可;
(2)算出0——256中的偶數(shù)最低位為1的位置;(該算法也主要是這么一個實現(xiàn)了)
我把這個算法的c代碼貼在下面:

  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int OSUnMapTbl[256];
  5.         int i, j, k;
  6.         for(i = 0; i < 256; i ++) // initialize var
  7.         OSUnMapTbl[i]=0;
  8.         for(i = 2; i < 256; i += 2) // only calculate even numbers
  9.         {
  10.                 j = i;
  11.                 k = 0;
  12.                 do
  13.                 {
  14.                         j = j >> 1;
  15.                         k++;
  16.                 }while(j % 2 == 0);
  17.                 OSUnMapTbl[i] = k;
  18.         }
  19.         for(i = 1; i < 257; i ++) // print the result
  20.         {
  21.                 printf("%d,", OSUnMapTbl[i-1]);
  22.                 if(i % 16 == 0)
  23.                         printf("\n");
  24.         }
  25.         getchar(); // pause
  26.         return 0;
  27. }
復(fù)制代碼

作者: dreamice    時間: 2008-09-16 14:07
其中的pblk  = (INT8U *)addr + blksize;這個轉(zhuǎn)化,不會造成地址截斷嘛,畢竟addr所占的空間不止一個字節(jié)吧

我不知道你所說的地址截斷是什么意思,這里把addr轉(zhuǎn)換成無符號字符型的,然后加上blksize,意即pblk指向了addr+blksize的位置,addr只是一個指針,況且指針在不同的系統(tǒng)中所占的地址是不確定的32位系統(tǒng)是4個字節(jié),有些8位系統(tǒng)是三個字節(jié)。所以,我覺得和這個所謂的截斷沒有什么關(guān)系。
作者: dreamice    時間: 2008-09-16 14:09
原帖由 eveson 于 2008-9-16 13:34 發(fā)表
我覺得應(yīng)該開個實時嵌入式操作系統(tǒng)的板塊


我也比較贊成!
作者: kingink1983    時間: 2008-09-16 14:23
原帖由 dreamice 于 2008-9-16 14:01 發(fā)表
我簡單說一下關(guān)于這個表的作用及構(gòu)造算法(一次面試中被問到,慚愧沒答出來 )。
作用:找出優(yōu)先級最低位為1的位置。大家知道,優(yōu)先級越高,其數(shù)值越小,所以,在這里也即找出優(yōu)先級最高的位置。
算法:
( ...

解釋的很詳盡,謝謝!
作者: dreamice    時間: 2008-09-16 14:30
原帖由 kingink1983 于 2008-9-16 14:23 發(fā)表

解釋的很詳盡,謝謝!


不知兄弟為何研究這個操作系統(tǒng)?純屬學(xué)習(xí)還是工作項目?如果有不錯的OS基礎(chǔ),這個操作系統(tǒng)兩個月完全可以搞定了,呵呵。我覺得任務(wù)調(diào)度,內(nèi)核一些同步與通信機制,內(nèi)存管理(這個比較弱一些),以及2.8內(nèi)核以后添加的定時器機制,都可以從源代碼深入理解一下其實現(xiàn)。結(jié)合邵貝貝譯的那本書,好好看看,收獲一定不小的。
作者: rodgerluo    時間: 2008-09-16 15:26
ucos的內(nèi)存管理可以采用靜態(tài)的方法來分配。ucos還有一個功能是可以統(tǒng)計內(nèi)存的用量,通過調(diào)試能夠獲得內(nèi)存的用量。高版本的ucos能夠建立達到256級的任務(wù)。
這里是Linux論壇,不知道哪里有ucos論壇?
作者: kingink1983    時間: 2008-09-16 15:58
原帖由 dreamice 于 2008-9-16 14:30 發(fā)表


不知兄弟為何研究這個操作系統(tǒng)?純屬學(xué)習(xí)還是工作項目?如果有不錯的OS基礎(chǔ),這個操作系統(tǒng)兩個月完全可以搞定了,呵呵。我覺得任務(wù)調(diào)度,內(nèi)核一些同步與通信機制,內(nèi)存管理(這個比較弱一些),以及2.8內(nèi)核 ...

學(xué)習(xí)其原理,掌握實現(xiàn)方法。以備將來用的著。慚愧的說操作系統(tǒng)原理我原來也學(xué)過,不過當(dāng)時就是聽聽一些理論,完全不知所云,學(xué)的時間長了,很多東西原來不但沒消化,現(xiàn)在還望了不少,
現(xiàn)在學(xué)習(xí)ucos主要是學(xué)習(xí)它的原理、看見你說“有不錯的OS基礎(chǔ),這個操作系統(tǒng)兩個月完全可以搞定”,覺得至少我是搞不定 ,不說別的了系統(tǒng)級的了,就那些指針強制類型轉(zhuǎn)換,特別是二級的,我理解就挺麻煩的了,差距有點大,抓緊學(xué)習(xí) 。

[ 本帖最后由 kingink1983 于 2008-9-16 16:03 編輯 ]
作者: dreamice    時間: 2008-09-16 16:12
原帖由 kingink1983 于 2008-9-16 15:58 發(fā)表

學(xué)習(xí)其原理,掌握實現(xiàn)方法。以備將來用的著。慚愧的說操作系統(tǒng)原理我原來也學(xué)過,不過當(dāng)時就是聽聽一些理論,完全不知所云,學(xué)的時間長了,很多東西原來不但沒消化,現(xiàn)在還望了不少,
現(xiàn)在學(xué)習(xí)ucos主要是學(xué)習(xí) ...


指針問題,是C語言的基礎(chǔ)問題。
相信通過這個os的學(xué)習(xí),對c語言能力會有很大提升的,畢竟因為其短小精干,所以可以透徹的去理解它。
作者: fazi    時間: 2008-09-19 12:59
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: jkiy2006    時間: 2008-09-20 11:06
標(biāo)題: 回復(fù) #9 dreamice 的帖子
九樓的算法很好。
我對 OSUnMapTbl[] 的理解是這樣的,OSUnMapTbl[x] 的返回值 就是查出數(shù)值x  從右到左第一個 ‘1’ 所在的位數(shù)。比如 (000000001)b 就是第 0 位 (10000000)b 就是第 7 位
所以 OSUnMapTbl[(000000001)b ] = 0; OSUnMapTbl[(10000000)b ] = 7;
特別的 (00000000)b 沒有一,所以就約定 OSUnMapTbl[(00000000)b ] = 0; (我是這樣理解的)
有什么不對的地方請指正。




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2