knight_hu
knight_hu

注册于 9 years ago

回答
4
文章
0
关注者
0

果然还是每次只能返回一帧么?那是不是如果硬件接收速度比较快的话,需要在编写一个fifo机制,完成单帧送入lwip呢?

感谢大神的解答,终于解决了我这两天的疑问!

那具体的的rt_hw_local_irq_disable是在哪里实现的呢?

这两天也在折腾zynq,碰到和楼主一样的问题,仔细检查后发现,应该是uart驱动里面写的不够严谨造成的,具体地方请见:

static rt_err_t uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg)

这个函数里面的这句话

        /* enable uart clock. Divider 0x14 gives 50MHZ ref clock on IO PLL input. */
        __REG32(Zynq7000_SLCR_BASE+Zynq7000_SLCR_UART_CLK_CTRL) |= (0x14 << 8) | 0x01;

这里的目的是设定分频系数,但是设定方法是直接在原有基础上采取了或运算,但是问题也就出在这里,因为在载入rtt镜像前,不管是前处理程序或者uboot都会对这个寄存器进行操作,把uart外设的输入频率设置成100M,至少我这边用的xilinx的原厂sdk是这么做的,那在原有数据的基础上,再叠加一个或运算,那这个分频系数,未必就是你想要的20,比如原来我这个里面启动程序设定的就是0xa,当执行了上面这句,就相当远0x0a | 0x14 = 0x1e,所以分频结果就不可能是50M,而是33.333M了,所以串口出来的数据就肯定是乱的了。知道原因后怎么修改应该不用说了吧

这个问题暂时解决了,原因可能是M_LFLAGS中间本来有个--nostdlib的选项,删除就可以用eabi内置的那些函数了,不过程序中还有aotf,atoi和fgetc这几个不知道应该还需要应用哪些库

zhangjun 发表于 2019-6-10 11:14
你用的啥编译器,哪个版本的内核,哪个板子。
1,给你的模块静态链接一份c库,期待之后的版本完善rtt小程序 ...


1、用的是env环境中的gcc编译器,好像是5.6版本的把,板子公司自己开发的imxRT的板子。
2、手动导出应该可以,但eabi内的函数还是很多的,不知道能不能有个打包解决方案

bernard 发表于 2018-2-1 18:48
RT-Thread在zynq上支持一个核运行Linux,一个核运行RTT


有个项目中也想这么使用rtt,请问老大有相关资料或者能否指导下从哪块去了解相关的用法呢?谢谢

bernard 发表于 2019-4-22 09:00
是的,如果丢到SDRAM上运行,需要把执行权限打开,可以设置为cacheable。

好的,谢谢老大亲自回复!已经搞定了

misonyo 发表于 2019-4-25 17:55
导出的符号是指针,也就是地址,读写这个地址没问题的呀~


谢谢!您的意思是导出的其实是变量或者函数的地址,所以函数是可以直接执行,而变量的话,需要用地址操作的方式去取或者写,是么?

    本帖最后由 knight_hu 于 2019-4-18 14:40 编辑


好的,另外在多问一下,如果芯片内部sram比较小,我把堆放到外部sdram的话,是不是在MPU设定的地方需要把这个区域的读写以及执行的权限全部打开么?另外cacheable可以打开么?

你好!我这边系统启动完全没问题,只有加载mo动态模块才会报错,好像和上面这个帖子里面的有些不同

多谢,通过使能软件校验后,可以ping通了,延迟《1ms,基本OK了

但我试下有个裸奔的可以ping通的,rtt里面是报文里有所不同么?

发布
问题