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.

[参考译文] CCS/CC2640:来自中断服务例程的信号量和数据队列。

Guru**** 2780845 points

Other Parts Discussed in Thread: CC2640, ADS1292

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/691334/ccs-cc2640-semaphore-and-data-queue-from-interrupt-service-routine

器件型号:CC2640
主题中讨论的其他器件: ADS1292

工具/软件:Code Composer Studio

我使用 cc2640通过 SPI 与 ADS1292通信。 ADS1292被编程为向 cc2640发送中断。 我修改 PROJECT_ZERO 工程以添加 SPI 通信和中断过程。 正确接收中断。 这是我的 ISR

静态空 adcCallbackFxn (PIN_Handle handle、PIN_ID pinId)

   //为消息分配内存。
   app_msg_t * pMsg = iCall_malloc (sizeof (app_msg_t)+ 1);

   if (pMsg!=空)
   {
      PIN_setOutputValue (ledPinHandle、Board_DIO21、0);
    pMsg->type = APP_MSG_ADC_DATA;

    //使用指向队列节点元素的指针对消息进行排队。
    queue_enqueue (hApplicationMsgQ、&pMsg->_elem);
    //告知应用程序有一条消息。
    Semaphore_post (SEM);
   }
   PIN_setOutputValue (ledPinHandle、Board_DIO21、1);

从示波器中、我可以看到中断每8ms 出现一次、但 pMsg 有时分配失败。 我的问题是、我是否每次都需要分配 pMsg? 它看起来不可靠。 我能否使用静态全局变量等其他方法与静态 void ProjectZero_taskFxn (UArg a0、UArg A1)进行通信?


谢谢。

Jin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我的问题是、从 ISR 通知任务的正确方法是什么? 没有数据会进入任务。 它仅通知任务读取 SPI 以获取数据。 对流层、应用程序消息队列或其他内容?
    谢谢。

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

    您可以通过多种良好的方法从 ISR 内部通知任务有哪些工作要做、您自己也提到了其中的一些工作。 但是、如果您使用 PROJECT_ZERO 主任务来启动 SPI 传输、则应遵循它们使用的约定(使用 iCall_malloc 和通过队列传递消息)。

    另一种方法是设置处理 SPI 等接口的第二个任务。 然后、您可以自由地通知此任务、但您认为合适。 在这种情况下、您还可以自由使用 SPI 阻塞模式(例如、如果您需要的话)、因为它只会阻止"接口任务"、而不是 PROJECT_ZERO 任务(保持应用的 BLE 部分处于活动状态)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    M-W、

    超级酷! 您是否有您可以指向我的示例或文档、以便我创建一个单独的任务来接收来自 ISR 的事件或信号量。 如果您有阻塞模式 SPI 示例、这也会很好。

    谢谢。

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

    您好、Jin、

    我想说、PROJECT_ZERO 通常是一个很好的项目、可以展示如何设置多个任务、因为它在启动时会创建多个任务、请查看*。createTask 函数以获取相关示例。 我还建议查看 BLE 用户指南、了解如何将新任务添加到项目以及其他有趣的内容。

    有关如何使用事件/信标/邮箱等的示例 我推荐 TI-RTOS 内核用户指南。 关于 SPI 驱动程序、SPICC26XXDMA.h 头文件应包含多个有关阻塞模式和回调模式的示例、供您查看。