This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS:说明资源路径位置类型#102"params"已在当前范围内声明

Guru**** 2611385 points
Other Parts Discussed in Thread: CC1350

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582477/rtos-description-resource-path-location-type-102-params-has-already-been-declared-in-the-current-scope

Thread 中讨论的其他器件:CC1350SYSBIOS

工具/软件:TI-RTOS

将"ADC 单通道"程序与"rfWsnDmNode"程序集成时遇到问题。 我的任务是从一个 CC1350板发送 ADC 值并将其显示在另一个 CC1350板上。

/*初始化显示并尝试打开 UART 和 LCD 显示类型。 *
Display_Params 参数;
Display_Params_init (&params);
params.lineClearMode = display_clear_both;

错误:  

说明资源路径位置类型
当前范围 DmNodeTask.c /rfWsnDmNode_Project1_CC1350_LAUNCHXL_TI_CC1350F128行270 C/C++ Problem 中已声明#102_"params"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Jagannath、
    您是否在 DmNodeTask.c 中的同一作用域中的多个位置声明了变量'params'? 您可以根据需要附加文件。
    此致、
    Janet
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Janet、您好!
    是的。 我已在 DmNodeTask.c 中同一作用域中的另一个位置声明变量'params'。
    我想在多个通道中获取 ADC 值。 为此、我将"ADC 单通道"程序与"rfWsnDmNode"程序集成在一起。
    我不知道如何为 ADC 和 Display 函数声明变量"params"。 我可以使用其他变量而不是"params"吗?

    在这里,我要附加 DmNodeTask.c 的文件。

    /***** 包括***** /
    #include
    #include
    #include

    #include

    #include

    #include
    #include
    #include
    #include
    #include

    /*驱动程序头文件*/
    #include
    #IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
    #include
    #include
    #endif

    #include
    #include

    /*板头文件*/
    #include "Board.h"

    #include "SceAdc.h"

    #ifdef use_BIM
    #include "Bim/BimFactoryReset.h"
    #endif


    /***** 定义了***** /
    #define node_task_stack_size 1024
    #define node_task_priority 3.

    #define node_event_all 0xFFFFFFFF
    #define node_event_new_adc_value (uint32_t)(1 << 0)
    #define NODE_EVENT_UPDATE_LCD (uint32_t)(1 << 1)

    #ifdef use_BIM
    #define NODE_EVENT_FACTORY_RESET (uint32_t)(1 << 2)
    #endif

    /* 0xFF0的更改掩码表示低4位的更改不会触发唤醒。 *
    #define NODE_ADCTASK_CHANGE_MASK 0xFF0

    /*最短慢报告间隔为50 (以 samplingTime 为单位)*/
    #define NODE_ADCTASK_REPORTINTERVAL_SLOT 50
    对于30s,/*最短快速报告间隔为1s (以 samplingTime 为单位)*/
    #define NODE_ADCTASK_REPORTINTERVAL_FAST 1
    #define NODE_ADCTASK_REPORTINTERVAL_FAST_DURATION_MS 30000

    #ifdef use_BIM
    /* BLE 负载按钮检查计时器-检查按钮100ms、持续5秒*/
    #define NODE_BLE_BOOTLODER_button_check_timer_MS 100
    #define NODE_BLE_BOOTLODER_button_check_duration _ S 6.
    #endif


    /***** 变量声明***** /
    静态 Task_Params nodeTaskParams;
    Task_StructnodeTask;//不是静态的,因此可以在 ROV 中看到*/
    //static uint8_t nodeTaskStack[node_task_stack_size];
    char nodeTaskStack[node_task_stack_size];
    Event_StructnodeEvent;//不是静态的,因此可以在 ROV 中看到*/
    静态 Event_Handle nodeEventHandle;
    静态 uint16_t latestAdcValue;

    /*快速报告超时的时钟*/
    Clock_StructfastReportTimeoutClock; /*不是静态的、因此您可以在 ROV 中看到*/
    静态时钟句柄 fastReportTimeoutClockHandle;

    #ifdef use_BIM
    /*快速报告超时的时钟*/
    Clock_StructbleBootloadBtnCheckClock; /*不是静态的、因此您可以在 ROV 中看到*/
    静态时钟处理 bleBootloadBtnCheckClockHandle;
    #endif

    /*引脚驱动器手柄*/
    静态 PIN_Handle 按钮 PinHandle;
    pin_handle ledPinHandle;

    /* PIN_Config 表的全局存储器*/
    静态 PIN_STATE 按钮 PinState;
    静态 PIN_STATE ledPinState;

    /*显示驱动程序句柄*/
    静态 Display_Handle hDisplayLcd;
    静态 Display_Handle hDisplaySerial;

    静态 Node_AdertiserType 广播类型= Node_AdertiserMsUrl;

    /*启用 LCD 使用的3.3V 电源域*/
    PIN_Config pinTable[]={
    NODE_SUB1_ACTIVE_LED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    NODE_BLE_ACTIVE_LED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    Board_DIO1_RFSW | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    Board_DIO30_SWPWR | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、
    PIN_TERMINATE
    };

    /*
    *应用按钮引脚配置表:
    *-按钮中断配置为在下降沿触发。
    *
    PIN_Config buttonPinTable[]={
    BOARD_BUTTON0 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE、
    Board_Button1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_NEGEDGE、
    PIN_TERMINATE
    };

    静态 uint8_t nodeAddress = 0;

    /***** 原型***** /
    静态空 nodeTaskFunction (UArg0、UArgarg1);
    静态 void updateLcd (void);
    void fastReportTimeoutCallback (UArg0);
    void adcCallback (uint16_t adcValue);
    void buttonCallback (PIN_Handle handle、PIN_ID pinId);

    #ifdef use_BIM
    void blebtnCheckTimerCallback (UArg0);
    #endif

    /***** 函数定义***** /
    空 NodeTask_init (空)


    /*创建用于状态更改的内部事件*/
    EVENT_PARAMS 事件参数;
    EVENT_PARAMS_INIT (&eventParam);
    Event_construct(nodeEvent,&eventParam);
    nodeEventHandle = Event_Handle (nodeEvent);

    /*创建用于快速报告超时的时钟对象*/
    Clock_Params clkParams;
    clkParams.period = 0;
    clkParams.startFlag = false;
    Clock_construction (&fastReportTimeoutClock、fastReportTimeoutCallback、1、&clkParams);
    fastReportTimeoutClockHandle = Clock_handle (&fastReportTimeoutClock);

    #ifdef use_BIM
    /*创建用于执行引导加载按钮检查的时钟对象*/
    Clock_con构 图(&bleBootloadBtnCheckClock、bleBtnCheckTimerCallback、1、&clkParams);
    bleBootloadBtnCheckClockHandle = Clock_Handle (&bleBootloadBtnCheckClock);
    #endif

    Board_initadc();
    /*创建节点任务*/
    Task_Params_init (nodeTaskParams);
    nodeTaskParams.STACKSIZE = node_task_stack_size;
    nodeTaskParams.priority = node_task_priority;
    nodeTaskParams.stack = nodeTaskStack;
    Task_construct(nodeTask,(Task_Functr )nodeTaskFunction,nodeTaskParams,NULL );

    /*
    *在本示例中、CC2650DK_7ID 和 CC1310DK_7xD 测量环境光传感器。
    *默认情况下不加电、以避免在其他示例中出现高电流消耗。
    *下面的代码打开传感器的电源。
    *
    #IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
    PIN_STATE 引脚状态;

    PIN_Config AlsPinTable[]=

    Board_ALS_PWR | PIN_GPIO_OUTPUT _EN | PIN_GPIO_HIGH | PIN_PushPull、//打开 ALS 电源*/
    PIN_TERMINATE /*终止列表*/
    };

    /*打开环境光传感器的电源*/
    PIN_OPEN (&pinState、AlsPinTable);
    #endif

    system_printf ("启动 ADC 单通道示例\n 系统提供程序是"
    "设为 SysMin。 停止目标以查看 ROV 中的任何 SysMin 内容。\n");

    /* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
    system_flush();

    // BIOS_start();

    // 返回(0);



    静态空 nodeTaskFunction (UARg arg0、UARg arg1)

    uint16_t 一;
    ADC_Handle ADC;
    ADC_Params 参数;
    ADC_Params 参数;
    int_fast16_t res;

    ADC_PARAMS_INIT (params);
    ADC_Params_init (&param);
    ADC = ADC_open (Board_ADC1、params);
    ADC = ADC_open (Board_ADC1、&param);

    if (ADC == NULL){
    System_abort ("初始化 ADC 通道1\n"\n 时出错);

    否则{
    system_printf ("ADC 通道1已初始化\n"\});


    while (1){
    RES = ADC_convert (ADC、&latestAdcValue);

    if (res == ADC_STATUS_SUCCESS){
    system_printf ("ADC 通道1转换结果(%d):%d\n"、i、
    latestAdcValue);

    否则{
    system_printf ("ADC 通道1转换失败(%d)\n"、i);


    system_flush();


    ADC_Close (ADC);

    /*初始化显示并尝试打开 UART 和 LCD 显示类型。 *
    Display_Params 参数;
    Display_Params_init (&params);
    params.lineClearMode = display_clear_both;

    /*打开可用的 LCD 显示屏和 UART 显示屏。
    *打开的呼叫是否成功取决于中存在的内容
    * Display_config[]板级配置文件数组。
    *
    *请注意、对于与 SHARP96x96结合的 SensorTag 评估板
    *监视 DevPack、与 UART 存在引脚冲突、因此必须存在引脚冲突
    不包括*、默认情况下首选 UART。 以显示在 Watch 上
    * DevPack、添加预编译器定义 Board_display_exclude_UART。
    *
    hDisplayLcd = Display_open (Display_Type_LCD、params);
    hDisplaySerial = Display_open (Display_Type_UART、params);

    /*检查是否找到所选显示类型并成功打开*/
    IF (hDisplaySerial)

    Display_print0 (hDisplaySerial、0、0、"正在等待 SCE ADC 读数...");


    /*检查是否找到所选显示类型并成功打开*/
    if (hDisplayLcd)

    Display_print0 (hDisplayLcd、0、0、"正在等待 ADC...");


    /*打开 LED 引脚*/
    ledPinHandle = PIN_OPEN (&ledPinState、pinTable);
    IF (!ledPinHandle)

    System_abort ("初始化板3.3V 域引脚时出错\n");


    /*用1s 采样周期启动 SCE ADC 任务并对 ADC 值的变化作出反应。 *
    SceAdc_init (0x00010000、NODE_ADCTASK_REPORTINTERVAL_FAST、NODE_ADCTASK_CHANGE_MASK);
    sceAdc_registerAdcCallback (adcCallback);
    sceAdc_start();

    /*快速报告超时的设置超时*/
    Clock_setTimeout (fastReportTimeoutClockHandle、
    NODE_ADCTASK_REPORTINTERVAL_FAST_DEURIATION_MS * 1000 / Clock_tickPeriod);

    /*启动快速报告和超时*/
    Clock_start (fastReportTimeoutClockHandle);

    #ifdef use_BIM
    /*用于执行 ble bootload 按钮检查的设置计时器*/
    Clock_setTimeout (bleBootloadBtnCheckClockHandle、
    NODE_BLE_BOOTLODER_BUTTON_CHECK_TIMER_MS * 1000 / Clock_tickPeriod);
    #endif

    buttonPinHandle = PIN_OPEN (buttonPinState、buttonPinTable);
    if (!buttonPinHandle)

    System_abort ("初始化按钮引脚时出错\n");


    /*设置按钮引脚的回调*/
    if (PIN_registerIntCb (buttonPinHandle、&buttonCallback)!= 0)

    system_abort ("注册按钮回调函数时出错");


    //启用到2.4G 天线的射频开关电源
    PIN_setOutputValue (ledPinHandle、Board_DIO30_SWPWR、1);

    while (1)

    /*等待事件*/
    uint32_t 事件= Event_pend (nodeEventHandle、0、node_event_all、BIOS_wait_forever);

    /*如果是新的 ADC 值,则发送此数据*/
    if (event & node_event_new_adc_value){
    /*切换活动 LED */
    PIN_setOutputValue (ledPinHandle、NODE_SUB1_ACTIVE_LED、!PIN_getOutputValue (NODE_SUB1_ACTIVE_LED));

    /*向集中器发送 ADC 值*/
    NodeRadioTask_sendAdcData (latestAdcValue);

    /*更新显示*/
    updateLcd();

    /*如果是新的 ADC 值,则发送此数据*/
    if (event & node_event_update_LCD){
    /*更新显示*/
    updateLcd();

    #ifdef use_BIM
    if (event & node_event_factory_reset){

    display_control (hDisplayLcd、display_cmd_transport _close、NULL);

    BimFactoryReset_applyFactoryImage();

    /* BIM 恢复出厂设置失败,重新启用 LCD */
    display_control (hDisplayLcd、display_cmd_transport _open、NULL);

    /*重新启用中断以检测按钮释放。 *
    PIN_setConfig (buttonPinHandle、PIN_BM_IRQ、Board_BUTTON0 | PIN_IRQ_NEGEDGE);
    PIN_setConfig (buttonPinHandle、PIN_BM_IRQ、Board_Button1 | PIN_IRQ_NEGEDGE);

    #endif




    静态空 updateLcd (空)

    advchar Mode[16]={0};

    /*获取节点地址(如果尚未完成)*/
    if (nodeAddress ==0)

    nodeAddress = nodeRadioTask_getNodeAddr ();


    /*打印到 LCD */
    display_clear (hDisplayLcd);
    Display_Print1 (hDisplayLcd、0、0、"nodeid:0x%02x"、nodeAddress);
    Display_Print1 (hDisplayLcd、1、0、"ADC:%04d"、latestAdcValue);

    /*打印到 UART 清除屏幕、将 cuser 置于终端的开始位置并打印标头*/
    Display_Print1 (hDisplaySerial、0、0、"\033[2J \033[0;0HNode ID:0x%02x"、nodeAddress);
    Display_Print1 (hDisplaySerial、0、0、"节点 ADC 读数:%04d"、latestAdcValue);

    if (advertisementType = Node_AdertiserMsUrl)

    strncpy (advMode、"BLE MS + URL"、12);

    否则、如果(advertisementType = Node_AdertiserM)

    strncpy (advMode、"BLE MS"、6);

    否则、如果(advertisementType = Node_AdertiserUrl)

    strncpy (advMode、"Eddystone URL"、13);

    否则、如果(advertisementType = Node_AdertiserUid)

    strncpy (advMode、"Eddystone UID"、13);

    其他

    strncpy (advMode、"None"、4);


    /*打印到 LCD */
    Display_print0 (hDisplayLcd、2、0、"Adv Mode:");
    Display_Print1 (hDisplayLcd、3、0、"%s"、advMode);
    /*打印到 UART */
    Display_Print1 (hDisplaySerial、0、0、"广播器模式:%s"、advMode);



    void adcCallback (uint16_t adcValue)

    /*保存最新值*/
    latestAdcValue = adcValue;

    /*事件后*/
    EVENT_POST (nodeEventHandle、NODE_EVENT_NEW _ADC_VALUE);


    /*
    *==== buttonCallback ====
    *引脚表中配置的引脚中断回调函数板按钮。
    *
    void buttonCallback (PIN_Handle handle、PIN_ID pinId)

    /*去抖逻辑,仅在按钮仍被按下(低电平)时切换*/
    CPUdelay (8000*50);


    if ((PIN_getInputValue (Board_BUTTON0)=0)&(PIN_getInputValue (Board_Button1)=0)){
    #ifdef use_BIM
    //停止按钮中断,同时检查启动加载按钮是否保持
    PIN_setConfig (buttonPinHandle、PIN_BM_IRQ、Board_BUTTON0 | PIN_IRQ_DIS);
    PIN_setConfig (buttonPinHandle、PIN_BM_IRQ、Board_Button1 | PIN_IRQ_DIS);
    //启动 BLE 引导加载程序计时器以检查引脚
    Clock_start (bleBootloadBtnCheckClockHandle);
    #endif

    否则、如果(PIN_getInputValue (Board_BUTTON0)=0)

    //启动快速报告和超时
    SceAdc_setReportInterval (NODE_ADCTASK_REPORTINTERVAL_FAST、NODE_ADCTASK_CHANGE_MASK);
    Clock_start (fastReportTimeoutClockHandle);

    否则、如果(PIN_getInputValue (Board_Button1)=0)

    //在 URL、uid 和无之间循环
    广播类型++;
    if (advertisementType = Node_AdertiserTypeEnd)

    advertisementType = Node_AdertiserNone;


    /*更新显示*/
    EVENT_POST (nodeEventHandle、NODE_EVENT_UPDATE_LCD);

    //设置广播类型
    nodeRadioTask_setAdvertiserType (广播类型);

    //启动快速报告和超时
    SceAdc_setReportInterval (NODE_ADCTASK_REPORTINTERVAL_FAST、NODE_ADCTASK_CHANGE_MASK);
    Clock_start (fastReportTimeoutClockHandle);



    空 fastReportTimeoutCallback (UArg0)

    //停止快速报告
    SceAdc_setReportInterval (node_ADCTASK_REPORTINTERVAL_SLOT、node_ADCTASK_CHANGE_MASK);


    #ifdef use_BIM
    空 bleBtnCheckTimerCallback (UARg arg0)

    静态 uint32_t btnHoldCnt = 0;

    如果((PIN_getInputValue (Board_BUTTON0)=0)&(PIN_getInputValue (Board_Button1)=0))

    如果((++btnHoldCnt * node_BLE_BOOTLODER_button_check_timer_MS)>
    (NODE_BLE_BOOTLODER_BUTTON_CHECK_DURAY_S*1000)

    EVENT_POST (nodeEventHandle、NODE_EVENT_FACTORY_RESET);
    btnHoldCnt = 0;

    其他

    Clock_start (bleBootloadBtnCheckClockHandle);


    其他

    btnHoldCnt = 0;
    /*重新启用中断以检测按钮释放。 *
    PIN_setConfig (buttonPinHandle、PIN_BM_IRQ、Board_BUTTON0 | PIN_IRQ_NEGEDGE);
    PIN_setConfig (buttonPinHandle、PIN_BM_IRQ、Board_Button1 | PIN_IRQ_NEGEDGE);


    #endif //use_BIM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Jagannath、
    为什么不为 ADC 参数指定一个不同的名称、例如"adcParams"? 顺便说一下、当代码作为文件附加时、读取代码比复制/粘贴到窗口更容易。
    此致、
    Janet