硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3502|回复: 11
收起左侧

Cannot access Memory (@ 0xa5a5a5a5, Read, Acc Size: 1 Byte)

[复制链接]

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2020-11-26 17:30:28 | 显示全部楼层 |阅读模式
MDK5.31,DAP,断点后单步出现这个,单步或者全速程序都能正常运行,但是这个是什么问题,怎么排查?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-11-27 01:23:54 | 显示全部楼层
0xa5a5a5a5不是个有效的外设地址,难道是程序有野指针问题。


0xA000 1000 - 0xBFFF FFFF 是保留地址。



回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2020-11-27 11:07:04 | 显示全部楼层
这个0xa5a5a5a5是不是使能堆栈检查填充的值?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-11-27 11:34:22 | 显示全部楼层
waterx3 发表于 2020-11-27 11:07
这个0xa5a5a5a5是不是使能堆栈检查填充的值?

这个的提示是对地址空间的访问,你可以换个简单程序测试对比下的
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2020-11-27 13:19:47 | 显示全部楼层
不用DAP,换了个JLink,不提示这个了。可是发现一个问题,freertos + modbus的任务,如果不接调试器则没有响应,接上调试器正常。求个解决的思路。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-11-27 15:49:56 | 显示全部楼层
waterx3 发表于 2020-11-27 13:19
不用DAP,换了个JLink,不提示这个了。可是发现一个问题,freertos + modbus的任务,如果不接调试器则没有 ...

说明程序确实有bug,论坛有个类似的

近来才弄清楚,MDK的编译BUG问题
http://www.armbbs.cn/forum.php?mod=viewthread&tid=99399
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2020-11-30 13:06:27 | 显示全部楼层
waterx3 发表于 2020-11-27 13:19
不用DAP,换了个JLink,不提示这个了。可是发现一个问题,freertos + modbus的任务,如果不接调试器则没有 ...

485收发切换时,加个小延时,现在貌似正常了。这个和接不接调试器有什么关系呢?
另外,cubemx创建的usart初始化RX引脚,是GPIO_NOPULL,这个需要改为上拉吧。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-12-1 15:43:13 | 显示全部楼层
waterx3 发表于 2020-11-30 13:06
485收发切换时,加个小延时,现在貌似正常了。这个和接不接调试器有什么关系呢?
另外,cubemx创建的u ...


如果需要加延迟,说明程序设计有问题。

4.png
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2020-12-1 17:34:42 | 显示全部楼层
eric2013 发表于 2020-12-1 15:43
如果需要加延迟,说明程序设计有问题。

这个延时是指485芯片的收发使能端切换后的延时:
#define SLAVE_RS485_SEND_MODE_PORT1       {HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);bsp_DelayUS(20);}
#define SLAVE_RS485_RECEIVE_MODE_PORT1    {HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);bsp_DelayUS(20);}

  if (xRxEnable) {
                SLAVE_RS485_RECEIVE_MODE_PORT1;       
                SET_BIT(huart1.Instance->CR1, USART_CR1_RXNEIE);
        }
        else {
                SLAVE_RS485_SEND_MODE_PORT1;       
                CLEAR_BIT(huart1.Instance->CR1, USART_CR1_RXNEIE);
        }       
        if(xTxEnable) {               
                SET_BIT(huart1.Instance->CR1, USART_CR1_TCIE);
        }
        else {       
                CLEAR_BIT(huart1.Instance->CR1, USART_CR1_TCIE);
        }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-12-2 11:00:32 | 显示全部楼层
waterx3 发表于 2020-12-1 17:34
这个延时是指485芯片的收发使能端切换后的延时:
#define SLAVE_RS485_SEND_MODE_PORT1       {HAL_GPIO ...

对,就是这个,重复利用发送空中断和发送完成中断即可解决,无需做延迟。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2020-12-3 09:30:20 | 显示全部楼层
这一段其实是FreeModbus里的,它用状态机切过来切过去,实在是不好用中断来处理。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2020-12-4 09:45:43 | 显示全部楼层
waterx3 发表于 2020-12-3 09:30
这一段其实是FreeModbus里的,它用状态机切过来切过去,实在是不好用中断来处理。

最好优化下,否则很难知道延迟多少时间合适。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 06:41 , Processed in 0.188558 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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