共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |