搜索
bottom↓
回复: 25

ICCavr6.31a软件的一个漏洞,大家来看看!!!无语中

[复制链接]

出0入0汤圆

发表于 2010-10-16 16:28:04 | 显示全部楼层 |阅读模式
下面的代码我怎么编译都提示相同的错误,即使只留下main函数,都报相同的错误,,,,无语中,请高手指点
#include<iom48v.h>
#include<macros.h>
#include ".\head\ICC_AVRPORTBit.h"
/************74HC595端口定义***************/
#define hc595_data PORTC_PC2
#define hc595_clk  PORTC_PC1
#define hc595_stcp PORTC_PC0
void hc595_send_byte(unsigned char byte)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                hc595_data=byte&1<<i;
                hc595_clk=1;
                hc595_clk=0;
        }
}
void hc595_send_int(int data1,int data2)
{
        hc595_send_byte(data1);
        hc595_send_byte(data2);
        hc595_stcp=1;
        hc595_stcp=0;
}
void main()
{
    int i;
    while(1)
        {
              hc595_send_byte(0xee);
        }
}

(原文件名:未命名.jpg)

出0入0汤圆

发表于 2010-10-16 16:35:51 | 显示全部楼层
不要动不动就怀疑是人家的漏洞,先找找自己的漏洞

1、项目文件选择芯片型号了吗?
2、你的工程里有几个文件?有几个main函数?
头像被屏蔽

出0入0汤圆

发表于 2010-10-16 16:42:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2010-10-16 18:03:32 | 显示全部楼层
回复【2楼】bbs2009
-----------------------------------------------------------------------

没有

出0入0汤圆

 楼主| 发表于 2010-10-16 18:05:02 | 显示全部楼层
回复【1楼】skyhu
-----------------------------------------------------------------------

1、选了m48
2、就这一个文件




奇怪的是我把上面的代码粘贴到以前的一个例子上,并没有报错,不知为什么

出0入0汤圆

发表于 2010-10-16 19:31:57 | 显示全部楼层
#define hc595_clk  PORTC_PC1

hc595_clk=1;

hc595_clk=0;

这个是怎么做到的,效率怎么样?

出0入0汤圆

发表于 2010-10-16 19:34:04 | 显示全部楼层
看上去工程路径中有中文,放到纯英文路径下试试看

出0入0汤圆

 楼主| 发表于 2010-10-17 13:44:29 | 显示全部楼层
回复【5楼】hsztc
-----------------------------------------------------------------------

我参考傻孩子的头文件写的:

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=444826&bbs_page_no=1&search_mode=4&search_text=xtaens&bbs_id=9999

出0入0汤圆

 楼主| 发表于 2010-10-17 13:46:15 | 显示全部楼层
回复【6楼】h2feo4 无机酸
-----------------------------------------------------------------------

我以前也在中文路径中用都没事的,谢谢啊

出0入0汤圆

 楼主| 发表于 2010-10-17 13:47:52 | 显示全部楼层
问题解决了:重装那个软件后就没有问题了,好像是杀毒软件把有的文件给吃了



谢谢给位的回答啊

出0入0汤圆

发表于 2010-10-17 14:32:17 | 显示全部楼层
BS怀疑软件的。。。。
头像被屏蔽

出0入0汤圆

发表于 2010-10-17 14:33:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2010-10-17 15:12:03 | 显示全部楼层
(0111) _PD1 = 1;
_main:
    00035 B382      IN        R24,0x12
    00036 6082      ORI        R24,2
    00037 BB82      OUT        0x12,R24
(0112)
(0113) _PD1 = 0;
    00038 B382      IN        R24,0x12
    00039 7F8D      ANDI        R24,0xFD
    0003A BB82      OUT        0x12,R24

哈哈,相当高效,虽然不是位操作,但跟位操作只差一个时钟周期。


以前我电脑中毒的时候也出现类似的问题,以前是重装完后把bin这个文件夹压缩起来备份,

一出问题就解压覆盖掉原来的bin就可以正常使用了,但基本一重启电脑又出问题了,又要解压bin

后来装了新杀毒软件杀出了好多毒,之后上面的问题就没了...

出0入0汤圆

发表于 2010-11-3 12:16:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-3 13:49:24 | 显示全部楼层
【12楼】 hsztc

这还高效吗-_-

iccavr最笨的就是连位域都优化不好....avr的io明明是有位操作指令的...

你换iar,winavr(gcc)位域在IO上应该都是位操作

出0入0汤圆

 楼主| 发表于 2010-11-3 18:12:35 | 显示全部楼层
回复【14楼】snoopyzz
-----------------------------------------------------------------------

楼上的意思是icc不好了?

出0入0汤圆

发表于 2010-11-3 19:49:03 | 显示全部楼层
【14楼】 snoopyzz

ICC也是有位操作的,比如 PORTB|=(1<<1);  PORTB&=~(1<<1); 生成的就是位操作。

如果舍不得多一个周期的话就用上面的。


“你换iar,winavr(gcc)位域在IO上应该都是位操作 ”

这个是你认为的,有部分IO口是不能位操作的。

出0入0汤圆

发表于 2010-11-4 08:51:56 | 显示全部楼层
只有低32个IO是可以位操作的,我懂AVR汇编的....
另外不只是多一个周期的事,多了好几个字节-_-

位域在这个32个IO上的操作明明应该转化成位操作的....ICCAVR这点笨我有说错??

我在ICCAVR 中只好用宏定义出GPIO_OUT0(LED1); GPIO_OUT1(LED1); 或者GPIO_OUT(LED1, 0); GPIO_OUT(LED1, 1);的方式,就是用|= &=~实现的

#define LED1    A,1

#define GET_PORT(x, bit)                (PORT ## x)
#define GET_PIN( x, bit)                (PIN ## x)
#define GET_BIT( x, bit)                (bit)
#define        GET_REG( x, bit)                (x)

#define GPIO_OUT1(portx_bit)                ( GET_PORT(portx_bit) |=  BIT(GET_BIT(portx_bit)) )
#define GPIO_OUT0(portx_bit)                ( GET_PORT(portx_bit) &= ~BIT(GET_BIT(portx_bit)) )

出0入0汤圆

发表于 2010-11-5 00:33:36 | 显示全部楼层
...

这个宏定义不错,学习了。

出0入0汤圆

发表于 2010-11-5 01:21:01 | 显示全部楼层
加点内容

#define LED1  B,1    //PB1接LED1
#define KEY1  B,2    //PB2接按键

#define GET_PORT(x, bit) (PORT ## x)
#define GET_DDR( x, bit) (DDR ## x)
#define GET_PIN( x, bit) (PIN ## x)
#define GET_BIT( x, bit) (bit)

#define GPIO_IN(pinx_bit)      ( GET_PIN(pinx_bit) & ( 1<< GET_BIT(pinx_bit) ) )
#define GPIO_OUT1(portx_bit)   ( GET_PORT(portx_bit) |=  (1<<GET_BIT(portx_bit)) )
#define GPIO_OUT0(portx_bit)   ( GET_PORT(portx_bit) &= ~(1<<GET_BIT(portx_bit)) )
#define GPIO_DDR_OUT(ddrx_bit) ( GET_DDR(ddrx_bit) |=  (1<<GET_BIT(ddrx_bit)) )
#define GPIO_DDR_IN(ddrx_bit)  ( GET_DDR(ddrx_bit) &= ~(1<<GET_BIT(ddrx_bit)) )






GPIO_DDR_IN(KEY1);    //KEY1的端口设为输入
GPIO_OUT1(KEY1);      //KEY1的端口带上拉
GPIO_DDR_OUT(LED1);   //LED1的端口设为输出

if(GPIO_IN(KEY1)==0)  //读按键
GPIO_OUT0(LED1);      //输出电电平
else
GPIO_OUT1(LED1);      //输出低电平

出0入0汤圆

发表于 2010-11-5 05:52:45 | 显示全部楼层
"ICCavr6.31a软件的一个漏洞,"

you should learn what compiler optimization is and how to code correctly before making wild claims.

出0入0汤圆

发表于 2010-11-8 13:16:23 | 显示全部楼层
hsztc加的不错,

我就是这么做的,只是没贴全,因为要重新排版...怕麻烦-_-

本BBS贴代码太累...Tab全走样了...

出0入296汤圆

发表于 2010-11-8 18:42:47 | 显示全部楼层
to 【21楼】 snoopyzz
    就不应该用tab嘛……

出0入0汤圆

发表于 2010-11-14 23:00:36 | 显示全部楼层
ICC不支持16位以上的移位操作。
首先,定义:
#define  BIT(X)   (1 << (X))
然后,使用BIT(0)、BIT(15),皆正常;而使用BIT(16)、BIT(17)等,将出现编绎警告。大意是,16位以上的移位操作未定义。

出0入0汤圆

发表于 2010-11-15 00:20:41 | 显示全部楼层
【23楼】 qiu452555846

只有不会用的,没有不行的...

#define  BIT(X)   (1ul << (X))

出0入0汤圆

发表于 2010-11-16 20:44:34 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 20:20

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

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