智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4996|回复: 14
打印 上一主题 下一主题

K60进入默认中断问题【野火鹰眼摄像头】

[复制链接]

11

主题

219

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1777

优秀会员奖章活跃会员奖章

威望
873
贡献
508
兑换币
271
注册时间
2012-10-28
在线时间
198 小时
跳转到指定楼层
1#
发表于 2013-3-27 18:24:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题发过一遍,再描述一次,希望有同学能帮忙讨论一下。
http://www.znczz.com/thread-121072-1-1.html这是上次发的;
我是用的野火鹰眼摄像头采集的图像,也是用的野火库。
程序是这样的:
main()
{
      初始化;
     while(1)
{
      采集;
      一字节(8像素点)拆分成8字节,每字节一个像点,并发送;
}
}
问题是这样的,
如果程序不在while(1)里循环,而只采集并拆解一次,图像很正常可以在上位机显示。但如果放在while(1)里循环,程序循环运行6000多次就会停到  imgtemp     =   *(img_bin_buff++) ;(拆分里的一句)这句,在往下运行一步就进入默认中断,但中断号串口发不出来。 我觉得是指针地址读取时出了问题,但想不通为什么可以运行6000多次才进入默认中断,而不是第一次就进入。我看论坛里也有类似的情况,http://www.znczz.com/forum.php?mod=viewthread&tid=116190&reltid=106327&pre_pos=8&ext=CB
http://www.znczz.com/forum.php?mod=viewthread&tid=103895&reltid=106327&pre_pos=1&ext=
http://www.znczz.com/forum.php?mod=viewthread&tid=115464就不一一列举了,我看了他们的帖子觉得我的情况和他们的又不一样,所以请大家给指点一下,谢谢大家!

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
2#
发表于 2013-3-27 23:34:18 | 只看该作者
我觉得是内存越界了。img_bin_buff 的值是多少?可以通过调试器看的。
运行6000多次才进入默认中断,应该是超出了ram的地址范围,导致硬件上访
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
3#
发表于 2013-3-27 23:39:35 | 只看该作者
解压图像,可以用这个代码:

//压缩二值化图像解压(空间 换 时间 解压)
void img_extract(u8 * dst,u8 * src,u32 srclen)
{
        u8 colour[2]={255,0};        //0 和 1 分别对应的颜色
                                                        //注:野火的摄像头 0 表示 白色,1表示 黑色
        u8 tmpsrc;
        while(srclen --)
        {
                tmpsrc = *src++;
                *dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
                *dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
        }
}

调用时:
u8  nrf_buff[CAMERA_SIZE + MAX_ONCE_TX_NUM];     //预多
u8 *img_bin_buff = (u8 *)(((u8 *)&nrf_buff) + COM_LEN);  //二值化图像的buf指针,由于开头有 COM_LEN 个字节是留给校验,所以需要加 COM_LEN

u8         img_buf[CAMERA_W*CAMERA_H];                                        //非压缩的二值化图像

img_extract(img_buf , img_bin_buff, CAMERA_SIZE);
回复 支持 反对

使用道具 举报

11

主题

219

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1777

优秀会员奖章活跃会员奖章

威望
873
贡献
508
兑换币
271
注册时间
2012-10-28
在线时间
198 小时
4#
 楼主| 发表于 2013-3-28 18:30:44 | 只看该作者
野火 发表于 2013-3-27 23:39
解压图像,可以用这个代码:

//压缩二值化图像解压(空间 换 时间 解压)

谢谢火哥,嗯,很有可能是你说的内存越界问题,这个中断太诡异了,printf也发不出调试信息。不过问题还是解决了。我又定义了一个数组,将img_bin_buff指向这个数组,最后拆分这个数组元素,就不进入中断了。慢慢研究下这个问题。
回复 支持 反对

使用道具 举报

2

主题

111

帖子

0

精华

高级会员

Rank: 4

积分
923
威望
518
贡献
165
兑换币
288
注册时间
2012-7-23
在线时间
120 小时
5#
发表于 2013-3-29 17:02:26 | 只看该作者
厚朴 发表于 2013-3-28 18:30
谢谢火哥,嗯,很有可能是你说的内存越界问题,这个中断太诡异了,printf也发不出调试信息。不过问题还是 ...

大哥,我用的也是野火鹰眼,怎么把指针里面的图像数据提取成二维数组,以便在上位机看啊。能分享一下你的代码吗
回复 支持 反对

使用道具 举报

11

主题

219

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1777

优秀会员奖章活跃会员奖章

威望
873
贡献
508
兑换币
271
注册时间
2012-10-28
在线时间
198 小时
6#
 楼主| 发表于 2013-3-29 17:15:35 | 只看该作者
沙冰炒菜 发表于 2013-3-29 17:02
大哥,我用的也是野火鹰眼,怎么把指针里面的图像数据提取成二维数组,以便在上位机看啊。能分享一下你的 ...

上面火哥贴出的代码就可以,或者自己写个嵌套循环,把一个字节移位8次就行了。注意就是火哥数组img_bin_buff给NRF校验留了地址空间,上位机发的时候最好去掉,也就是把数组定义成[CAMERA_H*CAMERA_W]大小。
回复 支持 反对

使用道具 举报

2

主题

111

帖子

0

精华

高级会员

Rank: 4

积分
923
威望
518
贡献
165
兑换币
288
注册时间
2012-7-23
在线时间
120 小时
7#
发表于 2013-3-29 17:24:40 | 只看该作者
厚朴 发表于 2013-3-29 17:15
上面火哥贴出的代码就可以,或者自己写个嵌套循环,把一个字节移位8次就行了。注意就是火哥数组img_bin_b ...

火哥的这个真心看不懂。。大哥求指导530311266@qq.com
回复 支持 反对

使用道具 举报

11

主题

219

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1777

优秀会员奖章活跃会员奖章

威望
873
贡献
508
兑换币
271
注册时间
2012-10-28
在线时间
198 小时
8#
 楼主| 发表于 2013-3-29 18:15:25 | 只看该作者
沙冰炒菜 发表于 2013-3-29 17:24
火哥的这个真心看不懂。。大哥求指导

指针你会吧?
回复 支持 反对

使用道具 举报

2

主题

111

帖子

0

精华

高级会员

Rank: 4

积分
923
威望
518
贡献
165
兑换币
288
注册时间
2012-7-23
在线时间
120 小时
9#
发表于 2013-3-29 18:22:56 | 只看该作者
厚朴 发表于 2013-3-29 18:15
指针你会吧?

就是指针问题,说是能当数组用,可是一维数组咋整成二维的呢。大哥给我一份你的代码吧
回复 支持 反对

使用道具 举报

22

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1646

优秀会员奖章活跃会员奖章

威望
810
贡献
544
兑换币
306
注册时间
2011-12-25
在线时间
146 小时
10#
发表于 2013-3-30 01:10:39 | 只看该作者
野火 发表于 2013-3-27 23:34
我觉得是内存越界了。img_bin_buff 的值是多少?可以通过调试器看的。
运行6000多次才进入默认中断,应该是 ...

火哥,我也遇到了类似的问题,请教过一位老师,他指点说是摄像头的帧数不要设置那么高,留下7S的时间来进行图像处理是不太够用的,我原来的程序跑的挺好但是加上LPT计数之后一上电复位单片机就要卡死一段时间,在while循环中我进行了解压图像、取中心测速以及相关功能,会不会是你所说的那种情况?
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-24 02:49 , Processed in 0.053625 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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