taskDelay()滥用的结果~

STATUS netDevInit(void)
{
char opt = 0;
int optval = 0;
int tempAddrLen = 0;
struct in_addr ifAddr;

//--- 主网卡(fei0)初始化
if (ipAttach(0, "fei") == ERROR)...
if (ifAddrSet("fei0", LOCAL_IP_ADDR) == ERROR)...
if (ifMaskSet("fei0", LOCAL_MASK_CODE) == ERROR)...

//--- 从网卡(fei1)初始化
if (ipAttach(1, "fei") == ERROR)...
if (ifAddrSet("fei1", LOCAL_IP_ADDR_TEMP) == ERROR)...
if (ifMaskSet("fei1", LOCAL_MASK_CODE_TEMP) == ERROR)...
taskDelay(sysClkRateGet());

//--- 双网切换的主网卡(fei0)和从网卡(fei1)设置
if (InitNetSwitch(0, 1, 0) != 0)...

//--- 
if ((sockFd = socket (AF_INET, SOCK_DGRAM, 0)) == ERROR)...
taskDelay(10);
if ((bind(sockFd, (struct sockaddr *)&localSockAddr, tempAddrLen)) == ERROR)...
taskDelay(10);

ifAddr.s_addr = inet_addr(LOCAL_IP_ADDR);
if(setsockopt(sockFd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&ifAddr, sizeof(struct in_addr)) == ERROR)... 
taskDelay(10);

ipmr.imr_multiaddr.s_addr = inet_addr(REMOTE_IP_ADDR);  
ipmr.imr_interface.s_addr = inet_addr(LOCAL_IP_ADDR);   
if(setsockopt(sockFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&ipmr, sizeof(struct ip_mreq)) == ERROR)...
taskDelay(10);

if (AddMulticast(0, sockFd, &ipmr) != 0)...  // errno=0x31                                                                                   
taskDelay(10);

return OK;

}

测试采用某型号PC104板卡和对应的双冗余网卡库文件,厂家的demo运行没有问题,自己的程序总报错,后找到原因是因为taskDelay()的使用导致,未能够深入究其原因~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在HUAWEI-LiteOS Studio中创建三个任务,如下所示: ```c #include "los_task.h" #include "los_typedef.h" #include "los_sys.h" #include <stdio.h> #define TASK_STACK_SIZE 0x400 static UINT32 g_task1ID; static UINT32 g_task2ID; static UINT32 g_task3ID; static void Task1(void) { while (1) { printf("Task1 is running.\n"); LOS_TaskDelay(1000); } } static void Task2(void) { while (1) { printf("Task2 is running.\n"); LOS_TaskDelay(1000); } } static void Task3(void) { while (1) { printf("Task3 is running.\n"); LOS_TaskDelay(1000); } } int main() { UINT32 uwRet = LOS_OK; uwRet = LOS_KernelInit(); if (uwRet != LOS_OK) { return LOS_NOK; } uwRet = LOS_TaskCreate(&g_task1ID, "Task1", Task1, TASK_STACK_SIZE, 0x11); if (uwRet != LOS_OK) { return LOS_NOK; } uwRet = LOS_TaskCreate(&g_task2ID, "Task2", Task2, TASK_STACK_SIZE, 0x11); if (uwRet != LOS_OK) { return LOS_NOK; } uwRet = LOS_TaskCreate(&g_task3ID, "Task3", Task3, TASK_STACK_SIZE, 0x11); if (uwRet != LOS_OK) { return LOS_NOK; } LOS_Start(); return 0; } ``` 在上述代码中,我们创建了三个任务`Task1`、`Task2`和`Task3`,它们的优先级都为0x11,即相同优先级。 编译并下载程序到板子上后,打开终端观察输出结果,如下所示: ``` Task2 is running. Task1 is running. Task3 is running. Task2 is running. Task1 is running. Task3 is running. Task2 is running. Task1 is running. Task3 is running. ... ``` 从输出结果可以看出,三个任务的优先级相同,因此它们轮流运行,没有出现某个任务一直占用CPU的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值