zhangy_fullhan
zhangy_fullhan
This guy hasn't written anything yet

注册于 6 years ago

回答
0
文章
0
关注者
0

用GCC,打开newlib,这个就是标准的转换函数了。不过你们目前用的应该还是libc中的转换函数啊


atol("a00..0") 确实就应该是0,对的呀

恩恩。
还是对finsh用的不太熟啊。参数能直接传的,调试以为传的都是字符串来着。业务不熟啊= =

scons & RT-Thread building.py更新了,加入本地组的编译参数支持,欢迎反馈更多的建议

今天需求有改变。又开始搞编译东西 - -。。。。。。
又再次遇到了路径寻找问题。打印如下
duobao@ubuntu:~/work/fh6x_rtt/app$ scons --verbose
scons: Reading SConscript files ...
('p_line[1]: %s', '0xA0000000;
')
('TextBase:', '0xA0000000')
('EXEC_PATH is: %x', '/home/duobao/arm-2013.11/bin')
['/home/duobao/work/fh6x_rtt/app/drivers', '/home/duobao/work/fh6x_rtt/app/drivers/../Libraries', '/home/duobao/work/fh6x_rtt/app/drivers/../platform']
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build/bsp
arm-none-eabi-gcc -o /home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.o -c -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=soft -mno-unaligned-access -O0 -gdwarf-2 -DRT_USING_NEWLIB -I. -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/libcpu/arm/armv6 -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/libcpu/arm/common -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs/filesystems/ramfs -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs/filesystems/devfs -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/spi -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/libdl -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/libc/newlib -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/pthreads -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/finsh -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/include/ipv4 -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/arch/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/include/netif -Idrivers -ILibraries -Iplatform /home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.c
/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.c:3:21: fatal error: fh_arch.h: No such file or directory
#include "fh_arch.h"
^
compilation terminated.
scons: *** [/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.o] Error 1
scons: building terminated because of errors.
duobao@ubuntu:~/work/fh6x_rtt/app$

注意红字标注地方
开始打印的时候看到路径还是绝对地址,怎么到编译的时候就变成相对的了。纠结中,之前其实已经发现,但是因为编译过掉了。就没再管,这里又出现了。貌似需要你们支持下




问题找到了。cwd = GetCurrentDir()
这一部分写错了。导致是相对路径寻找。好在只有一处。改好就能编译通过。

scons & RT-Thread building.py更新了,加入本地组的编译参数支持,欢迎反馈更多的建议

今天需求有改变。又开始搞编译东西 - -。。。。。。
又再次遇到了路径寻找问题。打印如下
duobao@ubuntu:~/work/fh6x_rtt/app$ scons --verbose
scons: Reading SConscript files ...
('p_line[1]: %s', '0xA0000000;
')
('TextBase:', '0xA0000000')
('EXEC_PATH is: %x', '/home/duobao/arm-2013.11/bin')
['/home/duobao/work/fh6x_rtt/app/drivers', '/home/duobao/work/fh6x_rtt/app/drivers/../Libraries', '/home/duobao/work/fh6x_rtt/app/drivers/../platform']
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build/bsp
arm-none-eabi-gcc -o /home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.o -c -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=soft -mno-unaligned-access -O0 -gdwarf-2 -DRT_USING_NEWLIB -I. -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/libcpu/arm/armv6 -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/libcpu/arm/common -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs/filesystems/ramfs -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/dfs/filesystems/devfs -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/spi -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/drivers/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/libdl -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/libc/newlib -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/pthreads -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/finsh -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/include/ipv4 -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/arch/include -I/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/components/net/lwip-1.4.1/src/include/netif -Idrivers -ILibraries -Iplatform /home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.c
/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.c:3:21: fatal error: fh_arch.h: No such file or directory
#include "fh_arch.h"
^
compilation terminated.
scons: *** [/home/duobao/work/fh6x_rtt/rt-thread-stable-v2.0.x/bsp/fh881x-evm/drivers/uart.o] Error 1
scons: building terminated because of errors.
duobao@ubuntu:~/work/fh6x_rtt/app$

注意红字标注地方
开始打印的时候看到路径还是绝对地址,怎么到编译的时候就变成相对的了。纠结中,之前其实已经发现,但是因为编译过掉了。就没再管,这里又出现了。貌似需要你们支持下

lwip目录下有个ping.c ,虽然是应用程序,但是可以当作 ping 来用 ,

另可否分享下源代码,最近我也在研究 GMAC,在开启接收中断后就会收到大量中断(无法进入命令行了),在中断中intrrupt_disable_all 也不好用,rt_kprintf 打印寄存器值已经写0了. 不知道为什么,

我这也是卡死在中断,先用轮询模式搞吧,可以留下你的联系方式


QQ :562892716

用的gmac控制器可能不一样,要看你gmac硬件连接了,有可能是内部封掉了phy,有可能外接。我这是外接的phy。软件大体思路都差不多。做一个参考吧。

lwip目录下有个ping.c ,虽然是应用程序,但是可以当作 ping 来用 ,

另可否分享下源代码,最近我也在研究 GMAC,在开启接收中断后就会收到大量中断(无法进入命令行了),在中断中intrrupt_disable_all 也不好用,rt_kprintf 打印寄存器值已经写0了. 不知道为什么,

我这也是卡死在中断,先用轮询模式搞吧,可以留下你的联系方式

ringbuffer就是FiFo, components/drivers/src

这个ring buff是不是专门针对内存的?
我想要的是一种针对数据结构的。就是rtt仅仅提供对fifo的管理,比如有多少数据元素,元素出fifo,元素进fifo什么的。但是不管数据类型是什么样子的。有没有这样的接口?


rt_size_t rt_ringbuffer_put(struct rt_ringbuffer *rb, const rt_uint8_t *ptr, rt_uint16_t length);
rt_size_t rt_ringbuffer_get(struct rt_ringbuffer *rb, rt_uint8_t *ptr, rt_uint16_t length);
这个接口就可以,读取和写入时按照你的结构体大小操作,同时在初始化时指定的缓冲区大小得是结构体的整数倍。

也可以。那我这里需要再封装一层接口。感觉还是链表吧。简单点

eth_rx怎么会返回野指针呢?如果包读空了,需要返回空指针。

恩。我代码的bug而已,一个纠结的问题是上层调用eth_rx并不是完全由我底层驱动唤醒的,感觉是上层有一个类似定时守护进程轮询调用eth_rx。可能我用中断方式总是出不来是这个原因。轮询方式还是比较稳定的。跑了一个周末没问题。:)

eth发送是在etx线程里进行,调用eth_tx函数时,默认认为底层驱动已经发送成功;
接收,
是EMAC ISR到达后,通过eth_device_ready来唤醒erx任务来接收数据,获得pbuf后,把pbuf数据提交给协议栈。pbuf内存是协议栈释放的

我明天看看你们的GMAC驱动代码吧

ok,谢谢,我这知道大概流程就行。


网络现在使用轮训模式发送,基本调通,这里遇到一个问题。
协议栈貌似在调用.eth_rx 函数时候,并不是全部由驱动底层调用eth_device_ready()函数进行唤醒的。调试时候发现偶尔会进入.eth_rx函数,造成返回p_buf的野指针,上层协议栈出错,目前没去查协议栈方面的代码。现在会初始化返回指针为空就好了。。

eth发送是在etx线程里进行,调用eth_tx函数时,默认认为底层驱动已经发送成功;
接收,
是EMAC ISR到达后,通过eth_device_ready来唤醒erx任务来接收数据,获得pbuf后,把pbuf数据提交给协议栈。pbuf内存是协议栈释放的

我明天看看你们的GMAC驱动代码吧

ok,谢谢,我这知道大概流程就行。


struct pbuf {
struct pbuf *next;
void *payload;
u16_t tot_len;
u16_t len;
u8_t /*pbuf_type*/ type;
u8_t flags
u16_t ref;
};
当硬件收到多个数据包的时候,框架是希望我把每个包做成一个链表,最后填上total_len传上去,还是合成一个整包传上去?驱动接收函数需要填写上面结构体哪些参数?

eth发送是在etx线程里进行,调用eth_tx函数时,默认认为底层驱动已经发送成功;
接收,
是EMAC ISR到达后,通过eth_device_ready来唤醒erx任务来接收数据,获得pbuf后,把pbuf数据提交给协议栈。pbuf内存是协议栈释放的

我明天看看你们的GMAC驱动代码吧

ok,谢谢,我这知道大概流程就行。

最近gmac驱动总是不稳定,跑一阵就在串口打印乱码。需要重新看下代码。
这里有俩个问题:
1:发送:
/* call driver's interface */
if (enetif->eth_tx(&(enetif->parent), msg->buf) != RT_EOK)
上面是上层调用底层的发送接口进行数据发送,看样子发送采用的是阻塞形式的同步发送。没有采用靠底层回调上层的发送完成函数来实现异步,所以我底层驱动应该完成的是一种阻塞形式的发送。。
2:接收:
与发送一样的情况,底层是否应该实现阻塞形式的接收?驱动在底层会申请一个buff,用来保存硬件接收到的数据。代码如下
pbuf_alloc
但是内存的释放是由底层驱动进行还是上层释放?上层在哪里进行的释放?

ringbuffer就是FiFo, components/drivers/src

这个ring buff是不是专门针对内存的?
我想要的是一种针对数据结构的。就是rtt仅仅提供对fifo的管理,比如有多少数据元素,元素出fifo,元素进fifo什么的。但是不管数据类型是什么样子的。有没有这样的接口?

是的,不支持这个功能。CPPPATH会加入全局的。

现在一些驱动因为历史原因,会有多层目录结构,可能会出现多个同名的头文件和宏定义。
不知道有什么解决办法没有

最近看了master分支的编译工具有更新,请问有什么例子能够参考么?
我这里用了新的编译工具,发现没有编译通过,图示如下
AttributeError: 'list' object has no attribute 'abspath':
File "/home/xxxxx/work/xxx_rtt/rt-thread-stable-v2.0.x/bsp/xxx/SConstruct", line 42:
DoBuilding(TARGET, objs)
File "/home/xxxxx/work/xxx_rtt/rt-thread-stable-v2.0.x/tools/building.py", line 488:
if source.abspath == obj.abspath or (len(obj.sources) > 0 and source.abspath == obj.sources[0].abspath):


刚才试了一下,用新的工具,在windows环境下可以使用,但是在linux环境下不能使用。PS:(我们这都是在linux环境下开发的)

是的,不支持这个功能。CPPPATH会加入全局的。

现在一些驱动因为历史原因,会有多层目录结构,可能会出现多个同名的头文件和宏定义。
不知道有什么解决办法没有

最近看了master分支的编译工具有更新,请问有什么例子能够参考么?
我这里用了新的编译工具,发现没有编译通过,图示如下
AttributeError: 'list' object has no attribute 'abspath':
File "/home/xxxxx/work/xxx_rtt/rt-thread-stable-v2.0.x/bsp/xxx/SConstruct", line 42:
DoBuilding(TARGET, objs)
File "/home/xxxxx/work/xxx_rtt/rt-thread-stable-v2.0.x/tools/building.py", line 488:
if source.abspath == obj.abspath or (len(obj.sources) > 0 and source.abspath == obj.sources[0].abspath):

system does not support working directory

打开working directory,rtconfig.h: DFS_USING_WORKDIR

OK
可以了。谢谢了。

回到
顶部

发布
问题