基于TI_BLE协议栈_ZStack协议栈解析

发布时间:2023-10-24  

基于STM32的虚拟多线程,可以很好的用于裸机程序中,用于模拟小型操作系统的多线程概念。本实例参考TI_BLE协议栈_ZStack协议栈。

基于TI_BLE协议栈_ZStack协议栈解析


#include “Hal_Led/Hal_Led.h”

#include “Hal_delay/delay.h”

#include “Hal_Key/Hal_Key.h”

#include “ringbuffer.h”

#define APP_LED2_BLINK_EVENT 0x0001

#define HAL_LED1_BLINK_EVENT 0x0001

#define TASK_NO_TASK_RUNNING 0xFF

unsigned short Hal_ProcessEvent( unsigned char task_id, unsigned short events );

unsigned short App_ProcessEvent( unsigned char task_id, unsigned short events );

typedef unsigned short uint16;

typedef unsigned char uint8;

#define TASK_CNT 2 //定义线程的个数

//定义函数指针

typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id, unsigned short events );

//线程函数表

const pTaskEventHandlerFn tasksArr[] =

{

Hal_ProcessEvent,

App_ProcessEvent

};

const unsigned char tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );

//uint16 *tasksEvents;

uint16 tasksEvents[TASK_CNT] = {0}; //每个线程有16位位域空间用于设置事件

staTIc uint8 acTIveTaskID = 0xFF; //当前任务ID,指示作用

#define SUCCESS 0x00

#define FAILURE 0x01

#define INVALID_TASK 0x02

uint8 osal_set_event( uint8 task_id, uint16 event_flag )

{

if ( task_id 《 tasksCnt )

{

tasksEvents[task_id] |= event_flag; // Stuff the event bit(s)

return ( SUCCESS );

}

else

{

return ( INVALID_TASK );

}

}

/**

* @brief 程序入口

* @param none

* @return none

*/

int main(void)

{

unsigned short taskID = 0;

uint8 idx = 0;

SystemInit(); //系统时钟初始化

delayInit(72); //滴答定时器初始化

Led_Init(); //LED初始化

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

osal_set_event(0, HAL_LED1_BLINK_EVENT);

osal_set_event(1, APP_LED2_BLINK_EVENT);

while(1)

{

do

{

if(tasksEvents[idx]) //轮训获知哪个线程有事件需要进行处理

{

break;

}

}

while (++idx 《 tasksCnt);

if (idx 《 tasksCnt)

{

uint16 events;

events = tasksEvents[idx];

tasksEvents[idx] = 0; // 清除事件数组中的事件

acTIveTaskID = idx;

events = (tasksArr[idx])( idx, events ); //调用线程函数

activeTaskID = TASK_NO_TASK_RUNNING;

tasksEvents[idx] |= events; // 添加未处理的事件到本线程的事件组中

}

delayMs(1000);

}

}

/**

* @brief 应用层处理

* @param none

* @r

*/

unsigned short Hal_ProcessEvent( unsigned char task_id, unsigned short events )

{

if ( events & HAL_LED1_BLINK_EVENT )

{

Led_Reverse(1);

return events ^ HAL_LED1_BLINK_EVENT; //清除事件

}

}

/**

* @brief 硬件控制线程

* @param none

* @r

*/

unsigned short App_ProcessEvent( unsigned char task_id, unsigned short events )

{

if ( events & APP_LED2_BLINK_EVENT )

{

Led_Reverse(2);

return events ^ APP_LED2_BLINK_EVENT; //清除事件


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    网卡,DM9000是并口网卡,引脚多,但是速度快,也可以采用其他网卡,SPI协议的、UART协议的等。 比如:ENC28J60。 因为主要是讲LWIP协议栈的移植,所以网卡相关的代码就没有细说(需要准备一个网卡可以正常通信的工程......
    激光高速扫描的特点,能够精确检测到跟车驶入时两车的间隙位置,并对跟车的车辆进行准确的分离及准确的对应车辆的轮廓信息,保证检测数据与车辆的一一对应关系,保证车辆队列的正确性,不多车,不漏车;可广......
    过路由器结点把数据传递给协调器。ZigBee无线网络的工作顺序如图6所示。 3.3 μIP协议栈 μIP协议栈是由瑞典计算机科学研究所的AdamDunkels开发,并在BSD风格的许可证下发布的免费、开放源代码的协议栈。完整TCP/IP协议栈的......
    Error[e46]: Undefined external "?V1" referred in AF;在使用协议栈的时候,编译程序总是报这个错,今天决定写一篇这个错误记录: 第一......
    可以帮客户节约15%成本,就坚定不移的去优化改进,谁也不忍心阻止他的进取。有个工程师在研究以太网MCU芯片时,注意到常用的网络协议栈编译后目标代码较大,分析其汇编程序,发现大量的字节和半字的读写指令,随即......
    片构成一个串口转网口模块的软硬件实现方法。 1 uIP介绍    uIP是由瑞典计算机科学学院(网络嵌入式系统小组)的Adam Dunkels开发的一种软件协议栈。该协议栈的源代码由C语言编写,并完......
    帧和PDU的对应关系如下图所示。 图2. CAN2.0B帧格式与J1939PDU的对应关系 P(Priority),优先级字段,用于在仲裁过程中控制报文优先级。EDP(Extended Data Page......
    站基带芯片(SoC)PC802已于近日完成与世炬网络5G协议栈的对接调试,再一次证实了PC802可为5G小基站设备开发商和协议栈软件提供商等伙伴提供的价值,包括高性能、高经济性和低功耗等特性,基于......
    不同设备之间可以进行通信和交互。CANopen协议栈的发展可以追溯到上世纪90年代初期,当时欧洲的一些工业自动化公司开始使用CAN总线作为工业控制系统的通信协议。为了更好地管理和控制CAN总线上的设备,这些......
    可以了解该通信方法的特征。 无论是无线还是有线,电气通信都是通过按照通信协议来发挥作用的。关于什么是通信协议,请参考前文:。  下表给出了LoRaWAN模型和OSI参考模型中通信协议栈各层的作用和对应关系......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>