zoukankan      html  css  js  c++  java
  • 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 人生如棋,我愿为卒,行动虽缓,可谁见我后退一步。
  • 相关阅读:
    Java关键字static、final使用小结
    JAVA的核心概念:接口(interface)
    Oracle数据泵导入导出数据,建立表空
    web.xml中load-on-startup的作用
    UIApplication 用法解析
    ios-Ineligible Devices 不被识别的设备
    Xcode真机测试could not find developer disk image解决方法
    异常捕获拒绝闪退 让应用从容的崩溃UncaughtExceptionHandler
    Xcode6之后创建Pch预编译文件
    MBProgressHUD的基本使用
  • 原文地址:https://www.cnblogs.com/zaishuiyifang006/p/5341195.html
Copyright © 2011-2022 走看看