搜索
bottom↓
回复: 11

IAR ARM编译器有没有针对bit-band功能的支持语法

[复制链接]

出0入25汤圆

发表于 2018-4-24 21:09:06 | 显示全部楼层 |阅读模式

Keil 编译器有对Cortex-M单片机bit-band功能的特殊支持语法,,如下

请问IAR ARM有没有类似的语法??



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入8汤圆

发表于 2018-4-24 23:19:01 | 显示全部楼层
楼主在逗我们吗?,
随便找到处都是啊

typedef struct  {
    uint08 tel_addr:7;             //Bit0―Bit6如果是远程设备此地址为 0x5A
    uint08 scr_addr_en:1;       //Bit7=1,表示11字节后跟随4字节的请求源设备地址
    uint08 pkg_len:8;             //本次命令数据包的长度?此长度包括两字节的 CRC校验码
    uint08 cmd_type:3;           //Bit0―Bit2为读写模式?其值为0x03为读?其值为 0x06为写
    uint08 dev_type:5;            //本次命令的设备类型码及读写模式?Bit3―Bit7 为设备类型?这里手术室情        情报面板为0x02
    uint08 trg_len:8;               //写入从设备的数据长度 MAX = 256-13 = 243 Bytes big endian
    uint16 trg_addr:16;          //读取从设备内部的开始地址?高 8 位?即Bit8―Bit15 big endian
    uint16 serial:15;               //当前命令的序列号  big endian
    uint16 MSbit:1;                //MSbit=0 请求包 MSbit=1 回复包
    uint32 scr_addr:32;          //当前命令的序列号
    uint32 dev_id:24;             //读取设备的从地址高 8 位?此地址为能迪公司命名的唯一设备识别地址 big endian
    uint32 dp:8;                    //数据开始位 datapointer
    uint16 crc:16;                 //CRC16值
}CL_RevFlag_Solo_Def;

出0入25汤圆

 楼主| 发表于 2018-4-25 09:12:44 | 显示全部楼层
本帖最后由 XIVN1987 于 2018-4-25 09:14 编辑
icoyool 发表于 2018-4-24 23:19
楼主在逗我们吗?,
随便找到处都是啊



你不会不知道Cortex-M的bit-band功能吧??


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-4-25 10:32:51 | 显示全部楼层
IAR好像没有,keil有我还是第一次知道。以前要用都是用宏转换地址。

出0入8汤圆

发表于 2018-4-25 11:51:54 | 显示全部楼层
XIVN1987 发表于 2018-4-25 09:12
你不会不知道Cortex-M的bit-band功能吧??

这个有什么用,根本就是没有必要的东西啊,  你开发的程序难度要专门的位操作,  如果真要位操作, 用union就好了. 就算CPU有位操作的指令能够加快访问速度, 这个也是做编译器要考虑的东西, 根本和我写C语言没有任何关系. 不支持就不支持呗, 迟早还是会支持的

出0入9汤圆

发表于 2018-4-25 18:05:57 来自手机 | 显示全部楼层
我以前用过keil的位带操作。感觉控制管脚速度不够快后来就不用了。

出0入0汤圆

发表于 2018-4-25 19:01:43 | 显示全部楼层
icoyool 发表于 2018-4-25 11:51
这个有什么用,根本就是没有必要的东西啊,  你开发的程序难度要专门的位操作,  如果真要位操作, 用union就 ...

bit-band的最大特色是原子操作,否则就是读-修改-写操作了,区别不言自明了

但是它其实是总线完成了读-修改-写,只不过反应在指令上,确实是原子的。

不过如果是外设寄存器,因为寄存器可能被外设修改某些位,此时bit-band可能会造成副作用

出870入263汤圆

发表于 2018-4-25 22:28:48 | 显示全部楼层
bit-band的地址空间通常只覆盖片内SRAM,不包括片内外设,所以没有多少实际作用。还影响了代码的可移植性,很没必要。
实际应用中,内存变量的某些bit需要原子操作的场合并不多;即便出现这种需求,用通用的关中断或者原子操作(SWAP或LDREX/STREX实现)都行。

出20入25汤圆

发表于 2018-4-25 22:58:38 来自手机 | 显示全部楼层
armstrong 发表于 2018-4-25 22:28
bit-band的地址空间通常只覆盖片内SRAM,不包括片内外设,所以没有多少实际作用。还影响了代码的可移植性, ...

你这个说法应该不对吧,只对SRAM,设计芯片应该考虑了外设

出870入263汤圆

发表于 2018-4-26 13:54:13 | 显示全部楼层
本帖最后由 armstrong 于 2018-4-26 13:56 编辑
chenchaoting 发表于 2018-4-25 22:58
你这个说法应该不对吧,只对SRAM,设计芯片应该考虑了外设


你说的对。片上外设的覆盖有芯片厂商确定,可以覆盖。
但是:bitband只能使1bit原子操作,但现实中通常是nbit的组合位域,比如: bit6~bit3是一个整体,bitband特性无能为力!

出870入263汤圆

发表于 2018-4-26 13:58:47 | 显示全部楼层
bitband在实际中很少应用,这个设计似乎仅仅是为了针对51单片机的位清除和位设置指令。

出10入46汤圆

发表于 2018-4-27 14:22:05 | 显示全部楼层
bitband 是通过地址映射解决访问的。
C语言强制指定地址既可以解决bitband问题, 而且各种编译器通用。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 20:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表