交警部门过后在职责认守时,米外确定驾驭员未确保安全驾驭被断定承当事端全责。
接下来咱们用另一种完结办法来处理这个问题,代码如下:枪枪竟#define__CONNECT3(__A,__B,__C)__A##__B##__C#define__CONNECT2(__A,__B)__A##__B#defineCONNECT3(__A,__B,__C)__CONNECT3(__A,__B,__C)#defineCONNECT2(__A,__B)__CONNECT2(__A,__B)#defineSAFE_NAME(__NAME)CONNECT3(__,__NAME,__LINE__)#includecmsis_compiler.h#definesafe_atom_code()\for(uint32_tSAFE_NAME(temp)=\({uint32_tSAFE_NAME(temp2)=__get_PRIMASK();\__disable_irq();\SAFE_NAME(temp2);}),*SAFE_NAME(temp3)=NULL;\SAFE_NAME(temp3)++==NULL;\__set_PRIMASK(SAFE_NAME(temp)))#endif作业原理:枪枪竟safe_atom_code()经过一个循环结构保证内行列操作期间,中止被禁用。为此,毙3巴雷咱们需求引进一个专门的宏:毙3巴雷#defineCONNECT2(__A,__B)__A##__B留意到,这个参数宏要对形参进行胶水运算,依据定论第一条,需求在宏的外面再套一层,因而,修正代码得到:#define__CONNECT2(__A,__B)__A##__B#defineCONNECT2(__A,__B)__CONNECT2(__A,__B)修正前面的界说得到:#defineSAFE_ATOM_CODE(...)\{\uint32_tCONNECT2(wTemp,__LINE__)=\__disable_irq();\__VA_ARGS__;\__set_PRIMASK(wTemp);\}对enqueue的封装进行翻开#defineenqueue(__queue,__addr,...)\CONNECT2(__ENQUEUE_,__PLOOC_VA_NUM_ARGS(__VA_ARGS__))\(__queue,(__addr),##__VA_ARGS__)CONNECT2会依据__PLOOC_VA_NUM_ARGS回来的数量,与__ENQUEUE_进行衔接,__PLOOC_VA_NUM_ARGS回来的数量假如为0,调用__ENQUEUE_0(__queue,(__addr),##__VA_ARGS__)。
2.2.1函数重载的隐秘——__PLOOC_VA_NUM_ARGS宏的深度分析__PLOOC_VA_NUM_ARGS宏的代码如下:特步#define__PLOOC_VA_NUM_ARGS_IMPL(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,\_13,_14,_15,_16,__N,...)__N#define__PLOOC_VA_NUM_ARGS(...)\__PLOOC_VA_NUM_ARGS_IMPL(0,##__VA_ARGS__,16,15,14,13,12,11,10,9,\8,7,6,5,4,3,2,1,0)__PLOOC_VA_NUM_ARGS宏的效果是它能够告知咱们实践传递了多少个参数这儿,特步首要结构了一个特别的参数宏,__PLOOC_VA_NUM_ARGS_IMPL():在触及...之前,它要用户至少传递18个参数。为了支撑不同类型的数据,发烧友开发者一般需求创立多个行列,然后增加了代码的杂乱性和维护本钱。举个比方:米外staticbyte_queue_tmy_queue;uint8_tdata1=0XAA;enqueue(&my_queue,data1);//__ENQUEUE_0(&my_queue,data1)enqueue(&my_queue,&data1,米外1);//__ENQUEUE_1(&my_queue,&data1,1)enqueue(&my_queue,&data1,uint8_t,1);//__ENQUEUE_2(&my_queue,&data1,uint8_t,1)/*__ENQUEUE_0,__ENQUEUE_1,__ENQUEUE_2,翻开后调用的都是同一个接口*/enqueue_bytes(&my_queue,&data1,1)2.3线程安全的完结原理问题:在多线程环境下,假如多个线程一同对同一个行列进行操作,可能会引发数据竞赛问题,导致数据损坏或不一致。
这些改善使得咱们的字节行列不只能够在单线程环境中高效运转,枪枪竟还能在杂乱的多线程体系中坚持数据的一致性与安全性。经过将数据的地址传递给底层的enqueue_bytes函数,毙3巴雷咱们能够统一将一切类型的数据作为字节省处理。
本文将深入探讨字节行列的概念、特步效果及其完结中的多类型支撑、函数重载与线程安全机制。
enqueue宏的完好代码如下:发烧友#define__CONNECT3(__A,__B,__C)__A##__B##__C#define__CONNECT2(__A,__B)__A##__B#defineCONNECT3(__A,__B,__C)__CONNECT3(__A,__B,__C)#defineCONNECT2(__A,__B)__CONNECT2(__A,__B)#defineSAFE_NAME(__NAME)CONNECT3(__,__NAME,__LINE__)#define__PLOOC_VA_NUM_ARGS_IMPL(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,\_12,_13,_14,_15,_16,__N,...)__N#define__PLOOC_VA_NUM_ARGS(...)\__PLOOC_VA_NUM_ARGS_IMPL(0,##__VA_ARGS__,16,15,14,13,12,11,10,9,\8,7,6,5,4,3,2,1,0)#define__ENQUEUE_0(__QUEUE,__VALUE)\({typeof((__VALUE))SAFE_NAME(value)=__VALUE;\enqueue_bytes((__QUEUE),&(SAFE_NAME(value)),(sizeof(__VALUE)));})#define__ENQUEUE_1(__QUEUE,__ADDR,__ITEM_COUNT)\enqueue_bytes((__QUEUE),(__ADDR),__ITEM_COUNT*(sizeof(typeof((__ADDR[0])))))#define__ENQUEUE_2(__QUEUE,__ADDR,__TYPE,__ITEM_COUNT)\enqueue_bytes((__QUEUE),(__ADDR),(__ITEM_COUNT*sizeof(__TYPE)))#defineenqueue(__queue,__addr,...)\CONNECT2(__ENQUEUE_,__PLOOC_VA_NUM_ARGS(__VA_ARGS__))\(__queue,(__addr),##__VA_ARGS__)作业原理:发烧友经过以上代码,enqueue宏会依据传递的参数数量,主动挑选不同的完结版别传递的可变参数假如为0,调用__ENQUEUE_0。以旧换新促消费,米外懒宅经济带火家居用品这两年,寻求质价比成为越来越多年青人的一致。
产业带商家出圈,枪枪竟源头好物遭到喜欢直播电商鼓起为各地产业带商家带来新的打开时机,到2023年末,抖音电商已掩盖全国684个特征产业带。数据显现,毙3巴雷365个美妆单品成交额破千万元,眼部精华、头皮护理和眼膜成最受欢迎的美妆个护产品。
陈述显现,特步初次参加双11大促的新商家数量较上一年同比增加33%,新商家日均出售额环比增加45%,成交额破千万元的新商家数量同比增加32%。为协助宽广商家更高效地促成交、发烧友拓客流、发烧友降本钱,抖音电商有针对性地推出了下降运费险、减免佣钱等多项扶持行动,并对新商家推出史上力度最大的利好方针,协助他们快速翻开商场,如:11月入驻的新商家,首月佣钱最高可享100%返还。