你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32+FreeRTOS+LwIP

[复制链接]
a32425262 提问时间:2016-4-1 10:56 /
本帖最后由 a32425262 于 2016-4-1 11:07 编辑

硬件环境:stm32F107+DM9161软件环境:freertos+LwIP

已解决:ping一段时间后由不到1ms增加到几千毫秒,需要修改中断部分代码,我是看别人的做法修改的
http://www.mikrocontroller.net/topic/386194
  1. static struct pbuf * low_level_input(struct netif *netif)
  2. {
  3.   struct pbuf *p, *q;
  4.   u16_t len;
  5.   int l = 0 ;
  6.   FrameTypeDef frame;
  7.   u8 *buffer;

  8.   p = NULL ;
  9.   frame = ETH_RxPkt_ChainMode();
  10.   /* Obtain the size of the packet and put it into the "len"
  11.      variable. */
  12.   len = frame.length;
  13.   buffer = (u8 *)frame.buffer;

  14.   if (len > 0 ){
  15.     /* We allocate a pbuf chain of pbufs from the pool. */
  16.     p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
  17.   }

  18.   if (p != NULL )
  19.   {
  20.     for (q = p; q != NULL ; q = q->next)
  21.     {
  22.       memcpy((u8_t*)q->payload, (u8_t*)&buffer[l], q->len);
  23.       l = l + q->len;
  24.     }
  25.   }

  26.   if (len > 0 ){
  27.     /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
  28.     frame.descriptor->Status = ETH_DMARxDesc_OWN;
  29.   }

  30.   /* When Rx Buffer unavailable flag is set: clear it and resume reception */
  31.   if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)
  32.   {
  33.     /* Clear RBUS ETHERNET DMA flag */
  34.     ETH->DMASR = ETH_DMASR_RBUS;
  35.     /* Resume DMA reception */
  36.     ETH->DMARPDR = 0 ;
  37.   }
  38.   
  39.   return p;
  40. }
复制代码

未解决:现在直接运行(0x8000 0000)是可以的,但是我想分为IAP(0x8000 0000)和APP(0x8000 4000)两部分就不行了
IAP已经关闭了全部中断,使用ucos是可以正常的
main主函数第一句添加 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);中断部分也添加该语句

  1. void ETH_NVIC_Config(void)
  2. {
  3.         NVIC_InitTypeDef   NVIC_InitStructure;

  4.         NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);
  5.         /* 2 bit for pre-emption priority, 2 bits for subpriority */
  6.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

  7.         /* Enable the Ethernet global Interrupt */
  8.         NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
  9.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  10.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  11.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  12.         NVIC_Init(&NVIC_InitStructure);     
  13. }
复制代码

但是在运行到NVIC_Init(&NVIC_InitStructure); 就死机了。
谁有过类似的经历吗,或者如何解决。



STM32_FreeRTOS_LwIP.zip

下载

9.08 MB, 下载次数: 124, 下载积分: ST金币 -1

STM32F107+freertos+lwip

收藏 3 评论7 发布时间:2016-4-1 10:56

举报

7个回答
power568 回答时间:2016-4-1 16:12:55
123.jpg

红圈部分应该加上你的偏移量,同时大小也要注意修改,试试...
qhqlove 回答时间:2016-4-1 18:05:54
这个不错,写的挺详细的,支持一个!!!!!
a32425262 回答时间:2016-4-4 23:12:59
power568 发表于 2016-4-1 16:12
红圈部分应该加上你的偏移量,同时大小也要注意修改,试试...

感谢你的回复,事实上我就是这么设置的,同样的偏移地址,我使用ucos都是可以的,使用同样的bootloader,不知道出现在什么地方,已将一周了,搞定不了
power568 回答时间:2016-4-4 23:50:13
a32425262 发表于 2016-4-4 23:12
感谢你的回复,事实上我就是这么设置的,同样的偏移地址,我使用ucos都是可以的,使用同样的bootloader, ...

在官网上找个IAP程序参考下,之前做过, 但是忘了,虽然没跑这个系统,但是原理应该是一样的...
a32425262 回答时间:2016-4-4 23:54:58
power568 发表于 2016-4-4 23:50
在官网上找个IAP程序参考下,之前做过, 但是忘了,虽然没跑这个系统,但是原理应该是一样的... ...

我的IAP是没问题的,关闭了中断,使用ucos正常的,我现在只是想更换app的RTOS,其他的设置都是一样的
adlu 回答时间:2016-4-5 09:05:42
本帖最后由 adlu 于 2016-4-5 09:12 编辑
a32425262 发表于 2016-4-4 23:54
我的IAP是没问题的,关闭了中断,使用ucos正常的,我现在只是想更换app的RTOS,其他的设置都是一样的 ...

LZ的工程IROM设置和你的Vector设置不一致。
QQ截图20160405090617.jpg

Size大小应该减去0x4000,我也不确定跟这个有没有关系
a32425262 回答时间:2016-4-6 11:16:53
adlu 发表于 2016-4-5 09:05
LZ的工程IROM设置和你的Vector设置不一致。

这个没有关系的

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版