|
开发板新手一枚。在看SYSBIOS例程的UDP例程时有几个疑问,还希望工程师或者前辈指点。
/****************************************************************************/
/* */
/* 回调函数 EMAC 初始化 */
/* */
/****************************************************************************/
// 这个函数被驱动调用 不要修改函数名
void EMAC_initialize()
{
// 管脚复用配置
// 使能 MII 模式
EMACPinMuxSetup();
}
/****************************************************************************/
/* */
/* 回调函数 获取 MAC 地址 */
/* */
/****************************************************************************/
// 这个函数被驱动调用 不要修改函数名
void EMAC_getConfig(unsigned char *pMacAddr)
{
printf("\nUsing default MAC address\n");
printf("Using MAC Address: %02x-%02x-%02x-%02x-%02x-%02x\n",
bMacAddr[0], bMacAddr[1], bMacAddr[2], bMacAddr[3], bMacAddr[4], bMacAddr[5]);
// 传递 MAC 地址
mmCopy( pMacAddr, bMacAddr, 6 );
}
/****************************************************************************/
/* */
/* 回调函数 获取连接状态 */
/* */
/****************************************************************************/
// 这个函数被驱动调用 不要修改函数名
void EMAC_linkStatus(unsigned int phy, unsigned int linkStatus)
{
printf("Link Status: %s on PHY %d\n",LinkStr[linkStatus],phy);
}
问题1:main.c中的这些函数都有一个注释,“这个函数被驱动调用 不要修改函数名”。我不清楚这里是被哪里调用的?驱动是哪个地方呢?
// 函数必须要有两个参数
extern int UdpTest(SOCKET s, UINT32 unused);
static HANDLE hUdp = 0;
void NetOpenHook()
{
// 创建一个服务器 端口 1025
hUdp = DaemonNew(SOCK_DGRAM, 0, 1025, UdpTest, OS_TASKPRINORM, OS_TASKSTKNORM, 0, 1);
}
void NetCloseHook()
{
DaemonFree(hUdp);
}
问题2:Net.c文件中定义了NetOpenHook函数和NetCloseHook函数,这两个函数是在哪里被调用的呢?
问题3:在NetOpenHook函数中调用的DaemonNew函数是在建立UDP通信前必须要使用的函数吗?
问题4:这个例程中UDP的接受程序是放在For(;;)中,是否意味着UDP接受是在不断地循环,也就是这个县城一直在执行没有中断?是否有建立在中断上的UDP通信,当服务器端要有信息发送,会触发中断,进而执行中断服务函数(将recvnfrom设置为中断服务函数)。与无限循环的接受数据相比,这种中断的方式会不会效率更高一些?
问题5:在UDP这个历程中共有3个.c文件,这样的目的是更加条理吗?还是有什么其他的开发惯例?可不可以直接将Net.c和UDP.c的函数直接放到main.c中?
希望前辈或者工程师能指点,不胜感激!
|
|