本帖最后由 a32425262 于 2016-4-1 11:07 编辑
硬件环境:stm32F107+DM9161软件环境:freertos+LwIP
已解决:ping一段时间后由不到1ms增加到几千毫秒,需要修改中断部分代码,我是看别人的做法修改的
http://www.mikrocontroller.net/topic/386194
- static struct pbuf * low_level_input(struct netif *netif)
- {
- struct pbuf *p, *q;
- u16_t len;
- int l = 0 ;
- FrameTypeDef frame;
- u8 *buffer;
- p = NULL ;
- frame = ETH_RxPkt_ChainMode();
- /* Obtain the size of the packet and put it into the "len"
- variable. */
- len = frame.length;
- buffer = (u8 *)frame.buffer;
- if (len > 0 ){
- /* We allocate a pbuf chain of pbufs from the pool. */
- p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL);
- }
- if (p != NULL )
- {
- for (q = p; q != NULL ; q = q->next)
- {
- memcpy((u8_t*)q->payload, (u8_t*)&buffer[l], q->len);
- l = l + q->len;
- }
- }
- if (len > 0 ){
- /* Set Own bit of the Rx descriptor Status: gives the buffer back to ETHERNET DMA */
- frame.descriptor->Status = ETH_DMARxDesc_OWN;
- }
- /* When Rx Buffer unavailable flag is set: clear it and resume reception */
- if ((ETH->DMASR & ETH_DMASR_RBUS) != (u32)RESET)
- {
- /* Clear RBUS ETHERNET DMA flag */
- ETH->DMASR = ETH_DMASR_RBUS;
- /* Resume DMA reception */
- ETH->DMARPDR = 0 ;
- }
-
- return p;
- }
复制代码
未解决:现在直接运行(0x8000 0000)是可以的,但是我想分为IAP(0x8000 0000)和APP(0x8000 4000)两部分就不行了
IAP已经关闭了全部中断,使用ucos是可以正常的
main主函数第一句添加 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);中断部分也添加该语句
- void ETH_NVIC_Config(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);
- /* 2 bit for pre-emption priority, 2 bits for subpriority */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- /* Enable the Ethernet global Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
复制代码
但是在运行到NVIC_Init(&NVIC_InitStructure); 就死机了。
谁有过类似的经历吗,或者如何解决。
|
红圈部分应该加上你的偏移量,同时大小也要注意修改,试试...
感谢你的回复,事实上我就是这么设置的,同样的偏移地址,我使用ucos都是可以的,使用同样的bootloader,不知道出现在什么地方,已将一周了,搞定不了
在官网上找个IAP程序参考下,之前做过, 但是忘了,虽然没跑这个系统,但是原理应该是一样的...
我的IAP是没问题的,关闭了中断,使用ucos正常的,我现在只是想更换app的RTOS,其他的设置都是一样的
LZ的工程IROM设置和你的Vector设置不一致。
Size大小应该减去0x4000,我也不确定跟这个有没有关系
这个没有关系的