共2条
1/1 1 跳转至页
ADS 在ADS中要怎么定义一个位呢?

问
比如,我设置一个标志位,然后根据它来做事:
在C51在一般做法是这样:在2104中我怎么定义呢?
bit flag;
if(flag) {a=1;}
else {a=0;} 答 1: re:不支持bit,请定义为unsigned int或unsigned char类型。 答 2: 这个问题从前讨论过,建议有问题要问前,搜索一下旧贴上善若水 发表于 2006-1-4 20:23 Philips ARM ←返回版面
如何定义位变量?
C51有bit能声明只有一位的变量,很适合一些标志的定义,有效节省了内存空间。在使用了周立功模板的ADS中的c中有没有类似的位变量定义?难道我只是想定义一个标志变量也要定义为uint8?
zy315 发表于 2006-1-5 08:03 Philips ARM ←返回版面
RE
bit是51机C语言专用的数据类型,ANSI C中哪有这种类型??bit是为适应51机可位寻址的128bit区域。但 标准C语言里有个叫位域,也叫位段的东西,强制访问内存中的单个位,你可以看看谭浩强的那本书的第12章。
eleven11 发表于 2006-1-5 08:23 Philips ARM ←返回版面
位域会增加代码
其实就是与操作,和你定义某某位什么标志一样的操作
computer00 发表于 2006-1-5 08:42 Philips ARM ←返回版面
位段会增加代码量以及程序运行时间
对于32位的MCU来说,如果为了提高运行速度,有时使用32bit的反而会比使用8bit的运行速度快。使用1bit的也是同样的道理。
ARM的存储空间应该比较,你不必为省这么几个字节较真吧?如果实在是有太多的标志,使用位段也可以。
上善若水 发表于 2006-1-5 09:19 Philips ARM ←返回版面
请问computer00
“有时使用32bit的反而会比使用8bit的运行速度快。”是不是说把一些原本定义为8字节的变量,定义为32字节,虽然浪费了一定的内存空间,但是能提高运行速度?
computer00 发表于 2006-1-5 09:30 Philips ARM ←返回版面
是的。
因为在32位CPU上处理8bit的数据,为了保证最后结果的正确性,还要进行一些调整,例如与操作,去掉高24位等。
你可以看看生成的汇编代码就知道了。
当然,对于速度没有严格要求的场合,使用比较小的存储单元是好的做法,尤其是在变量很多时。
但有时为了优化运行速度,不得不牺牲存储空间。
zy315 发表于 2006-1-5 11:16 Philips ARM ←返回版面
a
楼主问的是如何表示单个位的标志,只是为了改善程序的可读性,并没有关心速度的问题,位域显然是通过与或操作进行的,因为它并不能改变ARM处理器内核的访问存储器的本质操作,像51那种可位寻址的单元在ARM体系中不存在,访问单个位只能通过软件实现,效率势必比硬件直接支持的低。这样做只是增加程序的可读性。
被ZLG置顶的服务条款明确指明不对C语言语法进行技术支持服务,但给我们提供一个交流平台也是好的!
答 3: 谢谢上善若水 !!! 答 4: 哈哈……原来还在这么早的时间,我就跟 上善若水 兄有过聊天了俺倒把这事给忘了………………发现最近记性越来越差,不知道大家有什么好的建议没?怎样提高记忆力。。。 答 5: 51的位真害了几代人...晕菜~~~ 答 6: 这应该是第一次向圈圈提问,时间过得好快啊但我个人认为,用了μC/OS-II里的事件标志组,可以解决位变量的问题。一直没有深究过,不知大家怎么认为?
在C51在一般做法是这样:在2104中我怎么定义呢?
bit flag;
if(flag) {a=1;}
else {a=0;} 答 1: re:不支持bit,请定义为unsigned int或unsigned char类型。 答 2: 这个问题从前讨论过,建议有问题要问前,搜索一下旧贴上善若水 发表于 2006-1-4 20:23 Philips ARM ←返回版面
如何定义位变量?
C51有bit能声明只有一位的变量,很适合一些标志的定义,有效节省了内存空间。在使用了周立功模板的ADS中的c中有没有类似的位变量定义?难道我只是想定义一个标志变量也要定义为uint8?
zy315 发表于 2006-1-5 08:03 Philips ARM ←返回版面
RE
bit是51机C语言专用的数据类型,ANSI C中哪有这种类型??bit是为适应51机可位寻址的128bit区域。但 标准C语言里有个叫位域,也叫位段的东西,强制访问内存中的单个位,你可以看看谭浩强的那本书的第12章。
eleven11 发表于 2006-1-5 08:23 Philips ARM ←返回版面
位域会增加代码
其实就是与操作,和你定义某某位什么标志一样的操作
computer00 发表于 2006-1-5 08:42 Philips ARM ←返回版面
位段会增加代码量以及程序运行时间
对于32位的MCU来说,如果为了提高运行速度,有时使用32bit的反而会比使用8bit的运行速度快。使用1bit的也是同样的道理。
ARM的存储空间应该比较,你不必为省这么几个字节较真吧?如果实在是有太多的标志,使用位段也可以。
上善若水 发表于 2006-1-5 09:19 Philips ARM ←返回版面
请问computer00
“有时使用32bit的反而会比使用8bit的运行速度快。”是不是说把一些原本定义为8字节的变量,定义为32字节,虽然浪费了一定的内存空间,但是能提高运行速度?
computer00 发表于 2006-1-5 09:30 Philips ARM ←返回版面
是的。
因为在32位CPU上处理8bit的数据,为了保证最后结果的正确性,还要进行一些调整,例如与操作,去掉高24位等。
你可以看看生成的汇编代码就知道了。
当然,对于速度没有严格要求的场合,使用比较小的存储单元是好的做法,尤其是在变量很多时。
但有时为了优化运行速度,不得不牺牲存储空间。
zy315 发表于 2006-1-5 11:16 Philips ARM ←返回版面
a
楼主问的是如何表示单个位的标志,只是为了改善程序的可读性,并没有关心速度的问题,位域显然是通过与或操作进行的,因为它并不能改变ARM处理器内核的访问存储器的本质操作,像51那种可位寻址的单元在ARM体系中不存在,访问单个位只能通过软件实现,效率势必比硬件直接支持的低。这样做只是增加程序的可读性。
被ZLG置顶的服务条款明确指明不对C语言语法进行技术支持服务,但给我们提供一个交流平台也是好的!
答 3: 谢谢上善若水 !!! 答 4: 哈哈……原来还在这么早的时间,我就跟 上善若水 兄有过聊天了俺倒把这事给忘了………………发现最近记性越来越差,不知道大家有什么好的建议没?怎样提高记忆力。。。 答 5: 51的位真害了几代人...晕菜~~~ 答 6: 这应该是第一次向圈圈提问,时间过得好快啊但我个人认为,用了μC/OS-II里的事件标志组,可以解决位变量的问题。一直没有深究过,不知大家怎么认为?
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】结构堵孔导致的喇叭无声问题被打赏50分 | |
【我踩过的那些坑】分享一下调试一款AD芯片的遇到的“坑”被打赏50分 | |
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 |