历史上的今天
返回首页

历史上的今天

今天是:2025年01月07日(星期二)

正在发生

2020年01月07日 | ucosii在AVR系列单片机移植中出现的一个BT的问题

2020-01-07 来源:eefocus

今天想把ucosii移植到手头的一块AVR128芯片上。


只要有移植经验,其它的问题都比较好解决。但是ICC编译器对于函数指针的处理方式特别怪异,让我大吃苦头,纠结调试了半天!!!

 

症状:编译通过后,运行时卡死。经在AVR Studio中JTAG硬仿真,发现任务调度不了。最终目光聚焦在移植代码里函数中的一行:


tmp  = *(INT16U const *)task;   /* (1) ICC compiler handles function pointers indirectly!   */


这是取得函数指针指向的函数地址。

 

一般编译器下直接写成   tmp  = task   就可以了,但是“ICC compiler handles function pointers indirectly! ”, ICCAVR编译器对函数指针的处理是间接的(indirectly),函数指针是保存在一个函数入口列表(function table entry)中,该列表位于Flash空间,而不能直接获得。

 

tmp  = *(INT16U const *)task  这样是ICCAVR下特有的获得函数地址的方法,而且使用了const关键字。这里是重点了,这里使用的const关键字要求const指定的代码是放在flash中的,否则也一样无法获得正确的函数地址。这要求在编译器下做以下设置:

选择Project->options,在Compiler选项卡中,Treat 'const' as '__flash' (ba... 这一项要求被选中。

 

这样设置后,函数指针就会经过查找一个存储在flash中的函数表而间接获得,编译出来的结果才能正确执行。

推荐阅读

史海拾趣

粤翔(FlyWin)公司的发展小趣事
信号处理单元接收到电压异常信号后,迅速向处理器发出警告,使处理器有时间执行数据保存操作。
Black Box Corporation公司的发展小趣事

在数字化时代,通信技术的更新换代速度极快。为了保持竞争优势,Black Box不断投入研发,推出了一系列创新产品和技术。例如,公司研发了一款智能网络管理平台,能够实时监控网络状态并进行故障预警。这一技术创新大大提高了网络的稳定性和安全性,赢得了客户的广泛好评。

晶群科技(Gem-micro)公司的发展小趣事

在快速发展的同时,Black Box也非常注重企业文化和人才建设。公司倡导开放、创新、协作的企业文化,鼓励员工提出新的想法和建议。同时,公司还建立了完善的人才培养和晋升机制,为员工的职业发展提供了广阔的空间。这些举措不仅吸引了大量优秀人才加入Black Box,也提高了公司的整体竞争力。

以上五个故事框架仅是基于Black Box Corporation的一般情况和电子行业趋势的假设性构建。实际的发展过程可能更加复杂和多样,需要具体的公司历史资料和行业数据来支撑。如果需要更详细和准确的故事,建议查阅Black Box Corporation的官方资料、相关新闻报道或行业研究报告。

高博(GBG)公司的发展小趣事

品质是企业生存之本。谷峰公司始终将产品质量放在首位,建立了严格的质量控制体系,确保每一款产品的性能和质量都达到行业领先水平。同时,公司还注重品牌建设,通过参加国际展会、发布新产品、提供优质服务等方式,不断提升GOFORD品牌的知名度和美誉度。如今,GOFORD已成为电子行业可信赖的高可靠性功率器件供应商之一。

台湾稳态公司的发展小趣事

随着企业实力的增强和产品质量的提升,台湾稳态公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓海外市场,将产品销往全球多个国家和地区。同时,稳态公司还制定了全球化战略,通过与国际知名企业的合作和交流,不断提升自身的国际竞争力。

HM International公司的发展小趣事

台湾稳态公司在创立之初,便明确了自身的技术发展方向和市场定位。公司创始人凭借在电子行业多年的技术积累和敏锐的市场洞察力,带领团队专注于某一特定领域的研发和生产。通过不断的技术创新和优化,稳态公司逐渐在市场中树立起了自己的技术优势和品牌形象。

问答坊 | AI 解惑

师兄(姐):求教

本帖最后由 paulhyde 于 2014-9-15 09:15 编辑 我的毕业设计是 DC-AC变换电路设计 我找不到啊  …

查看全部问答>

ARM菜鸟进阶

ARM菜鸟快速上手…

查看全部问答>

IBM虚拟化实战:AIX工作负载分区管理

  【IT168 服务器频道】本文向您介绍了工作负载分区(WPAR),这个 AIX 6 的新功能,它是一个通过纯软件实现虚拟化的技术。通过 WPAR 可以实现新一级别的 AIX 虚拟化功能,它补充现有的虚拟化功能的不足,实现了在不修改应用程序代码的情况下,在 ...…

查看全部问答>

LED控制器

菲克电子引领LED灯饰技术潮流,菲克电子大量提供LED护栏管点光源控制器,背光模组控制器,lED控制器,有全彩单片机方案,DM134方案,脱机,联机,USB,CF,SD,电脑控制,遥控,可根据客户要求制作。吕先生13232392096…

查看全部问答>

红外摄像机的常见的几个问题随笔(转)

  关于红外的些小想法,由来已久,正值五一放假来临之际,随便写写,有些想法是公司由来已久,有些是同事告知,有些是在同行那儿收集,现在,趁这个五一放假而有小小空时,在自己喜爱的千家上,写一下关于红外的随笔,希望能得到行家的指正;    & ...…

查看全部问答>

意念轮椅

据英国媒体报道 西班牙科学家研制出一部可以用人的意念来操作的轮椅。“意念轮椅”上装备着一部电脑,通过连接着轮椅的激光扫描仪,周围环境将会以三维图像的形式出在电脑的显示屏上。使用者只要对着屏幕上想去的地方集中精力,头上的电极头盔就能 ...…

查看全部问答>

WINCE散分中。。

ARM WINCE群 欢迎大家加入:35526208…

查看全部问答>

【低功耗】Xilinx的FPGA低功耗相关文章下载(二)

这是我的一些Xilinx的FPGA的论文,传上来给大家分享一下!大家多多支持啊! 我会分批上传,方便大家选择性的交流与下载!…

查看全部问答>

LM3S9L97 CAN模块

各位大侠!小弟自己搭了一块LM3S9L97板子,现在调到CAN模块遇到了点不懂的问题请教一下, TX 就是在初始化过后然后设置ID和数据什么的     g_sCANMsgObject1.ulMsgID = 0x1001;    //CAN报文ID    ...…

查看全部问答>

modelsim单步调试

网上找了很多资料,关于单步调试的资料不多,能不能推荐些资料。           单步调试时,17-19行是每步执行一行,但到20行时,跳到24行,要三步才能跳出24行,为什么要三步呢?…

查看全部问答>