我对返回指针的值有疑问,我已经阅读了本主题,所以请不要添加重复的消息。 How to access a local variable from a different function using pointers?
这是我们的最后一个主题Return value problem without Delay Function
我在STM32F4和交换IC上有一个以太网应用程序,我可以接收ping并回复ping。我的问题是代码或内存有问题。当我将另一个文件中的某个值返回到main.cpp文件时,我做不到最后一个主题,但是此主题已关闭并删除,因此我更改了代码,但没有成功。问题的返回值在哪里?循环中的if(mArray)条件仅工作一次
在main.cpp
文件中,我使用以下代码:
int main(){
uint8_t * mArray= (uint8_t *)( malloc(sizeof( uint8_t) * 61));
uint8_t dummyBuffer[61]
...
while(1){
if(mArray){
mArray=ethernetif_input(&gnetif);
}
if((mArray)[0]==0x01){
for(int i=0; i<61;i++)
{
dummyBuffer[i] = (mArray)[i];
}
free(mArray);
}
}
然后在ethernetif.c
文件中:
uint8_t * ethernetif_input(struct netif *netif){
err_t err;
struct pbuf *p;
uint8_t * myArray =(uint8_t*)(malloc(sizeof( uint8_t) * 61));
if(!myArray)
return NULL;
p = low_level_input(netif);
/* no packet could be read, silently ignore this */
if (p == NULL) {
return NULL;
}
if (memcmp (p->payload, "\x01\x80\xC2\x00\x00\x00", 6) == 0){
{
for(int i = 0; i < 61; i++)
{
myArray[i]=(((uint8_t*)p->payload)[i]);
}
}
else{
/* entry point to the LwIP stack */
err = netif->input(p, netif);
if (err != ERR_OK)
{
LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
pbuf_free(p);
p = NULL;
}
}
}
if(p != NULL)
{
pbuf_free(p);
p=NULL;
}
return myArray;
}
您可以使用mArray这样。你还好吗?
int main(){
uint8_t dummyBuffer[61]
// ...
while(1){
uint8_t * mArray=ethernetif_input(&gnetif);
if(!myArray)
return 0;
if((mArray)[0]==0x01){
for(int i=0; i<61;i++)
{
dummyBuffer[i] = (mArray)[i];
}
free(mArray);
}
}
}
uint8_t *ethernetif_input(struct netif *netif){
err_t err;
struct pbuf *p;
uint8_t * myArray =(uint8_t*)(malloc(sizeof( uint8_t) * 61));
if(!myArray)
return NULL;
p = low_level_input(netif);
/* no packet could be read, silently ignore this */
if (p == NULL) {
free(mArray);
return NULL;
}
if (memcmp (p->payload, "\x01\x80\xC2\x00\x00\x00", 6) == 0){
{
for(int i = 0; i < 61; i++)
{
myArray[i]=(((uint8_t*)p->payload)[i]);
}
}
else{
/* entry point to the LwIP stack */
err = netif->input(p, netif);
if (err != ERR_OK)
{
LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
pbuf_free(p);
p = NULL;
}
}
}
if(p != NULL)
{
pbuf_free(p);
p=NULL;
}
}
return myArray;