全局静态数组指针-无法解引用后修改其值

踩得莫名其妙的一个坑!

//uint8_t flashDataBuff2[1024] = {1, 2, 3, 4};
uint8_t flashDataBuff2[1024] = {0,};
uint8_t * p_buffer = flashDataBuff2;


void readFlash(uint8_t *flashData, int dataNum, uint32_t add)
{
    int i;
	if(dataNum>1024){
		return;
	}
	
    for(i = 0; i < dataNum; i++) {
        *((uint16_t*)flashData) = 0x1234;
        flashData += 2;
    }
}

// 存储区包信息初始化-空片初始化
int doseFlashRest(uint32_t address)
{

	doseDataFrame *temp;
	memset((void*)p_buffer, 0x11, 1024);
	readFlash(p_buffer, 10, address);

	return 0;
}


问题点:
flashDataBuff2放在函数中,局部变量,在readFlash中解引用被赋值,无段错误
flashDataBuff2作为静态变量,不赋非零初值,依然无法解引用被赋值,段错误
flashDataBuff2作为静态变量,赋非零初值,则无此问题,看map是在.data段

奇怪的是memset2不也解引用赋值了吗??
测试发现,用uint8_t*指针来解引用是可运行的,uint16_t*等都不行,memset是单字节操作的所以无此问题

现象:*((uint16_t*)flashData) = 0x1234;总是失败直接跳转HardFault_Handler。

软件上多种尝试,最终结果就是,将这个全局静态数组放到.data段中,所有引用和解引用赋值操作都在预期!

废了不少时间一定要去探寻根源,生怕是语法问题!?最后,果真还是编译器的BUG!唉……

从version6改到6.12之后,程序正常……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值