创建软件中断swi的问题 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3826|回复: 8
打印 上一主题 下一主题

创建软件中断swi的问题

[复制链接]

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
跳转到指定楼层
楼主
发表于 2017-3-4 10:44:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在做基于NDK_TCP_Client例程,实现接收和读取指令的功能,并将接收和读取独立出来,其中接收指令使用for(;;)一直循环接收,读取指令是使用软件中断创建swi,设定每过一段时间定时读取一次,读取和接收的函数都已经写好。但是根据例程和教学视频模仿创建swi之后,编译器会报错。代码如下:

int main()
{
        // 创建一个信号量
        sem = Semaphore_create(0, NULL, NULL);

        // 平台初始化
        PlatformInit();

        Task_create(taskMain,NULL,NULL);

        // 启动 SYS/BIOS 系统
    BIOS_start();
}
void taskMain(UArg a0 ,UArg a1)
{
            Swi_Handle swi0;

            Swi_Params swiParams;
            Swi_Params_init(&swiParams);
            // 两个参数
            swiParams.arg0 = 2;
            swiParams.arg1 = 0;
            // 优先级
            swiParams.priority = 5;
            // 触发
            swiParams.trigger = 1;
            swi0 = Swi_create(read_data, &swiParams, NULL);
}
void swi_publish(UArg arg)
{
        if(h == 1)
        {
                Swi_andn(swi0,1);
        }
}
系统报错如下:
error #148: declaration is incompatible with "const ti_sysbios_knl_Swi_Handle swi0" (declared at line 17 of "C:/Users/Admin/workspace_v5_5/myproject/NDK_TCP_Client_ok/Debug/configPkg/package/cfg/app_pe66.h")
应该是声明不符合。
请问大家我这里是哪里出问题了。请大家多多指教。谢谢!


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
沙发
 楼主| 发表于 2017-3-4 11:20:36 | 只看该作者
if (h==1)是要在我接收到数据之后,h=1,再发布软件中断。

点评

read_data 函数原型发出来?  详情 回复 发表于 2017-3-4 14:21
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
板凳
发表于 2017-3-4 14:21:56 | 只看该作者
sodjfsoidfjosj 发表于 2017-3-4 11:20
if (h==1)是要在我接收到数据之后,h=1,再发布软件中断。

read_data 函数原型发出来?
回复 支持 反对

使用道具 举报

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
地板
 楼主| 发表于 2017-3-4 15:21:05 | 只看该作者
希望缄默 发表于 2017-3-4 14:21
read_data 函数原型发出来?

Void read_data(UArg a0, UArg a1)
{
                        p = memchr(Data1+out,'@',2);
                        if(p){
                                p1 = memchr(Data1+out,'#',40);
                                if(p1){
                                        p2 = (char *)p1-(char *)p-1;
                                        memset(bufs1,NULL,sizeof(bufs1));
                                        memmove(bufs1,Data1+1+out,p2);
                                        memset(Data1+out,NULL,p2+2);
                                        out = out+p2+2;
                                }else{
                                        //@之后找不到#
                                }
                        }else{
                                out = 0;
                        }
                        if(((pianyi + pBuflen >= out)&&(pianyi< out))||((curent_bufs_len > (max-pianyi)) && (curent_bufs_len >out) ) ) //缓冲区已满
                        {
                                pBuf2 = "环形缓冲区已满,请暂停发送";
                            send(s, pBuf2, 30, 0 );
                            //hold = -1;

                        }
           // 回传接受到的数据
                if(send(s, bufs1,p2 , 0 ) < 0)
                {
                return;
            }
                        //send(s, bufs1, p2, 0 );
                        //Task_sleep(100);  // 100表示系统时钟计数

}

实际上就是一个判断开头为@结尾为#的,就把中间的截取出来作为一个buf1 send回来。
回复 支持 反对

使用道具 举报

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
5#
 楼主| 发表于 2017-3-4 15:35:45 | 只看该作者
希望缄默 发表于 2017-3-4 14:21
read_data 函数原型发出来?

我把我工程压缩了一下发到你的工作qq上了。如果您有时间,可以帮我看一下吗?非常感谢。
回复 支持 反对

使用道具 举报

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
6#
 楼主| 发表于 2017-3-4 16:49:49 | 只看该作者
希望缄默 发表于 2017-3-4 14:21
read_data 函数原型发出来?

我是想完成一个以太网通讯,基于NDK_TCP_Client例程,接收数据用一个无条件的for(;;)循环一直准备接收,读取数据用创建一个task,在task中发布一个软件中断swi,然后每10000个时间周期就读取一次,抢占掉接收数据的for(;;)循环,执行完read_data函数之后sleep,然后回到for(;;)里继续接收数据。但是实际测试的时候,似乎不是这个样子的。所以我想问一下,我这个大方向上或者逻辑上是不是出现了问题。

点评

读取接收用的是同一个 Socket 还是两个?  详情 回复 发表于 2017-3-7 08:40
回复 支持 反对

使用道具 举报

15

主题

1357

帖子

4579

积分

创龙

Rank: 8Rank: 8

积分
4579
7#
发表于 2017-3-7 08:40:27 | 只看该作者
sodjfsoidfjosj 发表于 2017-3-4 16:49
我是想完成一个以太网通讯,基于NDK_TCP_Client例程,接收数据用一个无条件的for(;;)循环一直准备接收, ...

读取接收用的是同一个 Socket 还是两个?
回复 支持 反对

使用道具 举报

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
8#
 楼主| 发表于 2017-3-7 10:20:34 | 只看该作者
用的同一个socket,socket是在接收函数中创建的。读的函数直接使用这个socket不可以吗?
回复 支持 反对

使用道具 举报

4

主题

10

帖子

1122

积分

金牌会员

Rank: 6Rank: 6

积分
1122
9#
 楼主| 发表于 2017-3-7 10:20:57 | 只看该作者
希望缄默 发表于 2017-3-7 08:40
读取接收用的是同一个 Socket 还是两个?

用的同一个socket,socket是在接收函数中创建的。读的函数直接使用这个socket不可以吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-31 08:24 , Processed in 0.041984 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表