硬汉嵌入式论坛

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

[MDK] 请教下,使用 mdk ac6 结构体变量出现诡异的事情 ?

[复制链接]

610

主题

3061

回帖

4911

积分

至尊会员

积分
4911
发表于 2020-10-15 09:30:39 | 显示全部楼层 |阅读模式
请教下,使用 mdk ac6 结构体变量出现诡异的事情 ?
mdk v5.31



typedef struct
{
  uint8_t  _a;
  uint8_t  _b;
  uint8_t  _c;
  uint8_t  _d;

}  _tempDef;

_tempDef  * _temp_def =0;

int main(void)
{

  _temp_def = malloc(sizeof(_tempDef));

  _temp_def -> _a = 8;

  ....
}


  这个里面,其中有个变量的工作异常, 就是赋值 没有变化 ? 但是在有些 地方调用又是可以,有些地方不行,有些被他搞晕了,最后

  目前解决的方法是 吧 结构体里面的那个 工作异常的变量 定义到 外面 就可以正常了,请问有谁遇到过没有,有没有其他的好的解决方法 ??




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2020-10-15 10:33:39 | 显示全部楼层
仅仅赋值,不读取,会被编译器优化掉。
回复

使用道具 举报

4

主题

117

回帖

129

积分

初级会员

积分
129
发表于 2020-10-15 10:36:18 | 显示全部楼层
我遇到过
uint8_t a;
a=1;i
f(a==1)/if(a!=1)全部判错的奇葩现象。
感觉是将a的地址上前面的数据一起进行32位比较了。
回复

使用道具 举报

610

主题

3061

回帖

4911

积分

至尊会员

积分
4911
 楼主| 发表于 2020-10-15 10:40:03 | 显示全部楼层
eric2013 发表于 2020-10-15 10:33
仅仅赋值,不读取,会被编译器优化掉。

有读取啊,

貌似就是赋值 在有些函数里面 可以被正确的赋值,有些函数里面 貌似赋值无效 问题现在就有点纠结啊 ?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2020-10-15 13:10:51 | 显示全部楼层
hpdell 发表于 2020-10-15 10:40
有读取啊,

貌似就是赋值 在有些函数里面 可以被正确的赋值,有些函数里面 貌似赋值无效 问题现在就有 ...

这个可以创建一个最简单的工程测试下,仅一个main函数测试。

防止是程序里面其它问题造成的。
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2020-10-15 16:07:14 | 显示全部楼层
注意事项:malloc(sizeof(_tempDef))的返回值一定要确保不是NULL,上面直接赋值和引用是不对的
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2020-10-15 16:19:50 | 显示全部楼层
试一下这个:
_temp_def = (_tempDef *)malloc(sizeof(_tempDef));

if (_temp_def) {
  _temp_def -> _a = 8;
}
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-10-16 09:24:41 | 显示全部楼层
CMSIS Driver层的USART驱动
有没有测试过这部分内容????
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2020-10-16 09:48:33 | 显示全部楼层
wlx18682353162 发表于 2020-10-16 09:24
CMSIS Driver层的USART驱动
有没有测试过这部分内容????

你之前的问题还没解决?
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-10-16 11:01:13 | 显示全部楼层
是的    从5.30版本换成5.25版本还是不行
//---------------------------------------------------------------------
#include "Driver_USART.h"

#define TEXT "hello world\r\n"
extern ARM_DRIVER_USART Driver_USART1;

void myUSART1_Callback(uint32_t event)
{
       
}
int main(void)
{
        static ARM_DRIVER_USART *USARTdrv = &Driver_USART1;
       
        USARTdrv->Initialize(myUSART1_Callback);
        USARTdrv->owerControl(ARM_POWER_FULL);
        USARTdrv->Control(ARM_USART_MODE_ASYNCHRONOUS |
                                                                                                ARM_USART_DATA_BITS_8 |
                                                                                                ARM_USART_PARITY_NONE |
                                                                                                ARM_USART_STOP_BITS_1 |
                                                                                                ARM_USART_FLOW_CONTROL_NONE, 115200
                                                                                                );
        /* Enable Receiver and Transmitter lines */
        USARTdrv->Control(ARM_USART_CONTROL_TX, 1);
       
        USARTdrv->Send(TEXT, sizeof(TEXT));  /* 发送不成功   全速运行到这一行 卡停了  再也运行不到下一行     用这部分的人太少了 很难得到交流  看来真的只有硬汉兄弟帮帮忙*/
        while(1);
}
//----------------------------------------------------------------------
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-10-16 11:04:50 | 显示全部楼层
扎心的是安装包下的板载例程里面又没有操作这部分的例子     加上翻了网上博主的文章  实在也是没发现有错误啊      实在是太迷糊了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2020-10-17 11:02:01 | 显示全部楼层
wlx18682353162 发表于 2020-10-16 11:01
是的    从5.30版本换成5.25版本还是不行
//------------------------------------------------------- ...

直接撸个我们的板子操作的了,你的这耽误太长时间了。
回复

使用道具 举报

5

主题

179

回帖

194

积分

初级会员

积分
194
发表于 2020-10-17 14:13:02 | 显示全部楼层
wlx18682353162 发表于 2020-10-16 11:01
是的    从5.30版本换成5.25版本还是不行
//------------------------------------------------------- ...

一直用cmsis uart driver,没遇到任何问题
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2020-10-17 23:40:04 | 显示全部楼层
soga238 发表于 2020-10-17 14:13
一直用cmsis uart driver,没遇到任何问题

建议改为以下试试看:
static char text[] = "hello world";
.
.
.
USARTdrv->Send(&text[0], sizeof(text));
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-11-2 12:01:27 | 显示全部楼层
soga238 发表于 2020-10-17 14:13
一直用cmsis uart driver,没遇到任何问题

加个微信吧 18682353162  
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-11-2 13:54:57 | 显示全部楼层
eric2013 发表于 2020-10-17 11:02
直接撸个我们的板子操作的了,你的这耽误太长时间了。

你们F1系列支持cmsis uart driver这样的例子吗?硬汉
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106974
QQ
发表于 2020-11-2 15:45:01 | 显示全部楼层
wlx18682353162 发表于 2020-11-2 13:54
你们F1系列支持cmsis uart driver这样的例子吗?硬汉

我们的F1板子停产了,不再更新了。
回复

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2020-11-2 16:23:42 | 显示全部楼层
soga238 发表于 2020-10-17 14:13
一直用cmsis uart driver,没遇到任何问题

你没遇到任何问题  那你用的是F1系列芯片上做的测试应用吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 11:57 , Processed in 0.333431 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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