-
就在浦东软件园,金科路上。以前每次下班都会路过。 外企一般办公环境都很好,工作区,休息区,茶水间都很棒!!! :victory:
-
顶一帖,兄弟!我来晚了!!!:victory:
-
服了???为什么总是回复了才能看,烦不烦啊!!!
-
这么神秘,希望不要太差吧
-
1. 你这个问题描述的太模糊了,你用的是什么cpu啊,哪个系类的。。。。神马都没说,就直接说gpio,谁知道呢。。。
2. 给你个建议,如果是ARM cpu,一般GPIO会有复用功能,你要先找到datasheet,看这组GPIO的功能,若当做GPIO使用,则使用前首先配置为GPIO模式,然后才是DIR。。。。
3. 看看硬件设计中,其他模块和你这个模块共用了这些gpio
-
本帖最后由 风亦路 于 2014-4-21 23:17 编辑
给你几点建议:
首先确保Makefile文件正确
1. 看这个Makefile是否被编译到了:
加上一句,下面红色字体
ifeq ($(DEBUG),y)
#error “DEBUG = y”
DEBFLAGS = -O -g -DSCULL_DEBUG # "-O" is needed to expand inlines
else
DEBFLAGS = -O2
endif
看编译的时候是否报错 error: #error “DEBUG = y”,如果报错,说明此时 -DSCULL_DEBUG起到作用了,如果没有,则说明makefile没有起到作用,那你再找一下其他原因。
2. 是否在别处也定义了DEBUG,与此定义冲突了,此时用 DEBUG := y 试试。 (scull中是直接用DEBUG = y定义的,看看自己是否在其它地方有此定义)
不知道是否有用,谢谢
-
:){:1_138:}
-
download ,看看
-
正好可以看看,谢谢楼主喽!
-
好东西,多谢楼主了
-
多谢楼主了:)
-
呵呵,祝贺祝贺!:)
-
又来看一遍,希望自己在工作中也能有更大的突破
-
谢谢楼主了:)
-
好东西,有学习了:)
-
距离确实有点远了,所以这个时候再用这么大的电阻估计就不行了。 估计是回路的容抗太大,电阻改小一点吧,2.4K,1K,510欧一点一点的试吧!
-
:) ,18B20与CPU之间连接 有多远的距离呀?
-
多谢楼主了,:)
-
个人感觉:
一开始先学C51还是很好的,因为大部分人都学过C,所以很容易入门,不至于走弯路。
如果感觉C基本上学的很好了,基本上能操作CPU了,然后再回过头来学汇编,会比较轻松,并且你会感觉到汇编的精妙之处,同时也会很清楚以前的C代码的不足之处。
当你做过很多项目之后,你就会发现,什么汇编还是C之类的都是相通的,编程最重要的是思想,也就是程序的流程,等你把流程设计出来之后,无论是汇编还是C都是可以实现的(如果不像DSP之类对效率要求很严格的情况下)。
为什么说想把C51学透,必须要懂一些汇编,或者说要对CPU底层构架很清晰呢?
下面举几个例子:
1. char [200] ; 这条语句在语法上应该没错的,但实际情况就不同了,如果你写在C51的编辑器中,会报错,为什么呢?
因为51内部可用的数存最大为128B,包括堆栈,20-2F位寻址区等。所以你能定义一个char【50】,就已经很牛了······
2. 如果想在51内部30H处存放一个数据0x10.。 用汇编语言有两种方法: (1 ). mov 30H , #10H; 直接寻址
(2). mov R0 ,#30H; mov @R0 ,#10H 间接寻址
一般情况,我们都会用第一种。因为比较简单
如果用C语言该怎么表示呢?
一般都会用绝对寻址方式: *((unsigned char *)0x30)= 0x10;
那这句话对应的汇编哪一个呢, 回答是第二种,因为C语言不可以直接寻址。 它必须先定义一个指针,这个指针存放在R0或R1中,然后用这个指针变量来寻址。 再看下面一个定义: char ***p; 这句话在语法中是没问题的,但是实际情况肯定是不行的。 因为对于51来说可以用作寻址单元(指针)也就只有R0和R1两个单元。 我们平时定义了许多指针,都是两个单元相互协调,并且有释放过程,所以没什么问题,但是一旦一下同时定义了一个指针的指针的指针就会出现覆盖的现象,到最后就会发现意想不到的现象······
3. 用bit, sbit (1位) 或者bdata (8位)定义的变量就是存放在20-2F(128b)处,所以,当你的代码很长时,一定要记得不要越界,所以尽量不要使用全局变量。
4. 这是当初让我很头疼的一个问题:我还做了标记
void writebyte(uchar dat) //写一个字节,上升沿输入
{
uchar i=0;
ACC=dat;
for(i=8;i>0;i--)//????? 问题就出在这!为什么只能用减的循环形式??
{
T_IO=ACC0;
T_CLK=1;
T_CLK=0;
ACC>>=1;
}
}
一开始用for(i=0;i
-
什么高手呀! 我也是从51一步一步过来的。
个人感觉:
一开始先学C51还是很好的,因为大部分人都学过C,所以很容易入门,不至于走弯路。
如果感觉C基本上学的很好了,基本上能操作CPU了,然后再回过头来学汇编,会比较轻松,并且你会感觉到汇编的精妙之处,同时也会很清楚以前的C代码的不足之处。
当你做过很多项目之后,你就会发现,什么汇编还是C之类的都是相通的,编程最重要的是思想,也就是程序的流程,等你把流程设计出来之后,无论是汇编还是C都是可以实现的(如果不像DSP之类对效率要求很严格的情况下)。
为什么说想把C51学透,必须要懂一些汇编,或者说要对CPU底层构架很清晰呢?
下面举几个例子:
1. char [200] ; 这条语句在语法上应该没错的,但实际情况就不同了,如果你写在C51的编辑器中,会报错,为什么呢?
因为51内部可用的数存最大为128B,包括堆栈,20-2F位寻址区等。所以你能定义一个char【50】,就已经很牛了······
2. 如果想在51内部30H处存放一个数据0x10.。 用汇编语言有两种方法: (1 ). mov 30H , #10H; 直接寻址
(2). mov R0 ,#30H; mov @R0 ,#10H 间接寻址
一般情况,我们都会用第一种。因为比较简单
如果用C语言该怎么表示呢?
一般都会用绝对寻址方式: *((unsigned char *)0x30)= 0x10;
那这句话对应的汇编哪一个呢, 回答是第二种,因为C语言不可以直接寻址。 它必须先定义一个指针,这个指针存放在R0或R1中,然后用这个指针变量来寻址。 再看下面一个定义: char ***p; 这句话在语法中是没问题的,但是实际情况肯定是不行的。 因为对于51来说可以用作寻址单元(指针)也就只有R0和R1两个单元。 我们平时定义了许多指针,都是两个单元相互协调,并且有释放过程,所以没什么问题,但是一旦一下同时定义了一个指针的指针的指针就会出现覆盖的现象,到最后就会发现意想不到的现象······
3. 用bit, sbit (1位) 或者bdata (8位)定义的变量就是存放在20-2F(128b)处,所以,当你的代码很长时,一定要记得不要越界,所以尽量不要使用全局变量。
4. 这是当初让我很头疼的一个问题:我还做了标记
void writebyte(uchar dat) //写一个字节,上升沿输入
{
uchar i=0;
ACC=dat;
for(i=8;i>0;i--)//????? 问题就出在这!为什么只能用减的循环形式??
{
T_IO=ACC0;
T_CLK=1;
T_CLK=0;
ACC>>=1;
}
}
一开始用for(i=0;i