9 years, 8 months ago.

Serial communication with k64F semi - working

Hi.

I've created a program that is supposed to find primes using the k64F platform, but the when I try to print an int variable, it pops up error #167 and complains that the data type is not a const char. Any ideas would be great. Here is my code:

Prime Number Generator

#include "mbed.h"

Serial pc(USBTX, USBRX);

int main()
{
    int i = 3;
    bool flag;
    pc.printf("Prime Number Generator \n\n");

    while (true) {
        wait(.001f);
        flag = false;
        for(int j = 2; (j * j < i) && (i % j != 0); j++){
            if(i % j == 0){ 
                flag = true;
                break;
            }
        }
        
        if(!flag) 
            pc.printf((int)i); 
        i += 2; 
    }
}

2 Answers

9 years, 8 months ago.

You need a format string for printf, otherwise it doesn't know what type to interpret i as. . the line should be on the order of: pc.printf("$d\n",i);

9 years, 8 months ago.

Hi,
Dave-san's comment seems to be right.

For my case I usually use

pc.printf("%d\n\r", i) ;

moto

Thanks for responding so quickly :) . Completely unrelated to the original question, it prints everything okay, but somehow a few non-primes get printed also, like 25. I've tried a very similar program on an arduino, and it works fine (i.e, only ends with the numbers 1, 3, 7 and 9). Any ideas?

posted by Caleb Washburn 06 Mar 2015

Hi,

First of all '2' is a prime number, if I remember correct.
As for my trial

#include "mbed.h"
 
Serial pc(USBTX, USBRX);
 
int main()
{
    int i = 3;
    int j ;
    bool flag;
    pc.printf("Prime Number Generator \n\n");
 
    pc.printf("2\n\r") ; // 2 is a prime
    while (true) {
        wait(.001f);
        flag = false;
        for(j = 2 ; j <= (i/2) ; j++ ) {
            if((i % j) == 0){ 
                flag = true;
                break;
            }
        }
        
        if(!flag) 
            pc.printf("%d\n\r",i); 
        i += 2; 
    }
}

I could not check if it is working perfectly, but as least 25 does not show up.

moto

posted by Motoo Tanaka 07 Mar 2015

I like the j <= i / 2 statement in the for() loop; it is probably considerably faster than my j * j < i. :)

posted by Caleb Washburn 10 Mar 2015

Do any of you know where to find information about string formatting for printf()? I'm working on a program that prints all the prime factors of numbers. I'm coming from an Arduino background where everything is spoon-fed. :)

posted by Caleb Washburn 10 Mar 2015