[發明專利]一種實現CANopen主站的方法無效
| 申請號: | 200810056824.5 | 申請日: | 2008-01-25 |
| 公開(公告)號: | CN101222510A | 公開(公告)日: | 2008-07-16 |
| 發明(設計)人: | 徐喆;閆士珍;宋威;余春暄;段建民;張明杰 | 申請(專利權)人: | 北京工業大學 |
| 主分類號: | H04L29/06 | 分類號: | H04L29/06;H04L12/28 |
| 代理公司: | 北京思海天達知識產權代理有限公司 | 代理人: | 劉萍 |
| 地址: | 100022*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 實現 canopen 方法 | ||
1.一種實現CANopen主站的方法,其特征在于,包括以下步驟:
1)主站開始運行時,首先初始化全局變量,對本協議棧中需要的所有全局變量進行初始化;
2)初始化系統時間,該系統時間是通過定時器獲得的微秒級時間;
3)初始化基本任務,包括給它們分配存儲空間,賦初始值;
4)初始化對象字典,建立基本的對象字典項;
5)添加節點,向主站的對象字典中添加從節點的信息;
6)建立發送PDO,在對象字典中添加發送PDO對應的所有信息;
7)建立接收PDO,在對象字典中添加接收PDO的所有信息;
8)啟動網絡;
9)初始化操作系統;
10)創建線程,這里只創建一個開始線程;
11)啟動操作系統,操作系統開始調度線程:第一個被操作系統調度的線程是開始線程,在這個線程中完成的工作包括硬件的初始化、調度機線程的創建和寫報文線程的創建,該線程運行一次之后就將自己銷毀;之后寫報文線程被調度運行,但是此時沒有報文要發送,所以該線程退出運行狀態并觸發調度機線程;調度機線程完成CANopen內部各任務的調度;在沒有更高優先級線程處于就緒態或者出現中斷時該線程將會一直處于循環運行狀態;
當調度機中的任務需要發送報文時觸發寫報文發送線程,該線程將需要發送的報文寫進CAN控制器相應的寄存器中并將其發送到CAN總線上;當CAN控制器收到報文時將產生報文接收中斷,讀報文中斷服務程序開始執行,將報文從CAN控制器中讀出,當調度機線程再次獲運行時將調度其管理的相應任務處理該報文。
2.根據權利要求1所述的一種實現CANopen主站的方法,其特征在于,采用散列表的方式構建對象字典:
使用一個數組來存儲對象,設計一個哈希函數,使得每個對象的索引和子索引都與數組的一個下標相對應;數組定義如下:
ODIndex?iOD[HS_index_range]
其中,HS_index_range為散列地址的范圍常量;
對象的索引和子索引通過哈希函數轉化為散列地址;采用如下哈希函數:
HS_index=mod(((index*ran_num)>>shift_num+sub_index),HS_index_range)
式中,HS_index為散列地址,mod()為取模運算,index為對象索引,ran_num為隨即因子,shift_num為位移因子,sub_index為對象子索引,HS_index_range為散列地址的范圍常量;
當出現對于不同的對象,卻計算出了相同的函數值,這樣就產生了沖突,即從index和sub_index到HS_index的映射會重疊;采用鏈地址法處理沖突,將映射到同一個散列地址處多于一個的對象組成鏈表,即形成該散列地址對應的溢出表。
3.根據權利要求1所述的一種實現CANopen主站的方法,其特征在于,調度機線程具體為:調度機通過任務等待隊列和任務運行隊列對CANopen的任務進行管理,有報文到時,CAN報文接收任務運行,將接收到的報文放入PDO、SDO、NMT報文接收隊列,并觸發PDO報文分發或SDO報文分發或NMT報文分發任務;PDO報文分發、SDO報文分發、NMT報文分發任務將觸發它們對應的處理任務:PDO處理、SDO處理和NMT處理任務;如果在PDO處理、SDO處理和NMT處理任務中有報文要發送或者同步報文生成任務正在運行執行,將會觸發CAN報文發送任務。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京工業大學,未經北京工業大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200810056824.5/1.html,轉載請聲明來源鉆瓜專利網。





