以课堂实录的方式撰写。全面覆盖知识体系;记录讲师授课的点点滴滴,内容详尽、透彻、系统,可以作为参考性。
发布时间:2021-08-27 15:42:54来源:有考培训网综合
编程到一定阶段升值加薪很难?嵌入式工程师,技术牛,薪资无上限编程这门青春饭中可以从业时间长。
嵌入式符合当下流行的计算机热点发展方向,属于知识密集的编程方向,很难被人工智能替代。
基础班、白领班、辅导班班型灵活多样,全日制班、周末班时间灵活支配。
以嵌入式技术为核心,融合物联网、AI、python、5G、Android等多种高薪热门技术,打造嵌入式人工智能人才核心竞争力。
拥有多年嵌入式物联网方向的研发及培训经验底蕴,积累了强大的行业壁垒,有力支撑了嵌入式人工智能课程的厚积薄发。
真实企业人工智能产品研发,强势推出AI+嵌入式、AI+物联网、AI+机器人三大系列项目实训及自主研发硬件实训平台。
业内人工智能软硬件结合的教学课程,提供高含金量的嵌入式人工智能软硬件结合教学解决方案,技能多方面提高。
以课堂实录的方式撰写。全面覆盖知识体系;记录讲师授课的点点滴滴,内容详尽、透彻、系统,可以作为参考性。
针对每天知识点进行组织。通过测试,学员可以及时巩固所学知识点,同时也可以检测对知识点的掌握情况。
详细的经典案例描述,提炼总结了新入行软件工程师在2年内将会经常遇到的技术实现难点及其经典解决方案。
以文档的形式提供每日课后作业的题目、涉及知识点和解决方案提示等信息,可以保障不同程度的学员得到有效的代码训练。
重点课堂回放——对于课程体系中一些重点、难点的环节,将通过在线视频的方式让学员反复收看,提升理解,学员可以在学习期间领略更多的精彩讲解。
即时在线呼叫。学员在学习过程中遇到的任何困难和问题都可以通过在线问答系统进行求助。项目经理、助教、讲师会及时以线上或线下的方式解决问题。
达内教育
昆明嵌入式培训班选哪个?达内教育隶属于加拿大达内IT培训集团,于2002年成立 ,是达内IT培训集团直属学院。学院成立旨在建立软件高级人才培养的通道,促进我国信息产业迅速发展。依托达内集团国内持平的课程体系(TTS6.0),雄厚的师资力量,广阔的就业平台,迄今为止已与国内上万家IT企业进行人才输送合作,其中紧密合作企业4000余家、深入合作企业200余家、订单输送联盟企业107家。
在uC/OS-II下开发一个串口的驱动程序,驱动和接口在测试中均未发现问题。应用中开发了个通讯程序,串口驱动提供了一个查询驱动缓冲区字符的函数:GetRxBuffCharNum()。 高层需要接受一定数量的字符以后才能对包做解析,用伪代码表示如下:
bExit = FALSE;
do { if (GetRxBuffCharNum() >= 30) bExit = ReadRxBuff(buff, GetRxBuffCharNum());
}
while (!bExit);
这段代码判断当前缓冲区中超过30个字符,就将缓冲区中全部字符读到缓冲区中,直到读取成功为止。逻辑清楚,思路也清楚。但这段代码是不能正常工作。如果是在PC机上,定然是没有任何问题,工作的异常正常。但在嵌入式里真的是不得而知了。同事很郁闷,不知道为什么。来请我解决问题,当时我看到代码,就问了他,GetRxBuffCharNum()是怎么实现的?打开一看:
unsigned GetRxBuffCharNum(void)
{
cpu_register reg;
unsigned num;
reg = interrupt_disable();
num = gRxBuffCharNum;
interrupt_enable(reg);
return (num);
}
很明显,由于在循环中,interruput_disable()和interrupt_enable()之间是个全局临界区域,增加gRxBufCharNum的完整性。但是,由于在外层的do { } while() 循环中,CPU频繁的关闭中断,打开中断,这个时间非常的短。实际上CPU可能不能正常的响应UART的中断。
当然这和uart的波特率、硬件缓冲区的大小还有CPU的速度都有关系。我们使用的波特率非常高,大约有3Mbps。uart起始信号和停止信号占一个比特位。一个字节需要消耗10个周期。3Mbps的波特率大约需要3.3us传输一个字节。3.3us能执行多少个CPU指令呢?100MHz的ARM,大约能执行150条指令左右。结果关闭中断的时间是多长呢?一般ARM关闭中断都需要4条以上的指令,打开又有4条以上的指令。接收uart中断的代码实际上是不止20条指令的。所以,这样下来,就有可能出现丢失通信数据的Bug,体现在系统层面上,就是通信不稳定。
修改这段代码其实很简单,较简单的办法是从高层修改。即:
bExit = FALSE;
do { DelayUs(20);
//延时 20us,一般采用空循环指令实现
num = GetRxBuffCharNum();
if (num >= 30) bExit = ReadRxBuff(buff, num);
}
while (!bExit);
这样,让CPU有时间去执行中断的代码,从而避免了频繁关闭中断造成的中断代码执行不及时,产生的信息丢失。在嵌入式系统里,大部分的RTOS应用都是不带串口驱动。自己设计代码时,没有充分考虑代码与内核的结合。造成代码深层次的问题。RTOS之所以称为RTOS,就是因为对事件的响应;事件的响应依赖于CPU对中断的响应速度。驱动在Linux这种系统中都是与内核高度整合,一起运行在内核态。
更多培训课程: 昆明达内嵌入式课程 更多学校信息: 昆明五华区五一路达内IT教育培训 咨询电话: