• CANopen——笔记


    1. c语言的typedef高级用法 typedef void (*post_sync_t)(CO_Data*);

    http://zhidao.baidu.com/link?url=_lDBGq_ukEjYngcgn4yVGnJum_wrrxfyUUTWRvFZ7WyXPm9Urm6shNAShHNByuYzCQT8C6Sq9hjHbgKoEqoSEK

    2. 弄清楚为什么要用TIM_IT_CC1,而不是用TIM_IT_UPDATE?

    http://www.dndev.com/cgi-bin/forum/topic.cgi?forum=2&topic=2263
    这个是Canfestival移植到STM32平台上的例程,TIM5是利用了STM32的Timer5来实现定时中断的功能,相当于提供一个时钟节拍,

    在中断服务程序中调用Canfestival协议栈的TimeDispatch()函数实现一些定时任务,STM32有很多定时器,这里只是用到Timer5而已。

    其他的单片机也有自己的定时器,在定时中断或定时线程(针对多线程)中调用TimeDispatch()就可以了。

    TimeDispatch()和CanDispatch()是Canfestival协议栈最重要的两个函数。

    Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

    Ret = writeNetworkDictCallBackAI(d, /* CO_Data* d*/
    nodeId, /* UNS8 nodeId*/
    0x1010, /* UNS16 index*/
    1, /* UNS8 subindex*/
    4, /* UNS8 count*/
    0, /* UNS8 dataType*/
    (void *)&data,/* void *data*/
    CheckSDOAndContinue,/* Callback*/
    0, /* no endianize*/
    0); /* no block mode */


    check_and_start_node
    start_node
    masterSendNMTstateChange
    canSend
    writeNetworkDictCallBackAI
    CheckSDOAndContinue
    start_and_seek_node
    start_node
    masterSendNMTstateChange
    canSend
    setState
    check_and_start_node
    init_consise_dcf
    read_consise_dcf_next_entry
    readNetworkDictCallbackAI
    CheckSDOAndContinue
    SaveNode


    write_consise_dcf_next_entry
    writeNetworkDictCallBackAI
    CheckSDOAndContinue
    _writeNetworkDict
    GetSDOClientFromNodeId



    read_consise_dcf_next_entry
    get_next_DCF_data
    readNetworkDictCallbackAI
    CheckSDOAndContinue

    emergencyInit
    RegisterSetODentryCallBack
    scanIndexOD

    switchCommunicationState
    StartOrStop


    sendEMCY
    canSend

    EMCY_setError
    sendEMCY

    EMCY_errorRecovered
    sendEMCY

    proceedEMCY

    OnHeartbeatProducerUpdate
    heartbeatStop
    heartbeatInit
    RegisterSetODentryCallBack
    scanIndexOD

    proceedNODE_GUARD
    canSend


    heartbeatInit

    masterSendNMTstateChange
    canSend

    masterSendNMTnodeguard
    canSend

    masterRequestNodeState
    masterSendNMTnodeguard
    canSend

    canDispatch
    proceedNMTstateChange
    setState
    getNodeId

    slaveSendBootUp //Transmit the boot-Up frame when the slave is moving from initialization state to pre_operational state.
    canSend


    NMT报文数据由2个字节组成,第0个字节是cs;第1个字节是节点ID;
    cs可取值如下:
    NMT_Start_Node
    NMT_Stop_Node
    NMT_Enter_PreOperational
    NMT_Reset_Node
    NMT_Reset_Comunication
    节点ID取值0~127之一;
    节点保护的ID是0x700;
    m.cob_id = 0x0000; /*(NMT) << 7*/
    m.rtr = NOT_A_REQUEST;
    m.len = 2;
    m.data[0] = cs;
    m.data[1] = Node_ID;

    TimeDispatch()和CanDispatch()函数。其中,Canfestival协议栈最重要的两个函数。

    Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。
    这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

    注:转载请注明出处http://www.cnblogs.com/zaishuiyifang006 人生如棋,我愿为卒,行动虽缓,可谁见我后退一步。
  • 相关阅读:
    Quora 用了哪些技术(转)
    Instagram的技术探索2(转)
    Sharding & IDs at Instagram(转)
    2010“架构师接龙”问答--杨卫华VS赵劼(转)
    架构师接龙 汇总(转)
    如何成为一名软件架构师(转)
    网站架构资料集(转)
    技术好重要吗?
    洞洞那么大-悲伤那么小
    教你玩转XSS漏洞
  • 原文地址:https://www.cnblogs.com/zaishuiyifang006/p/5341195.html
Copyright © 2020-2023  润新知