搜索
bottom↓
回复: 26

在pic32平台下调通uart发送和中断接受,但尝试打开finsh,却总是编译通不过

[复制链接]

出0入0汤圆

发表于 2011-8-31 18:36:15 | 显示全部楼层 |阅读模式
今天终于有空在pic32 Ethernet stater kit上调试RTT,依照STM32F107中串口驱动的写法,移植到pic32上。写了个回显的线程,显示串口发送和中断接收是正常,然后继续调试finsh,发现编译通不过。编译器提示“undefined reference to 'strdup'”和“undefined reference to '_alt_partition_FSymTab_start'”等。
我想请问一下不是说finsh是用C实现的吗?移植起来应该直接可用把,那为什么编译通不过?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-31 18:52:22 | 显示全部楼层
这个需要处理一下. _alt_partition_FSymTab_start是因为从NIOS里同复制的,需要改改.(已改但因为串口中断有问题所以没提交)

另请帮测试一下芯片的中断是否有问题.我的芯片老发现会出两次中断.
稍候给楼主发邮件.

出0入0汤圆

 楼主| 发表于 2011-8-31 20:11:06 | 显示全部楼层
对于pic32 uart中断来说,出现这些问题都是正常的,以前一项目中使用串口发送中断调试了老长时间,后来调试串口接收中断也有问题,都是出现不可预料的进入中断,但还是可以使用软件避免。
你可以放上来,我明天到公司给你测一下。

出0入0汤圆

 楼主| 发表于 2011-9-1 11:23:43 | 显示全部楼层
再问一下这次提交的版本会不会支持以太网?

出0入0汤圆

发表于 2011-9-1 13:42:02 | 显示全部楼层
已提交串口和finsh相关的. 串口有问题, 表现在 我PC发送一个字节如0x61,会发生两次接收中断,于是finsh返回 0x61 0x00.

以太网按官方的驱动修改了一下,可以ping通.但也存在串口一样的问题,收到一个包会发生多次中断.
加上改得乱78糟.所以就不提交了.

串口修改了一份已发到你邮箱.

出0入0汤圆

 楼主| 发表于 2011-9-1 14:29:07 | 显示全部楼层
能否发到这个帖子上,我在公司打不开外面的邮箱。

出0入0汤圆

发表于 2011-9-1 14:32:13 | 显示全部楼层
点击此处下载 ourdev_673174DXJBYA.zip(文件大小:2K) (原文件名:uart.zip)

出0入0汤圆

 楼主| 发表于 2011-9-1 16:55:36 | 显示全部楼层
我代码发不出来,要不我就放上来了。
看了你的代码,大致上发现你在读取串口数据时,没有判断是否available。在available时再去读数据应该就ok了。
另外你的代码很多都是直接操作寄存器的,能否使用库函数呢?
还有uart写数据时,不用等待写完吧,pic32的串口有fifo的。

想请教你一下,那个finsh部分怎么搞啊。是要在ld文件中把符号定义增加到.text段中吗?看stm32是这样做的,
那就是要改elf32pic32mx.x,但这个文件mplab不识别。所以该如何处理?

出0入0汤圆

发表于 2011-9-1 18:38:50 | 显示全部楼层
目录里面有个.ld文件,那个是链接脚本之一。 具体看自带的示例。

出0入0汤圆

 楼主| 发表于 2011-9-1 18:59:40 | 显示全部楼层
回复【8楼】ffxz
目录里面有个.ld文件,那个是链接脚本之一。 具体看自带的示例。
-----------------------------------------------------------------------

谢谢ffxz,我明白了

出0入0汤圆

发表于 2011-9-1 19:18:22 | 显示全部楼层
"没有判断是否available。在available时再去读数据应该就ok了"
代码是按自带的示例写的.
可能需要判断available,但中断会进两次的原因依然没查清楚..

"另外你的代码很多都是直接操作寄存器的,能否使用库函数呢? "
当然可以.这个无关紧要.只要能实现需求.

"还有uart写数据时,不用等待写完吧,pic32的串口有fifo的。 "
那应该改为等待FIFO有空即可写入.

楼主的芯片测试会进两次中断吗?

出0入0汤圆

 楼主| 发表于 2011-9-1 20:08:05 | 显示全部楼层
也有这个问题吧,但我都忽略它了,因为使用软件处理了。明天看看能否查找到原因。

另外发现编译器有如下警告:
../../../libcpu/mips/pic32/context_gcc.S: Assembler messages:
../../../libcpu/mips/pic32/context_gcc.S:38: Warning: Tried to set unrecognized symbol: mips3

../../../libcpu/mips/pic32/context_gcc.S:38: Warning: Tried to set unrecognized symbol: mips0

../../../libcpu/mips/pic32/context_gcc.S:53: Warning: Tried to set unrecognized symbol: mips3

../../../libcpu/mips/pic32/context_gcc.S:53: Warning: Tried to set unrecognized symbol: mips0

../../../libcpu/mips/pic32/context_gcc.S:121: Warning: Tried to set unrecognized symbol: mips3

../../../libcpu/mips/pic32/context_gcc.S:121: Warning: Tried to set unrecognized symbol: mips0

这个有没有什么隐患?

出0入0汤圆

 楼主| 发表于 2011-9-2 00:45:45 | 显示全部楼层
备份ourdev_673310ZLSKZL.rar(文件大小:368K) (原文件名:pic32ethernet.rar)

再次备份一下
自己备份ourdev_673592OHZHRB.rar(文件大小:348K) (原文件名:pic32ethernet.rar)

出0入0汤圆

 楼主| 发表于 2011-9-2 10:25:55 | 显示全部楼层
原因查明,我在进入中断时,先清中断标志,然后读取数据,结果会再进一次中断。以前也有发现这个问题,后来没去总结。
因为我写的驱动是从STM32F107移植的(最后才清中断标志),所以碰不到这个问题。
我们可以在出中断时再去清中断标志位。
还有pic32的spec关于一些细节都没有介绍,网上也没有这方面的使用讨论,FAE就熟悉example,问了也白问,真是让人蛋疼。

另外我finsh还没调好,我是按照explicit_linker_script做的,没成功,求指点啊!上面是相应问题文件,帮忙看看什么问题。密码flor

出0入0汤圆

发表于 2011-9-2 13:41:04 | 显示全部楼层
回复【11楼】flor  独臂老人
-----------------------------------------------------------------------
关系不大. 上下文切换使用的是MIPS共用部分.而PIC使用的是MIPS M4K核,所以有些标记不支持.
而JZ和龙芯都是支持的,所以这里不好修改,少数服从多数,先无视了.
如果实际项目中,可以根据实际情况去掉这些.

出0入0汤圆

发表于 2011-9-2 13:51:07 | 显示全部楼层
回复【14楼】aozima  
回复【11楼】flor  独臂老人
-----------------------------------------------------------------------
关系不大. 上下文切换使用的是mips共用部分.而pic使用的是mips m4k核,所以有些标记不支持.
而jz和龙芯都是支持的,所以这里不好修改,少数服从多数,先无视了.
如果实际项目中,可以根据实际情况去掉这些.
-----------------------------------------------------------------------

如果确实不同,这部分建议独立出来,没必要大家一起使用。

出0入0汤圆

发表于 2011-9-2 13:58:39 | 显示全部楼层
回复【13楼】flor  独臂老人
-----------------------------------------------------------------------
默认elf32pic32mx.x中会INCLUDE procdefs.ld

每个型号都有一个私有的procdefs.ld,里面的size等都不同.
而elf32pic32mx.x是公用的.里面的内容一般不建议随意修改,除非确认修改是无误的.

工程文件所在目录处在搜索目录中靠前,所以当工程目录中有procdefs.ld时,会优先使用工程目录中的.不然会根据型号选择对应的.
而且procdefs.ld比较简单,且size是在这里设置的.比较合适.

所以建议使用自定义 procdefs.ld 来实现添加section.

出0入0汤圆

 楼主| 发表于 2011-9-2 14:50:48 | 显示全部楼层
回复【16楼】aozima
回复【13楼】flor  独臂老人
-----------------------------------------------------------------------
默认elf32pic32mx.x中会include procdefs.ld
每个型号都有一个私有的procdefs.ld,里面的size等都不同.
而elf32pic32mx.x是公用的.里面的内容一般不建议随意修改,除非确认修改是无误的.
工程文件所在目录处在搜索目录中靠前,所以当工程目录中有procdefs.ld时,会优先使用工程目录中的.不然会根据型号选择对应的.
而且procdefs.ld比较简单,且size是在这里设置的.比较合适.
所以建议使用自定义 procdefs.ld 来实现添加section.
-----------------------------------------------------------------------

谢谢,很详细。

但是我在ld文件中增加
__fsymtab_start = .;
....
....
__vsymtab_end = .;
把finsh中所有C文件加入到工程中,打开finsh,编译提示 finsh_var.c:100: undefined reference to 'strdup'
这是不是说这个函数被优化掉了?
还有连个提示:ld.exe: small-data section exceeds 64KB; lower small-data size limit (see option -G)

relocation truncated to fit: R_MIPS_GPREL16 against '__fsymtab_start'等
这也不明白。

出0入0汤圆

 楼主| 发表于 2011-9-2 16:47:06 | 显示全部楼层
aozima:
搞的头大,也没编译成功。能不能给个编译通过的例子?

出0入0汤圆

发表于 2011-9-2 19:08:05 | 显示全部楼层
SVN中不是已经更新了么???????

出0入0汤圆

发表于 2011-9-2 19:10:21 | 显示全部楼层
ld.exe: small-data section exceeds 64KB; lower small-data size limit (see option -G)

这个搜索 MIPS GP 64K
finsh已为符号表加上const修饰.不会出现这个了.
如果以后全局变量超64K,可以在编译参数里面加上  -Gn  (-G0即为不使用GP)

出0入0汤圆

 楼主| 发表于 2011-9-2 21:59:00 | 显示全部楼层
没去关注svn更新,刚去下载了一份,发现几乎天天有更新。

照svn版本和我使用的比对了一下,发现
finsh_var.c:100: undefined reference to 'strdup'
是使用#define RT_USING_NEWLIB引起的,看来我对rtt的一些设定还是非常不了解啊,以后还要多学习。

感谢aozima和ffxz 学到不少东西啊

出0入0汤圆

发表于 2011-9-2 22:24:43 | 显示全部楼层
strdup这些.编译器自带的库可能有,可能没有...是个很恼火的问题.
单片机的库都实现得不全.每个平台都不一样.是很让人头大.
不知道有什么好的解决办法

出0入0汤圆

 楼主| 发表于 2011-9-3 00:44:23 | 显示全部楼层
我还不懂strdup是干什么的,百度了一下好像=malloc+strcpy

这个系统里面有好多东西都比较陌生,不知该如何学起啊!

出0入0汤圆

发表于 2011-9-8 15:31:58 | 显示全部楼层
回复【3楼】flor  独臂老人
再问一下这次提交的版本会不会支持以太网?
-----------------------------------------------------------------------
改进了一下驱动.目前仅实现简单地收发功能.还没能让描述符环表转起来.

点击此处下载 ourdev_675307T68HJ1.zip(文件大小:804K) (原文件名:rt_thread_pic32_lwip_test.zip)

出0入0汤圆

 楼主| 发表于 2011-9-8 15:34:30 | 显示全部楼层
回复【24楼】aozima
回复【3楼】flor  独臂老人
再问一下这次提交的版本会不会支持以太网?
-----------------------------------------------------------------------
改进了一下驱动.目前仅实现简单地收发功能.还没能让描述符环表转起来.
点击此处下载  (原文件名:rt_thread_pic32_lwip_test.zip)  

-----------------------------------------------------------------------

太好了,我正在学习pic32 eth的example,多谢啊。

出0入0汤圆

发表于 2011-9-8 19:20:25 | 显示全部楼层
回复【25楼】flor  独臂老人
回复【24楼】aozima
回复【3楼】flor  独臂老人
再问一下这次提交的版本会不会支持以太网?
-----------------------------------------------------------------------
改进了一下驱动.目前仅实现简单地收发功能.还没能让描述符环表转起来.
点击此处下载  (原文件名:rt_thread_pic32_lwip_test.zip)  
-----------------------------------------------------------------------
太好了,我正在学习pic32 eth的example,多谢啊。
-----------------------------------------------------------------------
请方便时帮把eth驱动修修,现在是照给的示例改的,很多地方搭配不太好.
另外.移植应该还是有问题的.现在还没有给这个分支做过任何测试.发现经常会发生bus error.
而现在的跟综功能没有.看来有空得研究一下MIPS如何跟综回去.好找出问题点.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-15 21:03

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

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