最近在学习stm32f407hal库的过程中遇到以下问题:
要求我们使用一个8位的指针将一组数据存入一个地址,再使用一个16位的指针读取并传入另一个地址,我个人写出来的是这样:
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "string.h"
#include "stdio.h"
void Read_ptr8(uint8_t *ptr,int length)
{
for (int i = 0; i < length; i++)
{
printf("%u ", ptr[i]);
}
printf("\n");
}
void Read_ptr16(uint16_t *ptr,int length)
{
for (int i = 0; i < length; i++)
{
printf("%u ", ptr[i]);
}
printf("\n");
}
int main(void)
{
uint8_t data_8bits[10] = {0};
uint16_t data_16bits[10] = {0};
uint8_t src[] = {1,2,3,4,5,6,7,8,9,0};
uint8_t *ptr8 = data_8bits;
uint16_t *ptr16 = data_16bits;
HAL_Init();
sys_stm32_clock_init(336, 8, 2, 7);
delay_init(168);
usart_init(115200);
led_init();
printf("\r\nReceived data:\r\n");
for(int i = 0;i<sizeof(src);i++)
{
*(ptr8+i) = src[i];
}
for(int i =0;i<sizeof(data_8bits);i++)
{
*(ptr16+i) = (uint16_t) *(ptr8+i);
}
printf("the data in src is :");
Read_ptr8(src,sizeof(src));
printf("the data in a is :");
Read_ptr8(data_8bits,sizeof(data_8bits));
printf("the data in b is :");
Read_ptr16(data_16bits,sizeof(data_16bits));
printf("\r\n\r\n");
delay_ms(5000);
}
其实际运行输入的结果为:
可以看到在传入数据后除了传入的数据还有一些无意义的数据,初步判断是因为位长不匹配导致的,希望能有人指点下迷津