tag 标签: idf

相关博文
  • 2025-5-18 20:54
    239 次阅读|
    0 个评论
    7. ESP32开发之freeRTOS的互斥量
    什么是互斥量 互斥量的应用场合 互斥量的API函数 基本代码结构 互斥量使用举例 递归锁 递归锁举例 总结 什么是互斥量 在freeRTOS中,多个任务访问一块共享资源,会产生竞争现象。 比如马路上只有一个很早以前的电话亭,A、B都想要打电话,然后他们就开始打架了。但是如果A先进去了然后把门锁了,B想进去打电话的话只能在外面等,必须等到A把门锁打开。 互斥量的应用场合 像freeRTOS的多任务系统,任务A正在使用某个资源,还没用完的时候,任务B也来使用,就可能会导致问题。 就比如串口,任务A正在用串口发送数据,此时任务B也来用这个串口发送数据,这样就会导致数据混乱。 简而言之,多任务使用共享资源的情况下,就需要使用互斥量了。 这里有个特别强调的注意点 :按照正常的情况来说,只要任务A获取了互斥量,其他任务都无法释放互斥量才对。但是freeRTOS中并没有实现,其他任务也可释放互斥量。所以在freeRTOS中,大家默认谁获取互斥量,就该谁释放。 互斥量的API函数 创建互斥量 /* 返回值:正确返回SemaphoreHandle_t 变量,错误返回NULL */ SemaphoreHandle_t xSemaphoreCreateMutex( void ); 获取 /* 参数: xSemaphore : 创建的互斥量 xBlockTime : 获取锁等待时间,超时获取失败 返回值: 获取到,返回pdTRUE,反之,pdFALSE */ SemaphoreHandle_t xSemaphoreTake( xSemaphore, xBlockTime ) 释放 /* 参数: xSemaphore : 创建的互斥量 返回值: 释放成功,返回pdTRUE,反之,pdFALSE */ SemaphoreHandle_t xSemaphoreGive( xSemaphore, xBlockTime ) 基本代码结构 if(xSemaphoreTake(xSemaphore,pdMS_TO_TICKS(1000))==pdTRUE){ /*资源处理代码,这里可以称之为临界区*/ xSemaphoreGive(xSemaphore); } 互斥量使用举例 首先举一个错误例子,这样会有个对比 void taskA(void* pvPram) { while(1){ for(int i=0;i5;i++){ num++; ESP_LOGI("taskA","num is %d",num); } vTaskDelay(pdMS_TO_TICKS(1000)); } } void taskB(void* pvPram) { while(1){ num++; ESP_LOGI("taskB","num is %d",num); vTaskDelay(pdMS_TO_TICKS(1000)); } } void app_main(void) { xSemaphore=xSemaphoreCreateMutex(); xTaskCreatePinnedToCore(taskA,"taskA",2048,NULL,4,NULL,1); xTaskCreatePinnedToCore(taskB,"taskB",2048,NULL,4,NULL,1); } 打印结果如下:代码目的是taskA执行过程中,num值是连续增加的,然而打印中会发现,taskA打印并不连续,会被taskB抢占。 使用mutex函数 /** * Copyright (C) 2024-2034 HalfMoon2. * All rights reserved. * * @file Filename without the absolute path * @brief Brief description * @author HalfMoon2 * @date 2025-05-07 * @version v0.1 * * @revision history: * 2025-05-07 - Initial version. */ #include stdio.h #include freertos/FreeRTOS.h #include freertos/task.h #include freertos/semphr.h #include esp_log.h SemaphoreHandle_t xSemaphore; BaseType_t num=0; void taskA(void* pvPram) { while(1){ /*如果在1S获取到互斥量,那么执行num++五次并打印 */ if(xSemaphoreTake(xSemaphore,pdMS_TO_TICKS(1000))==pdTRUE){ for(int i=0;i5;i++){ num++; ESP_LOGI("taskA","num is %d",num); } xSemaphoreGive(xSemaphore); } vTaskDelay(pdMS_TO_TICKS(1000)); } } void taskB(void* pvPram) { while(1){ if(xSemaphoreTake(xSemaphore,pdMS_TO_TICKS(1000))==pdTRUE){ num++; ESP_LOGI("taskB","num is %d",num); xSemaphoreGive(xSemaphore); } vTaskDelay(pdMS_TO_TICKS(1000)); } } void app_main(void) { xSemaphore=xSemaphoreCreateMutex(); /*为了产生竞争,两个任务优先级设置一样 */ xTaskCreatePinnedToCore(taskA,"taskA",2048,NULL,4,NULL,1); xTaskCreatePinnedToCore(taskB,"taskB",2048,NULL,4,NULL,1); } 打印结果: 分析: 从打印看,当任务A执行完五次num++后,才会轮到任务B执行一次。完全符合执行逻辑。 递归锁 递归锁的引出 假设有两个互斥量M1、M2,taskA获取了M1,taskB获取了M2。然而taskA需要再获取M2才能执行下一步,且taskB也需要再获取M1才能执行下一步。这样就导致了taskA、taskB都无法释放互斥量。导致了死锁。 再假设有一个互斥量M1,任务A获取了M1后,执行一个函数,然而此函数中也获取了M1,此时任务A还没释放M1,这将导致任务A自己把自己锁了。 然而递归锁,可以多次获取,可以解决以上问题 递归锁的函数 /*创建递归锁*/ SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void ); /*获得 */ BaseType_t xSemaphoreTakeRecursive( SemaphoreHandle_t xSemaphore, TickType_t xTicksToWait); /*释放 */ BaseType_t xSemaphoreGiveRecursive( SemaphoreHandle_t xSemaphore ); 递归锁举例 死锁举例 SemaphoreHandle_t xSemaphore; BaseType_t num=0; void func(BaseType_t *a) { //获取互斥量等待时间设置为portMAX_DELAY,因为taskA为释放互斥量,导致此处一直等待 if(xSemaphoreTakeRecursive(xSemaphore,portMAX_DELAY)==pdTRUE){ *a=*a+1; xSemaphoreGiveRecursive(xSemaphore); } } void taskA(void* pvPram) { while(1){ /*如果在1S获取到互斥量,那么执行num++五次并打印 */ if(xSemaphoreTake(xSemaphore,pdMS_TO_TICKS(1000))==pdTRUE){ func(num); ESP_LOGI("taskA","num is %d",num); xSemaphoreGive(xSemaphore); } vTaskDelay(pdMS_TO_TICKS(1000)); } } void app_main(void) { xSemaphore=xSemaphoreCreateMutex(); /*为了产生竞争,两个任务优先级设置一样 */ xTaskCreatePinnedToCore(taskA,"taskA",2048,NULL,4,NULL,1); } 打印如下:程序将一直锁着,无法执行 使用递归锁 SemaphoreHandle_t xSemaphore; BaseType_t num=0; void func(BaseType_t *a) { //获取互斥量等待时间设置为portMAX_DELAY,因为taskA为释放互斥量,导致此处一直等待 if(xSemaphoreTakeRecursive(xSemaphore,portMAX_DELAY)==pdTRUE){ *a=*a+1; xSemaphoreGiveRecursive(xSemaphore); } } void taskA(void* pvPram) { while(1){ /*如果在1S获取到互斥量,那么执行num++五次并打印 */ if(xSemaphoreTakeRecursive(xSemaphore,pdMS_TO_TICKS(1000))==pdTRUE){ func(num); ESP_LOGI("taskA","num is %d",num); xSemaphoreGiveRecursive(xSemaphore); } vTaskDelay(pdMS_TO_TICKS(1000)); } } void app_main(void) { xSemaphore=xSemaphoreCreateRecursiveMutex(); /*为了产生竞争,两个任务优先级设置一样 */ xTaskCreatePinnedToCore(taskA,"taskA",2048,NULL,4,NULL,1); } 打印如下:发现完全可以正常打印了 总结 为了避免死锁,在中断中不要使用互斥量 如果有嵌套使用互斥量,请使用递归锁,递归的层数由queueQUEUE_TYPE_RECURSIVE_MUTEX决定 虽然freeRTOS没有实现谁锁谁开,但是开发过程中还是默认这么操作了
  • 热度 21
    2014-8-18 10:33
    1383 次阅读|
    0 个评论
      2014秋季英特尔信息技术峰会(IDF2014)即将拉开序幕   2014年8月18日,北京 — 随着计算技术走向移动,可穿戴、物联网等市场风起云涌、创意层出,而广大开发者、创造者及不断壮大的创客群体则是创新的源泉。9月初,技术行业的目光将再次聚焦美国旧金山:全球信息通信产业界备受瞩目的开发者盛会——2014秋季英特尔信息技术峰会(Intel Developer Forum,IDF2014),将以强大的产业号召力,汇聚近5000名来自世界各地的软硬件开发者、技术专家、创客群体、媒体和分析师,充分展示英特尔的最新前沿技术以及源源不断的创新活力,为开发人员、创客与创造者带来的一场技术盛宴。 IDF自1997年创办,已经成功举办了17年,被誉为“信息通信技术行业创新方向的风向标”。将于9月9日至11日举行的IDF2014,具有与往届完全不同的意义——今年的IDF将围绕与会的技术开发者,探讨他们的机会、创意和想法,以及加入包含数百万全球开发者的英特尔架构生态系统的优势。开发者、创客和创造者将分享他们的理念,并了解英特尔如何帮助他们开发改变世界的技术。在IDF行业技术展上,全球超过180家领先的公司将展示他们的最新创新成果和未来技术。 本届IDF的形式进行了大幅调整。英特尔公司首席执行官科再奇将携手特邀嘉宾将发表主题演讲。在随后两天进行的“Mega Session”大型分组会议上,英特尔高管将聚焦技术趋势和创新。此外,在为期三天的峰会期间,与会者还能参加行业与英特尔专家举办的技术会议、演示活动以及英特尔有史以来最庞大的技术展之一。 本届IDF强大的演讲团队包括:    第1天 主题演讲: 英特尔公司首席执行官科再奇(Brian Krzanich):英特尔的未来愿景以及英特尔技术的最新进展   Mega Sessions:  •英特尔公司全球副总裁兼物联网事业部总经理Doug Davis:物联网 •英特尔公司全球副总裁兼新设备事业部总经理Mike Bell:下一波计算革命:英特尔® Edison、可穿戴设备和新设备  •英特尔公司全球副总裁兼软件与服务事业部总经理费道明(Douglas Fisher):直面开发者的挑战 •英特尔公司全球副总裁兼移动通信事业部总经理贺尔友(Hermann Eul):Hermann的快乐时光   第2天   Mega Sessions:  •英特尔公司高级副总裁兼数据中心事业部总经理柏安娜 (Diane M. Bryant):数据中心的机会 •英特尔公司高级副总裁兼PC客户端事业部总经理施浩德(Kirk Skaugen):PC再造与创新 – 开发者关注的重点领域   欢迎关注美国旧金山IDF2014,获取最新实时报道,可点击官方网站链接:http://www.intel.com/content/www/us/en/intel-developer-forum-idf/san-francisco/2014/idf-2014-san-francisco.html
  • 热度 22
    2014-4-4 15:00
    3256 次阅读|
    6 个评论
      传统PC市场萎缩,进军平板并不顺利,新兴物联网多年雷声大雨点小,服务器市场甚至还遭遇新锐对手ARM的挑衅。芯片巨人英特尔算是最近有些烦。但经历深圳IDF14,本人认为现在的英特尔的情况以一句歌词形容最合适: "天空飘来五个字,那都不是事!"   为什么这么说,咱们一条条细看:   1、PC   PC产业遇到问题,现在除了咱们中国的联想喜得霸主地位,独自在傻乐傻乐的,其它前几家PC业的日子都不好过。台湾两基一硕几乎是痛不欲生,日系PC都不愿意玩了。戴尔那位掌门人甚至为了不挨股民骂,都把公司私有化了。     工艺是英特尔的传统致命武器,14纳米FinFET工艺的处理器继续领跑全球     今年的IDF上,2in1(2合1)电脑取代了去年的超级本,这里有两层含义:一是平板笔记本电脑2合1,二是支持安卓与windows双系统2合1。   深圳IDF上,英特尔IDF14除了拉上联想,还拉上了大帮子的中国哥们称兄道地。例如拉上科大讯飞搞语音控制,拉上腾讯搞QQ高清视频,拉上比亚迪搞无线充电,再拉上快播搞高清电视盒子,最后还拉上了眼下红得发紫,紫得发烫的小米一起推WIDI技术。   PC产业带上这么多中国小伙伴,一得不再有事。至于原来那些小伙伴们,算了,你们都掉火坑水沟里了,哥先走一步了。   哦,唯一的亮点同还拉上了技嘉,推MINI型台式机。集成锐炬显卡的CPU,玩高级游戏一点问题都没有。游戏发烧友们还有人会觉得NB玩游戏的感觉不正统。MICI台式机一样可以DIY是王道。   在网吧电脑被AMD抢占之后,那些在家里玩发烧游戏的小众玩家要烧钱,就只能找它了。   对了,我差点忘记了,还有3D摄像头和RealSence这两个杀手锏,会很快整合到后面的PC中了。   2、平板电脑   2013年是英特尔有史以来对平板最为重视的一年,当然今年还会继续重视。去年是英特尔从态度转变到行动转变的第一年,平板的出货量压过PC之后,英特尔算是看清楚了:没有平板这块板图,英特尔以后就可能是自己一家玩了。   英特尔公布去年的平板出货量是400万台,但据第三方的统计去年英特尔占白牌市场的比例2%!今年英特尔的目标是4000万,出货量林去年要增加10倍!要占全球平板出货的30%!   难道深圳的小伙伴们在去年一年的观察期恋爱期之后,就直接投身英特尔去了?   英特尔高级副总裁PC客户端事业部总经理施浩德在表演平板电脑打电话   64位Bay Trail处理器是目前安卓平板中最快的CPU   好吧,世界上只有英特尔的平板CPU能够支持安卓和WINDOWS 8双系统,既然如此,我本人对英行尔今年4000万平板出货量的目标的信任度也提供了10倍,从0.1%提升到了1%。       3、IoT(物联网)   针对物联网市场,英特尔去年推出了Quark处理器,今年CES上推出了Edison主板。物联网已经是几乎所有做处理器(CPU\MPU\MCU\DSP\FPGA)的厂商的目标。ARM阵营内部凭借ARM内核独有的低功耗和周边配套已经将物联网视为囊中物。   新任CEO科再奇对Edison主板用于IoT和可穿戴设备充满信心   新上任的英特尔CEO科再奇表示,知道做物联网的技术复杂性和成本压力,以后只以Edison主板形式推产品。新的版本已经减少了周边元器件。大家放心跟过来。   其实物联网的问题真的是在生态。虽然基于ARM的MCU供应商阵营好像更有气势,但其实物联网所在的业务主要还是原来做工控机那帮老友记在做。而那帮老友其实是英特尔的死忠。   英特尔现在做IoT只是飞象过河,杀过界来抢地盘。如果他还能够幸运拿可穿戴等市场,英特尔就成功达到目的了。   4、服务器   在服务器市场这次英特尔很谦虚,坦诚他们还不够好。其实这都是老虎口里的肉。现在他们新推出SDN(软件定义网络)的概念,来走一条新的道,其实就是想通过在新赛道上让*通这些一直没有甩开的对手,直接掉队。   英特尔高级副总裁数据中心事业部总经理柏安娜表示服务器领域X86已经完胜RISC阵营   越是他低调的地方,越是要警惕。   5、智能手机   差点忘记英特尔还有手机这回事了,好在科再奇与杨元庆的通话“Hello YY!”提醒了我。   你没有资格对英特尔的智能手机再说三道四,你不知道他在手机上有多努力吗? 英特尔将会在14年Q2发布新的CAT 6,5模手机SoC XMM7260   英特尔过去年在智能手机的“努力”有目共睹。联想K800折戟沉沙之后,迅速推出K900,又迅速折戟沉沙。其实,大家知道安卓系统的优化,英特尔是落后了。但是,人家有底气!   自中国三张4G牌照一发下来,3G手机已经就快成为历史了,至少我的手机已经是的。   在去年Q3发布CAT 4,15 3PP频的XMM7160 LTESoC发布后,英特尔将会在14年Q2发布新的CAT 6,5模手机SoC XMM7260。当我们以为4G/LTE暂时只有高通独舞的时候,英特尔的智能手机芯片部门要在LTE/4G时代发力了。   英特尔全球副总裁移动通信事业部总经理贺尔友表示Bay Trail入门级处理器超过MTK的八核性能      目前使用的情况    三星NOTE 3 Neo版本采用了英特尔的处理器,中间那个厂商,希望你不是来打酱油的。   “顺便”剧透一下SoFIA 3G,将是集成3G调制解调器的凌动应用处理器,届时3G低端机会有一个新的身影   总的来说,英特尔当年收购英飞凌手机事业部的钱看上去要回本了!     后话:   英特尔能够在一个最重要的芯片市场几乎吃独食,吃到爽说要吐的时候,就像是土豪们说要操心怎么花完钱似的,感觉是矫情。   即使是在平板电脑今年没有取得10倍的出货量的增长,又如何?君不见,多少本土平板处理器厂商都慢慢把它当作鸡肋了。这块不好吃咽不下的骨头,你真以为英特尔会在意?   英特尔声称进军平板的战略只是一个前奏,他不愿意只呆在PC圈,能够融入更多的生态圈才是他的真实想法。   他豪掷一亿美金放在深圳,鼓励创新才是真正的目的。事隔8年再次来到深圳开IDF,他想要的是一个不同的未来。   歌词后面还有一句:是事它就烦一会儿,一会儿就没事儿?
  • 热度 19
    2012-4-23 17:54
    1022 次阅读|
    0 个评论
    IDF 2012图片报道  
  • 热度 21
    2008-8-25 15:06
    2393 次阅读|
    0 个评论
    我看见有媒体说 IDF 就像是未卜先知的神算子,为世界揭示了未来种种新的技术趋势,未来各种技术规范。每一届 IDF , Intel 都让世界看到新的希望,知道下一步这个半导体巨人将会怎样出招。 2008 秋季 IDF 在旧金山召开, Tensilica 出席并在会上宣布我们的 HiFi2 音频处理器成功应用在英特尔针对互联网络 CE 终端设备的处理器 CE3100( 此前 CE3100 处理器被称为 Canmore) 。 英特尔消费类电子集团总经理 William O. Leszinske, Jr. 表示:“英特尔最新多媒体处理器是高度集成的 SoC 设计,为设备制造商提供领先的基础技术开发丰富的 IP 视频及音频娱乐产品。英特尔的 CE SoC, 集成了 Tensilica HiFi2 音频解决方案打造超一流的音效体验,我们相信电子产品爱好者们都将会爱上它。” Tensilica 全体同仁都非常高兴英特尔在其领先 SoC 设计中选用 Tensilica 音频处理器。无疑 , 我们的 HiFi2 音频引擎已经成为在包括手提电话道数字电视、机顶盒及蓝光碟播放器在内的各种电子娱乐设备中添加大量音频功能的选择。我们盼望着与加入到 Intel 科技创新的道路 , 推动当代计算机业界不断向前发展。
相关资源