Showing posts with label Cpp. Show all posts
Showing posts with label Cpp. Show all posts

Friday, September 02, 2016

2進数 printf binary format

Example to printf in binary data ( for only data size <= uint32_t )

バイナリ形式にprintf出力したいが、いいサンプルが見つからなかったため、作成しました。

#include <stdio.h>
#include <stdint.h>
#include <limits.h>
#include <assert.h>

#define PRINTB(x) { \
        uint32_t sz = sizeof(x) * CHAR_BIT; \
        uint32_t va = 0; \
        assert(sz <= sizeof(uint32_t) * CHAR_BIT); \
        while (sz){ \
            va = 1 << (sz-1); \
            (x & va) ? printf("1") : printf("0") ; \
            va = 0; \
            sz = sz - 1; \
        } \
        printf("\n"); }

int main()
{
    char x = 0x1;
    PRINTB(x);

    return 0;
}

Monday, June 16, 2014

Debug preprocessor, デバッグメッセージ

Debug message
#define SHOW_DEBUG_MSG
#ifdef SHOW_DEBUG_MSG
#include 
#include 

#define DEBUG(format, ...) fprintf (stdout, "[DEBUG] %s(%d): " format "\n", __FUNCTION__ ,__LINE__ ,##__VA_ARGS__)
#else
#define DEBUG(...)  (void)0
#endif // DEBUG

Wednesday, May 21, 2014

Embedded Test framewrok

Embedded Test Frame work memo:
- embUnit
 #include 

- Test definition:

static void setup(void) {}
static void teardown(void {}

static void test_func1(void){
 // Test for funcA
 TEST_ASSERT_EQUAL_STRING(exp, actual)
 ...
}

static void test_func2(void){
 // Test for funcA
 TEST_ASSERT_EQUAL_STRING(exp, actual)
 ...
}
...

TestRef Testset_A(void){
 EMB_UNIT_TESTFIXTURE(fixture){
  new_TestFixture("test_func1", test_func1);
  new_TestFixture("test_func2", test_func2);
  ...
 }
 
 // Create a test called "Testname_A"
 EMB_UNIT_TESTCALLER(Testname_A, "Testname_A", setup, teardown, fixtures);
 
 return (TestRef)&Testname_A;
}

Run Test:
#include 

TestRef Testset_A(void);
...

int main(int argc, const char** argv)
{
 TestRunner_start();
 TestRunner_runTest( Testset_A () );
 ...
 TestRunner_end();
 return 0;
}




Tuesday, May 19, 2009

const

■ 下記の書き方は同じ意味,これでxは定数で,別の値を代入できなくなる.
int const x = 200;
const int x = 200;

■ constポインタは少し厄介
const char* p1 = "aaa"; // p1, p2が指す内容を変更できないが,p1, p2は変更可能
char const* p2 = "bbb";

char* const p3 = "ccc"; // p3は変更できないが,指す内容は変更できる

const char* const p4 = "ddd"; // p4と指す値も両方変更できない

*の左にがある場合は指す内容を変更できないが,ポインタは変更可能
*の右に*がある場合は指す内容を変更できるが,ポインタは変更できない
両方がある場合は値もポインタも変更できない

■ const なクラスメンバー
コンストラクタでOBJを作成するときには必ず初期化しないといけない

■ クラスの関数で,属性を変更しないものは const をつけろ!