cubeide사용 시 printf 를 이용하여 float 형 데이터를 출력하기 위해 설정하는 방법입니다.

더보기

project -> Properties -> C/C++Build -> Settings -> Tool Settings -> MCU Settings -> Use float with printf from newlib-nano (-u _printf_float) 체크

Use float with printf form newlib-nano (-u_printf_float) 체크박스의 체크를 할 시 printf 함수를 이용한 float형 데이터 출력이 가능합니다.

반응형

'ARM > SW 이야기' 카테고리의 다른 글

modbus CRC16  (0) 2026.01.06
전력 검침 칩셋 MAX78630 인터페이스  (0) 2016.07.13
대표적 ASCII 정리  (0) 2010.06.07
C언어를 이용한 CGI 웹 프로그래밍 Intro...  (0) 2010.01.12
리눅스 rpm명령어  (0) 2009.11.10
unsigned char CRCTableHigh[] = {
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
    0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
    0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81,
    0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
    0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
    0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
    0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
    0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
    0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
    0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
    0x40
};

//Table of CRC values for low–order byte
unsigned char CRCTableLow[] = {
    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4,
    0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
    0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD,
    0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
    0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7,
    0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
    0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE,
    0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
    0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2,
    0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
    0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB,
    0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
    0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91,
    0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
    0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88,
    0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
    0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80,
    0x40
};

unsigned short Calc_Crc(unsigned char* ptr, unsigned short len)
{
    unsigned char crchi = 0xff;
    unsigned char crclo = 0xff;
    unsigned short index;

    while (len--)
    {
        index = crclo ^ *ptr++;
        crclo = crchi ^ CRCTableHigh[index];
        crchi = CRCTableLow[index];
    }
    return (crchi << 8 | crclo);
}

int main(void)
{
    unsigned char tx_data[8] = { 0x01, 0x05, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00 };
    unsigned short crc = Calc_Crc(tx_data, 6);

    printf("\r\n Calc Crc :: %04x\r\n", crc);

	return 0;

}

Calc_Crc 함수 호출을 통해 modbus crc16 체크섬 계산이 가능합니다.

 

반응형

3상 3선식 혹은 3상 4선식의 전원을 검침 할 수 있는 솔루션 개발이 금번 프로젝트의 목표 였습니다.


처음에는 계량기 솔루션으로 많이 사용되며, 일전 변압기 감시용 솔루션에 사용 하였던 테리디안의 71M6511 혹은 71M6513을 사용하려 하였습니다.


테리디안의 칩셋은 8051 core와 전력 검침을 위한 dsp가 같이 결합되어 있는 파워 미터 전용 ic로 제품군에 따라 매우 정밀한 측정이 가능 한 장점을 가지고 있습니다.


하지만 앞서 말씀드린바와 같이 시대에 뒤떨어진 8051 core와 작은 메모리 사이즈로 인해, 외부 확장 메모리를 붙이거나, 심지어 별도의 mcu를 붙여 제어하는 형태로 개발이 이루어지고 있습니다. 또한 개발 툴 역시 최소 100만원 이상의 장비를 별도 구매하여야 합니다.


이러한 단점으로 인해 효율적인 개발과 시간 단축을 위해 새로운 솔루션을 찾게 되었으며, MAX78630이 이러한 대안 이었습니다.


MAX78630에 대해 간단히 설명 드리면 아래와 같습니다.

MAX78630은 여러 상의 전원을 측정 하는 모니터링 시스템을 위한 chipset으로 자체 내장된 24-bit 검침 코어와 펌웨어가 내장되어 있습니다. 또한 설정값들을 자체 저장 할 수 있는 비휘발성 메모리 역시 내장되어 사용자가 별도로 설정 데이터를 관리할 필요가 없습니다.


저희는 LCD 및 기타 여러 기능들을 위한 I/O가 다수 필요하여, ST사의 STM32F103VB mcu를 선정하여 인터페이스 하였으며, 한정된 SPI 로 인해 usart 를 이용하여 chipset과 인터페이스 하였습니다.


hardware의 구성은 따로 아래 포스트를 통해 연재 하도록 하겠습니다.


여기서는 interface 만을 집중적으로 보도록 하겠습니다.


반응형

'ARM > SW 이야기' 카테고리의 다른 글

STMicro CubeIDE에서 printf를 이용하여 float형 출력하기  (0) 2026.01.06
modbus CRC16  (0) 2026.01.06
대표적 ASCII 정리  (0) 2010.06.07
C언어를 이용한 CGI 웹 프로그래밍 Intro...  (0) 2010.01.12
리눅스 rpm명령어  (0) 2009.11.10

DEC HEX 기호
0 0x00 NUL (NULL Character)
1 0x01 SOH (Start of Header)
2 0x02 STX (Start of Text)
3 0x03 ETX (End of Text)
4 0x04 EOT (End of Transmission)
5 0x05 ENQ (Enquiry)
6 0x06 ACK (Acknowledgement)
7 0x07 BEL (Bell)
8 0x08 BS (Backspace)
9 0x09 HT (Horizontal Tab)
10 0x0A LF (Line feed)
11 0x0B VT (Vertical Tab)
12 0x0C FF (Form feed)
13 0x0D CR (Carriage return)
14 0x0E SO (Shift Out)
15 0x0F SI (Shift In)
16 0x10 DLE (Data link escape)
17 0x11 DC1 (Device control 1)
18 0x12 DC2 (Device control 2)
19 0x13 DC3 (Device control 3)
20 0x14 DC4 (Device control 4)
21 0x15 NAK (Negative acknowledgement)
22 0x16 SYN (Synchronous idle)
23 0x17 ETB (End of transmission block)
24 0x18 CAN (Cancel)
25 0x19 EM (End of medium)
26 0x1A SUB (Substitute)
27 0x1B ESC (Escape)
28 0x1C FS (File separator)
29 0x1D GS (Group separator)
30 0x1E RS (Record separator)
31 0x1F US (Unit separator)
32 0x20 SPC (Space)
- falinux forum에서 발췌..
반응형

'ARM > SW 이야기' 카테고리의 다른 글

modbus CRC16  (0) 2026.01.06
전력 검침 칩셋 MAX78630 인터페이스  (0) 2016.07.13
C언어를 이용한 CGI 웹 프로그래밍 Intro...  (0) 2010.01.12
리눅스 rpm명령어  (0) 2009.11.10
부트로더 란?  (0) 2009.11.10
이번에 회사에서 맡은 프로젝트는 웹 프로그램입니다...
제품은 IP 전화기 및 중앙 단말기와 연동되는 키폰 입니다..
제가 맡은 부분은 하드웨어나 펌웨어가 아닌... 웹 입니다 ...
그것도 임베디드 상에서의 웹... 공유기에서나 사용될 줄 알았는데 이렇게 맡게 되네요...
문제는... 이겁니다.. CGI... Perl 이나 java를 이용한 것이 아닌.. C를 이용한 CGI 웹 프로그래밍 이죠..

구현해야 할 내용은 다음과 같습니다..

1. 로그인 부분 구현
2. 키폰의 LCD 부분에 표기될 정보를 사용자로부터 입력받아 장비에 세팅
3. 네트워크 설정 세팅부
4. 웹을 통한 펌웨어 업그레이드
5. 웹을 통한 환경설정 업데이트 부분
등 입니다..

프로젝트는 이제 막바지에 다다르고 있으며 차후 같은 프로젝트의 진행시 도움 및 현재 유사한 프로젝트로 인해 날밤을 세우시는 개발자 분들을 위해 이 글을 남기고자 합니다..
진행 될 강좌는 크게 아래와 같이 나누고자 합니다..

1. CGI란 무엇인가
2. CGI 구동을 위한 아파치 서버의 설정
3. HTML FORM을 이용하여 서버로 데이터 전송 방법
4. FORM으로부터 데이터를 입력받아 처리하는 법
5. 한글 처리 방법
6. 기타...

반응형

'ARM > SW 이야기' 카테고리의 다른 글

전력 검침 칩셋 MAX78630 인터페이스  (0) 2016.07.13
대표적 ASCII 정리  (0) 2010.06.07
리눅스 rpm명령어  (0) 2009.11.10
부트로더 란?  (0) 2009.11.10
리눅스 FTP 명령어 정리  (0) 2009.11.10
rpm 명령어
간단한 rpm 명령어를 정리해 보려 한다.

나중에 기회되면 이 옵션들이 멀 뜻하는지 정리해야지

- 패키지 설치하기
$rpm -Uvh <패키지 이름>

- 패키지가 설치되어 있는지 확인
$rpm -qa | grep <패키지 이름>

- 패키지 제거하기
$rpm -e --nodeps <패키지 이름>
(--nodeps는 rpm패키지를 삭제할 때 의존성을 무시하라는 옵션)

반응형

'ARM > SW 이야기' 카테고리의 다른 글

대표적 ASCII 정리  (0) 2010.06.07
C언어를 이용한 CGI 웹 프로그래밍 Intro...  (0) 2010.01.12
부트로더 란?  (0) 2009.11.10
리눅스 FTP 명령어 정리  (0) 2009.11.10
LN2440SBC 메모리 맵  (0) 2009.11.10

+ Recent posts