【发布时间】:2016-04-12 22:19:39
【问题描述】:
我知道以前有人问过这个问题。它遍布谷歌和这个网站,但当他们解释时我无法理解。我已经花了太多时间试图理解,但我仍然不明白,所以请尝试理解有一些基本的东西我不理解......我们开始吧。
在 Proteus 上使用 C 语言编程时,我经常收到警告和/或错误(在本例中为警告):
makes pointer from integer without a cast
我不明白。就像我说的,我已经花了几个小时研究它,我知道它与类型和/或指针有关,等等。请有人像正常人一样给我解释一下。
另外,我得到了很多。是否有可能在没有强制转换的情况下从其他类型的变量中获得此警告?一个角色?我现在如何解决这个问题,并在将来避免它?
这是上下文...
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "stdlib.h"
#include "USART.h"
#include "I2C.h"
#include "ds1307.h"
void Wait()
{
uint8_t i;
for(i=0;i<20;i++)
_delay_loop_2(0);
}
uint8_t ss,mm,hh,dd,nn,yy,x; // Appropriately labeled variables
uint16_t sec[3],min[3],hr[3],day[3],month[3],year[3],mode[2];
uint16_t secs,mins,hrs,days,months,years,modes;
int main(void)
{
_delay_ms(50);
USART_interrupt_init(); //
USART_send('\r'); // Send carriage return
_delay_ms(100); // Allows for the LCD module to initialize
I2CInit(); // Initialize i2c Bus
DS1307Write(0x07,0x10); // Blink output at 1Hz
while(1)
{
int i=0;
/* SECONDS */
DS1307Read(0x00,&ss); // Read seconds address
/* MINUTES */
DS1307Read(0x01,&mm); // Read minutes address
/* HOURS */
DS1307Read(0x02,&hh); // Read hours address
/* DAY */
DS1307Read(0x04,&dd); // Read hours address
/* MONTH */
DS1307Read(0x05,&nn); // Read hours address
/* YEAR */
DS1307Read(0x06,&yy); // Read hours address
for(i=0;i<5;i++)
{Wait();i++;}
sec[0]=(0b00001111 & ss);
sec[1]=((0b01110000 & ss)>>4);
sec[2]='\0';
itoa(sec[0],secs,10);
USART_putstring(secs); // place string in buffer
还有两个错误:
../main.c:59: warning: passing argument 2 of 'itoa' makes pointer from integer without a cast
../main.c:62: warning: passing argument 1 of 'USART_putstring' makes pointer from integer without a cast
【问题讨论】:
-
您能解释一下您要对以
sec[0]=开头的行做什么吗?我的回答假设您试图将值sec[0](将从0到15)写为字符串,并且您还有其他目的来分配sec[1]和sec[2]稍后将使用它们. -
评论
Read seconds address应该是Read seconds。您正在读取秒数,而不是任何地址。 -
这是一个时钟。 sec[0] 是右边的秒数。 sec[1] 是左边的秒数。然后我转换为一个字符串,然后需要通过 USART 发送它。我将需要继续将东西连接到我发送的发送。这将是全职和另一个发送日期的选项。时间来自 DS1307 读取。
-
你现在的写法;假设
ss = 30,那么您将获得sec[0] = 14和sec[1] = 1和sec[2] = 0。在ss = 30的情况下,您是否真的尝试将文本30发送到USART? -
如果您的问题包括示例输入和您期望的输出,这将有所帮助
标签: c pointers casting type-conversion real-time-clock