'초보의 아웅다웅 설계하기'에 해당되는 글 273건

  1. 2018.04.21 변수 선언시 __IO의 사용
  2. 2018.04.20 통신 프로토콜
  3. 2018.04.20 ST에서 지원하는 Low Layer 드라이버
  4. 2018.04.17 HAL_UART_Receive_IT 사용하지 않기
  5. 2018.04.10 QNX 사용하기
  6. 2018.04.09 Coocox Misc Controls에서 지원하는 옵션 모음
  7. 2018.04.04 IAR에서 Stack 할당 계산
  8. 2018.04.01 C# TextBox 속도와 WordWrap = false 처리
  9. 2018.03.15 U2F 설정과 확인
  10. 2018.03.15 ST Micro JTAG 단자를 IO로 사용하기
  11. 2018.03.05 하드웨어 가상화폐 저장소
  12. 2018.02.21 이클립스 안드로이드 프로그램을 안드로이드 스튜디오 버젼으로 변경
  13. 2018.02.08 One Elf Section per Function 옵션???
  14. 2018.02.07 MultiCore 테스트에서 .text 값 변화 문제
  15. 2018.02.01 Nios II - 고정 데이터와 변수의 영역 분리
  16. 2018.02.01 Source Code를 변경하지 않고 Makefile를 통하여 Define 값을 넣는 방법
  17. 2018.01.26 JPG 파일 포맷의 구조
  18. 2018.01.19 Nios II WatchDog Timer 예제
  19. 2018.01.16 Bin2SREC 바이너리 파일을 모토로라 헥사포맷으로 변경
  20. 2018.01.09 Nios II Multi Core 만들기
  21. 2018.01.04 reset slave is not specified. please select the reset slave 발생의 경우
  22. 2017.12.11 Nios 2에서 elf 파일을 bin 파일로 변환하기(기타 srec)
  23. 2017.11.13 Verilog AES 테스트
  24. 2017.11.05 특정값을 다른 메모리 번지에 저장하는 방법
  25. 2017.11.03 J-Link 및 J-Flash 사용법
  26. 2017.10.20 PLL 설정 부분
  27. 2017.10.05 Verilog simulation
  28. 2017.09.25 Downloading ELF Process failed 에러
  29. 2017.09.25 알테라에서 IP추가후 에러가 발생하는 문제
  30. 2017.08.23 Flash Protection을 걸었을 경우 해제하는 방법
2018.04.21 09:45

Uart 링버퍼에서 배열의 포인터를 uint16_t RxCnt로 사용하였는데 SPI 링버퍼에 똑같이 사용하였더니 값이 제대로 처리되지 않는 현상이 있어 __IO uint16_t RxCnt 처리를 해주었습니다.

 

__IO = volatile
__I = volatile const

 

https://community.nxp.com/thread/423749

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.20 22:41

 

홈네트워크 통신연동할 때 쓴 후로 통신 프로토콜 짤 때 기본으로 잡고 가장 많이 썼던 구조입니다.(홈넷 통신 프로토콜과는 약간 다름)

간단하면서도 필요한 부분은 다 있어서 괜찮았습니다.

 

데이터 무결성차원에서 Check Sum과 Check Xor 자리에 CRC16을 사용하기도 하였고 HMAC을 사용하기도 하였습니다.(HMAC의 경우 앞 바이트만 잘라서 사용)

 

Byte

1

1

1

N

1

1

1

Data

0x02

Var.

Var.

Var.

Var.

Var.

0x03

Field

Start

Cmd

Length

Data N

Sum

Xor

End

 

 

Host쪽에서 CMD에서 0x01를 보내면 Slave쪽에서 최상위 비트에 1을 넣어서 0x81로 데이터를 보내는 방식을 사용하였고, CMD 1바이트로 부족한 경우가 많아 Data N 전까지의 데이터를 Header로 잡아 짝수 바이트로 맞추고 데이터 처리를 주로 하였습니다.

간단한 Return에는 Data에 값을 넣기보다 Header에 값을 넣어 처리해주는 게 더 간단해서(프로그램 짜기가 간단해서 ㅎㅎㅎ) 그렇게 자주 사용하였습니다. 

구조체로 잡아서 처리하는 경우 packed를 하지 않으면 데이터가 연달아 붙지 않아서 고생하는 경우가 생깁니다.

 

 

'초보의 아웅다웅 설계하기 > Back Data 수집하기' 카테고리의 다른 글

통신 프로토콜  (0) 2018.04.20
음계 주파수표  (0) 2013.04.25
모델 변경시 단가 산출하기  (0) 2010.08.08
생산 예상 단가 산출하기  (0) 2010.08.08
타사 모듈 메뉴얼 만들기  (0) 2010.08.03
수리내역 확인하기  (0) 2010.08.03
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.20 22:21

ST에서 이제 Stdlib를 지원하지 않고 Hal만 지원하여 답답했었는데 보다보니

Hal 드라이버만이 아닌 LL Driver을 지원했습니다.

Drivers\STM32L1xx_HAL_Driver\Src 폴더에 보면 stm32fxxx_hal로 시작하는 것말고 stm32fxxx_ll로 시작하는 것들이 있는데 이게 Low Layer Driver이었습니다.

처음에 드라이버 추가할 때 뭘까 했었는데 이게 Low Layer였다니...

기존에 Stdlib를 썼거나 hal이 뜻하는대로 되지 않아 불편한 사람들에게는 정말 좋은 것 같습니다. (다른 건 몰라도 SPI나 UART등등 통신으로 Hal 처리하는 게 원하는 대로 되지 않아 불편했었는데 다행이었습니다.)

 

/*******************************************************************************
* Function Name :
* Parameters    :
* Return        :
* Description   : 

RX만 인터럽트 사용
*******************************************************************************/
void UART_Init(uint8_t a_chUart, uint32_t a_nBaud)
{
  if(a_chUart == 1)
  {
  /* (1) Enable GPIO clock and configures the USART pins *********************/

  /* Enable the peripheral clock of GPIO Port */
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);

  /* Configure Tx Pin as : Alternate function, High Speed, Push pull, Pull up */
  LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_9, LL_GPIO_MODE_ALTERNATE);
  LL_GPIO_SetAFPin_8_15(GPIOA, LL_GPIO_PIN_9, LL_GPIO_AF_7);
  LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_9, LL_GPIO_SPEED_FREQ_HIGH);
  LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_9, LL_GPIO_OUTPUT_PUSHPULL);
  LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_9, LL_GPIO_PULL_UP);

  /* Configure Rx Pin as : Alternate function, High Speed, Push pull, Pull up */
  LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_10, LL_GPIO_MODE_ALTERNATE);
  LL_GPIO_SetAFPin_8_15(GPIOA, LL_GPIO_PIN_10, LL_GPIO_AF_7);
  LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_10, LL_GPIO_SPEED_FREQ_HIGH);
  LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_10, LL_GPIO_OUTPUT_PUSHPULL);
  LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_10, LL_GPIO_PULL_UP);

  /* (3) Enable USART peripheral clock and clock source ***********************/
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);

  /* (4) Configure USART functional parameters ********************************/
  
  /* Disable USART prior modifying configuration registers */
  /* Note: Commented as corresponding to Reset value */
  // LL_USART_Disable(USARTx_INSTANCE);

  /* TX/RX direction */
  LL_USART_SetTransferDirection(USART1, LL_USART_DIRECTION_TX_RX);

  /* 8 data bit, 1 start bit, 1 stop bit, no parity */
  LL_USART_ConfigCharacter(USART1, LL_USART_DATAWIDTH_8B, LL_USART_PARITY_NONE, LL_USART_STOPBITS_1);

  /* No Hardware Flow control */
  /* Reset value is LL_USART_HWCONTROL_NONE */
  LL_USART_SetHWFlowCtrl(USART1, LL_USART_HWCONTROL_NONE);

  /* Oversampling by 16 */
  /* Reset value is LL_USART_OVERSAMPLING_16 */
  LL_USART_SetOverSampling(USART1, LL_USART_OVERSAMPLING_16);

  /* Set Baudrate to 115200 using APB frequency set to 32000000 Hz */
  /* Frequency available for USART peripheral can also be calculated through LL RCC macro */
  /* Ex :
    Periphclk = LL_RCC_GetUSARTClockFreq(Instance); or LL_RCC_GetUARTClockFreq(Instance); depending on USART/UART instance
  
    In this example, Peripheral Clock is expected to be equal to 32000000 Hz => equal to SystemCoreClock
  */
  LL_USART_SetBaudRate(USART1, SystemCoreClock, LL_USART_OVERSAMPLING_16, a_nBaud);

  /* (5) Enable USART *********************************************************/
  LL_USART_Enable(USART1);

  /* (2) NVIC Configuration for USART interrupts */
  /*  - Set priority for USARTx_IRQn */
  /*  - Enable USARTx_IRQn */
  NVIC_SetPriority(USART1_IRQn, 0); 
  NVIC_EnableIRQ(USART1_IRQn);

 

  /* Enable RXNE and Error interrupts */
  LL_USART_EnableIT_RXNE(USART1);
  LL_USART_EnableIT_ERROR(USART1);

  }
  else if(a_chUart == 2)
  {

  }
}

 

/*******************************************************************************
* Function Name :
* Parameters    :
* Return        :
* Description   : 
*******************************************************************************/
void UART_PutChar(uint8_t data)
{
 /* Wait for TXE flag to be raised */
 while (!LL_USART_IsActiveFlag_TXE(USART1)){}

 /* Write character in Transmit Data register.
 TXE flag is cleared by writing data in DR register */
 LL_USART_TransmitData8(USART1, data);

 /* Wait for TC flag to be raised for last char */
 while (!LL_USART_IsActiveFlag_TC(USART1)){} 
}

 

/*******************************************************************************
* Function Name : 
* Parameters    :
* Return        :

* Description   : 
stm32fxxx_it.c 파일 내용


void USARTx_IRQHandler(void)
{
  if(LL_USART_IsActiveFlag_RXNE(USARTx_INSTANCE) && LL_USART_IsEnabledIT_RXNE(USARTx_INSTANCE))
  {
    USART_CharReception_Callback();
  }
  else
  {
    Error_Callback();
  } 
}
*******************************************************************************/
void USART_CharReception_Callback(void)

 Uart1RxBuf = LL_USART_ReceiveData8(USART1);
 /* ECHO mode Start */
// LL_USART_TransmitData8(USARTx_INSTANCE, Uart1RxBuf);
 /* ECHO mode End */
}

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.17 11:36

ST에서 기존 드라이버들에서 Hal 드라이버로 변경한 후 UART 데이터 수신 후 문제가 많았습니다. 물론 틀에 박혀서 사용해야한다는 고정관념 때문이었습니다.

그러다 어떤 분이 올려놓으신 글(당근이)과 아래 사이트를 보면서 아! 꼭 제시해준 방법을 쓰지 않아도 되는구나 기존처럼 사용해도 되는 구나! 하는 것을 알게 되었습니다.

(세상에는 똑똑하신 분들이 많네요. 고정관념 진짜 ㅠㅠ)

 

https://www.basic4mcu.com/bbs/board.php?bo_table=d1&wr_id=40&page=3

 

 

Uart 설정

char Uart1RxData;

 

   /* USART1 */
  Uart1Handle.Instance        = USART1;

  Uart1Handle.Init.BaudRate   = 115200;//Baud Rate
  Uart1Handle.Init.WordLength = UART_WORDLENGTH_8B;
  Uart1Handle.Init.StopBits   = UART_STOPBITS_1;
  Uart1Handle.Init.Parity     = UART_PARITY_NONE;
  Uart1Handle.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
  Uart1Handle.Init.Mode       = UART_MODE_TX_RX;
  Uart1Handle.Init.OverSampling = UART_OVERSAMPLING_16;

    /* GPIO */
  if(HAL_UART_Init(&Uart1Handle) != HAL_OK)
  {
   /* Initialization Error */
  }
  __HAL_UART_ENABLE_IT(&Uart1Handle, UART_IT_RXNE); 

 

 

/* stm32f4xx_hal_msp.c 내용 */

void HAL_UART_MspInit(UART_HandleTypeDef *huart){

  /* Enable GPIO TX/RX clock */
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

  /* Enable USARTx clock */
  __HAL_RCC_USART1_CLK_ENABLE();
  
  /*##-2- Configure peripheral GPIO ##########################################*/ 
  /* UART TX GPIO pin configuration  */
  GPIO_InitStruct.Pin       = GPIO_PIN_9;
  GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull      = GPIO_PULLUP;
  GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF7_USART1;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* UART RX GPIO pin configuration  */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Alternate = GPIO_AF7_USART1;

  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
   
  /*##-3- Configure the NVIC for UART ########################################*/
  /* NVIC for USART */
  HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
  HAL_NVIC_EnableIRQ(USART1_IRQn);

}

 

/* stm32f4xx_it.c 내용 */

 

extern UART_HandleTypeDef Uart1Handle;

extern char Uart1RxData;
void USART1_IRQHandler(void)
{
    if ((__HAL_UART_GET_FLAG(&Uart1Handle, UART_FLAG_RXNE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&Uart1Handle, UART_IT_RXNE) != RESET)) { 
     Uart1RxData = (uint8_t)(Uart1Handle.Instance->DR & (uint8_t)0x00FF);/* STM32FL4 에서는 데이터레지스터인 DR를  변경해주어야 합니다. 저도 보드가 없어서 실테스트를 해보지 못해 못 올리겠네요. 하지만 Instance안에서 수신 데이터 레지스터를 확인해서 넣어주면 될 것 같습니다.  */
    }   
    __HAL_UART_CLEAR_PEFLAG(&Uart1Handle);
//    HAL_UART_IRQHandler(&Uart1Handle); // HAL 드라이버가 제공하는 IRQ 핸들러
}

 

/* 링버퍼를 사용하려면 Uart1RxData 부분을 배열로 받아가면 됩니다. 다만 버퍼 포인터를 증가 및 초기화 해주는 부분이 추가로 필요하겠죠. */

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.10 23:21

QNX 사용법

 

 

 

공유기 사용시(자동으로 가져온 IP 주소를 확인)

크로스 케이블로 PC와 직접 연결시에는 IP를 할당해주어야 합니다.

 

QNX내부에 있는 파일 PC로 가져오기 

 

'초보의 아웅다웅 설계하기 > QNX(RTOS)' 카테고리의 다른 글

QNX 사용하기  (0) 2018.04.10
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.09 22:44

Coocox Misc Controls에서 --help;를 입력하면 나옵니다. 매뉴얼 없다고 계속 찾아다녔는데 이런 방법이.... 국내에서 들어오는 아이피를 막았는지 Coocox사이트에 접속이 불가능하네요.

이런 컴파일러를 써야하다니. ㅠㅠ

 

 

 

 Set architecture
        -a KEYWORD                  Shared library control for HP/UX compatibility
        -A ARCH, --architecture ARCH
        -b TARGET, --format TARGET  Specify target for following input files
        -c FILE, --mri-script FILE  Read MRI format linker script
        -d, -dc, -dp                Force common symbols to be defined
        -E, --export-dynamic        Export all dynamic symbols
        -e ADDRESS, --entry ADDRESS Set start address
        --no-export-dynamic         Undo the effect of --export-dynamic
        -EB                         Link big-endian objects
        -EL                         Link little-endian objects
        -f SHLIB, --auxiliary SHLIB Auxiliary filter for shared object symbol table
        -F SHLIB, --filter SHLIB    Filter for shared object symbol table
        -g                          Ignored
        -G SIZE, --gpsize SIZE      Small data size (if no size, same as --shared)
        -h FILENAME, -soname FILENAME
                                    Set internal name of shared library
                                    Search for library LIBNAME
        -l LIBNAME, --library LIBNAME
        --no-dynamic-linker         Produce an executable with no program interpreter header
                                    Set PROGRAM as the dynamic linker to use
        -I PROGRAM, --dynamic-linker PROGRAM
        -m EMULATION                Set emulation
        --sysroot=<DIRECTORY>       Override the default sysroot location
        -M, --print-map             Print map file on standard output
        -n, --nmagic                Do not page align data
                                    Add DIRECTORY to library search path
        -L DIRECTORY, --library-path DIRECTORY
        -N, --omagic                Do not page align data, do not make text readonly
        --no-omagic                 Page align data, make text readonly
        -o FILE, --output FILE      Set output file name
        -O                          Optimize output file
        -plugin PLUGIN              Load named plugin
        -plugin-opt ARG             Send arg to last-loaded plugin
        -flto                       Ignored for GCC LTO option compatibility
        -flto-partition=            Ignored for GCC LTO option compatibility
        -fuse-ld=                   Ignored for GCC linker option compatibility
        --map-whole-files           Ignored for gold option compatibility
        --no-map-whole-files        Ignored for gold option compatibility
        -Qy                         Ignored for SVR4 compatibility
        -q, --emit-relocs           Generate relocations in final output
        -r, -i, --relocatable       Generate relocatable output
        -R FILE, --just-symbols FILE
                                    Just link symbols (if directory, same as --rpath)
        -s, --strip-all             Strip all symbols
        -S, --strip-debug           Strip debugging symbols
        --strip-discarded           Strip symbols in discarded sections
        --no-strip-discarded        Do not strip symbols in discarded sections
        -t, --trace                 Trace file opens
        -T FILE, --script FILE      Read linker script
        --default-script FILE, -dT  Read default linker script
        -u SYMBOL, --undefined SYMBOL
                                    Start with undefined reference to SYMBOL
        --require-defined SYMBOL    Require SYMBOL be defined in the final output
        --unique [=SECTION]         Don't merge input [SECTION | orphan] sections
        -Ur                         Build global constructor/destructor tables
        -v, --version               Print version information
        -V                          Print version and emulation information
        -x, --discard-all           Discard all local symbols
        -X, --discard-locals        Discard temporary local symbols (default)
        --discard-none              Don't discard any local symbols
        -y SYMBOL, --trace-symbol SYMBOL
                                    Trace mentions of SYMBOL
        -Y PATH                     Default search path for Solaris compatibility
        -(, --start-group           Start a group
        -), --end-group             End a group
        --accept-unknown-input-arch Accept input files whose architecture cannot be determined
        --no-accept-unknown-input-arch
                                    Reject input files whose architecture is unknown
        --as-needed                 Only set DT_NEEDED for following dynamic libs if used
        --no-as-needed              Always set DT_NEEDED for dynamic libraries mentioned on
                                      the command line
        -assert KEYWORD             Ignored for SunOS compatibility
        -Bdynamic, -dy, -call_shared
                                    Link against shared libraries
        -Bstatic, -dn, -non_shared, -static
                                    Do not link against shared libraries
        -Bsymbolic                  Bind global references locally
        -Bsymbolic-functions        Bind global function references locally
        --check-sections            Check section addresses for overlaps (default)
        --no-check-sections         Do not check section addresses for overlaps
        --copy-dt-needed-entries    Copy DT_NEEDED links mentioned inside DSOs that follow
        --no-copy-dt-needed-entries Do not copy DT_NEEDED links mentioned inside DSOs that follow
        --cref                      Output cross reference table
        --defsym SYMBOL=EXPRESSION  Define a symbol
        --demangle [=STYLE]         Demangle symbol names [using STYLE]
        --embedded-relocs           Generate embedded relocs
        --fatal-warnings            Treat warnings as errors
        --no-fatal-warnings         Do not treat warnings as errors (default)
        -fini SYMBOL                Call SYMBOL at unload-time
        --force-exe-suffix          Force generation of file with .exe suffix
        --gc-sections               Remove unused sections (on some targets)
        --no-gc-sections            Don't remove unused sections (default)
        --print-gc-sections         List removed unused sections on stderr
        --no-print-gc-sections      Do not list removed unused sections
        --hash-size=<NUMBER>        Set default hash table size close to <NUMBER>
        --help                      Print option help
        -init SYMBOL                Call SYMBOL at load-time
        -Map FILE                   Write a map file
        --no-define-common          Do not define Common storage
        --no-keep-memory            Use less memory and more disk I/O
        --no-demangle               Do not demangle symbol names
        --no-undefined              Do not allow unresolved references in object files
        --allow-shlib-undefined     Allow unresolved references in shared libraries
        --default-symver            Create default symbol version
        --no-undefined-version      Disallow undefined version
        --allow-multiple-definition Allow multiple definitions
        --no-allow-shlib-undefined  Do not allow unresolved references in shared libs
        --default-imported-symver   Create default symbol version for imported symbols
        --no-warn-search-mismatch   Don't warn on finding an incompatible library
        --no-whole-archive          Turn off --whole-archive
        --no-warn-mismatch          Don't warn about mismatched input files
        -nostdlib                   Only use library directories specified on
        --noinhibit-exec            Create an output file even if errors occur
                                      the command line
        --oformat TARGET            Specify target of output file
        --print-output-format       Print default output format
        --print-sysroot             Print current sysroot
        -qmagic                     Ignored for Linux compatibility
        --reduce-memory-overheads   Reduce memory overheads, possibly taking much longer
        --relax                     Reduce code size by using target specific optimizations
        --no-relax                  Do not use relaxation techniques to reduce code size
        -rpath PATH                 Set runtime shared library search path
        --retain-symbols-file FILE  Keep only symbols listed in FILE
        -rpath-link PATH            Set link time shared library search path
        -shared, -Bshareable        Create a shared library
        -pie, --pic-executable      Create a position independent executable
        --sort-common [=ascending|descending]
                                    Sort common symbols by alignment [in specified order]
        --sort-section name|alignment
                                    Sort sections by name or maximum alignment
        --spare-dynamic-tags COUNT  How many tags to reserve in .dynamic section
        --split-by-file [=SIZE]     Split output sections every SIZE octets
        --split-by-reloc [=COUNT]   Split output sections every COUNT relocs
        --stats                     Print memory usage statistics
        --target-help               Display target specific options
        --task-link SYMBOL          Do task level linking
        --traditional-format        Use same format as native linker
        --section-start SECTION=ADDRESS
                                    Set address of named section
        -Tbss ADDRESS               Set address of .bss section
        -Tdata ADDRESS              Set address of .data section
        -Ttext ADDRESS              Set address of .text section
        -Ttext-segment ADDRESS      Set address of text segment
        -Trodata-segment ADDRESS    Set address of rodata segment
        -Tldata-segment ADDRESS     Set address of ldata segment
        --unresolved-symbols=<method>
                                      ignore-in-shared-libs
                                      ignore-all, report-all, ignore-in-object-files,
        --verbose [=NUMBER]         Output lots of information during link
                                    How to handle unresolved symbols.  <method> is:
        --version-script FILE       Read version information script
        --version-exports-section SYMBOL
                                    Take export symbols list from .exports, using
                                      SYMBOL as the version.
        --dynamic-list-data         Add data symbols to dynamic list
        --dynamic-list-cpp-new      Use C++ operator new/delete dynamic list
        --dynamic-list-cpp-typeinfo Use C++ typeinfo dynamic list
        --dynamic-list FILE         Read dynamic list
        --warn-common               Warn about duplicate common symbols
        --warn-constructors         Warn if global constructors/destructors are seen
        --warn-multiple-gp          Warn if the multiple GP values are used
        --warn-once                 Warn only once per undefined symbol
        --warn-section-align        Warn if start of section changes due to alignment
        --warn-shared-textrel       Warn if shared object has DT_TEXTREL
        --warn-alternate-em         Warn if an object has alternate ELF machine code
        --warn-unresolved-symbols   Report unresolved symbols as warnings
        --error-unresolved-symbols  Report unresolved symbols as errors
        --whole-archive             Include all objects from following archives
        --wrap SYMBOL               Use wrapper functions for SYMBOL
        --ignore-unresolved-symbol SYMBOL
                                    Unresolved SYMBOL will not cause an error or warning
        --push-state                Push state of flags governing input file handling
        --pop-state                 Pop state of flags governing input file handling
        --print-memory-usage        Report target memory usage
        --orphan-handling =MODE     Control how orphan sections are handled.
        @FILE                       Read options from FILE
       [cc] c:/program files (x86)/gnu tools arm embedded/5.2 2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: supported targets: elf32-littlearm elf32-bigarm elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
       [cc] c:/program files (x86)/gnu tools arm embedded/5.2 2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: supported emulations: armelf
       [cc] c:/program files (x86)/gnu tools arm embedded/5.2 2015q4/bin/../lib/gcc/arm-none-eabi/5.2.1/../../../../arm-none-eabi/bin/ld.exe: emulation specific options:
       [cc] ELF emulations:
        --build-id[=STYLE]          Generate build ID note
        --compress-debug-sections=[none|zlib|zlib-gnu|zlib-gabi]
                                    Compress DWARF debug sections using zlib
                                     Default: none
        -z common-page-size=SIZE    Set common page size to SIZE
        -z max-page-size=SIZE       Set maximum page size to SIZE
        -z defs                     Report unresolved symbols in object files.
        -z muldefs                  Allow multiple definitions
        -z execstack                Mark executable as requiring executable stack
        -z noexecstack              Mark executable as not requiring executable stack
        --audit=AUDITLIB            Specify a library to use for auditing
        -Bgroup                     Selects group name lookup rules for DSO
        --disable-new-dtags         Disable new dynamic tags
        --enable-new-dtags          Enable new dynamic tags
        --eh-frame-hdr              Create .eh_frame_hdr section
        --exclude-libs=LIBS         Make all symbols in LIBS hidden
        --hash-style=STYLE          Set hash style to sysv, gnu or both
        -P AUDITLIB, --depaudit=AUDITLIB
       [cc]          Specify a library to use for auditing dependencies
        -z combreloc                Merge dynamic relocs into one section and sort
        -z global                   Make symbols in DSO available for subsequently
       [cc]           loaded objects
        -z nocombreloc              Don't merge dynamic relocs into one section
        -z initfirst                Mark DSO to be initialized first at runtime
        -z interpose                Mark object to interpose all DSOs but executable
        -z lazy                     Mark object lazy runtime binding (default)
        -z loadfltr                 Mark object requiring immediate process
        -z nocopyreloc              Don't create copy relocs
        -z nodefaultlib             Mark object not to use default search paths
        -z nodelete                 Mark DSO non-deletable at runtime
        -z nodlopen                 Mark DSO not available to dlopen
        -z nodump                   Mark DSO not available to dldump
        -z now                      Mark object non-lazy runtime binding
        -z origin                   Mark object requiring immediate $ORIGIN
       [cc]     processing at runtime
        -z relro                    Create RELRO program header
        -z norelro                  Don't create RELRO program header
        -z stacksize=SIZE           Set size of stack segment
        -z text                     Treat DT_TEXTREL in shared object as error
        -z notext                   Don't treat DT_TEXTREL in shared object as error
        -z textoff                  Don't treat DT_TEXTREL in shared object as error
        --thumb-entry=<sym>         Set the entry point to be Thumb symbol <sym>
       [cc] armelf:
        --be8                       Output BE8 format image
        --target1-rel               Interpret R_ARM_TARGET1 as R_ARM_REL32
        --target1-abs               Interpret R_ARM_TARGET1 as R_ARM_ABS32
        --target2=<type>            Specify definition of R_ARM_TARGET2
        --fix-v4bx                  Rewrite BX rn as MOV pc, rn for ARMv4
        --fix-v4bx-interworking     Rewrite BX rn branch to ARMv4 interworking veneer
        --use-blx                   Enable use of BLX instructions
        --vfp11-denorm-fix          Specify how to fix VFP11 denorm erratum
        --fix-stm32l4xx-629360      Specify how to fix STM32L4XX 629360 erratum
        --no-enum-size-warning      Don't warn about objects with incompatible
                                      enum sizes
        --no-wchar-size-warning     Don't warn about objects with incompatible
                                      wchar_t sizes
        --pic-veneer                Always generate PIC interworking veneers
        --long-plt                  Generate long .plt entries
                                    to handle large .plt/.got displacements
        --stub-group-size=N         Maximum size of a group of input sections that
                                     can be handled by one stub section.  A negative
                                     value locates all stubs after their branches
                                     (with a group size of -N), while a positive
                                     value allows two groups of input sections, one
                                     before, and one after each stub section.
                                     Values of +/-1 indicate the linker should
                                     choose suitable defaults.
        --[no-]fix-cortex-a8        Disable/enable Cortex-A8 Thumb-2 branch erratum fix
        --no-merge-exidx-entries    Disable merging exidx entries
        --[no-]fix-arm1176          Disable/enable ARM1176 BLX immediate erratum fi

 

 

기타

#if defined(_WIN32)//윈도우
#define Window 1
#elif defined(__IAR_SYSTEMS_ICC__) //IAR
#define IAR 2
#elif defined(__CC_ARM) //Keil
#define KEIL 3
#elif defined(__GNUC__)//GCC, Coocox
#define GCC 4 

#endif

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.04 00:05

IAR에서 Stack 할당 계산

IAR에서 Map File이 생성되도록 설정하고 Stack 분석을 체크한 후 컴파일을 하면 Stack에 사용되는 용량이 나오고 총 용량의 합보다 더 큰 용량을 Stack에서 설정을 하면 됩니다.

동적 라이브러리로 생성하는 경우 동적라이브러리에 Stack 사이즈를 설정하지 않아도 되고 라이브러리를 불러 사용하는 프로그램에서 최소한 같은 용량이나 그 이상의 용량을 설정해주어야 인터럽트 발생시에 문제가 생기지 않는 듯 싶습니다.

 

Keil과 IAR을 컴파일 후 서로 결과가 달라 양쪽을 모두 사용하기 위해서는 양쪽 모두 확인해 주어야 합니다.(IAR에서 된다고 Keil에서 되는 것도 아니고 Keil에서 된다고 IAR에서 되는 것도 아니라서 확인 하지 않았다가 낭패를 볼 수 있습니다. 제가 그랬습니다.....)

 

 

 

 

 

Program entry
  "mf_initialize": 0x08074485

  Maximum call chain                             2 692 bytes

    ""                                  8
    ""                                    8
    "" in .o [2]                  2 400
    ""                                 64
    "" in .o [2]                  88
    "" in mfapi.o [2]                24
    ""                            16
    ""                            64
    ""                                20

Uncalled function
  "": 0x08077869

  Maximum call chain                               444 bytes

    ""                               80
    ""                           48
    ""                               32
    "" in .o [2]                   284

Uncalled function
  "": 0x08077603

  Maximum call chain                               620 bytes

    ""                                24
    ""                           152
    ""                                     128
    ""                               32
    "" in .o [2]                   284

Uncalled function
  "": 0x0807772b

  Maximum call chain                               340 bytes

    ""                              16
    ""                           8
    ""                               32
    "" in .o [2]                   284

Uncalled function
  "": 0x080775fb

  Maximum call chain                                56 bytes

    ""                               8
    "" in mfapi.o [2]            16
    "__iar_dlfree"                                  32
    "segment_holding" in dlmalloc.o [4]              0

Uncalled function
  "": 0x080744b3

  Maximum call chain                                 8 bytes

    ""                                    8
    ""                                      0

Uncalled function
  "": 0x080744df

  Maximum call chain                                 0 bytes

    ""                                   0

Uncalled function
  "": 0x080744c7

  Maximum call chain                                 0 bytes

    ""                                 0

Uncalled function
  "": 0x080774a5

  Maximum call chain                               144 bytes

    ""                               24
    "" in mfapi.o [2]             16
    "__iar_dlmalloc"                                48
    "sys_alloc" in dlmalloc.o [4]                   56
    "segment_holding" in dlmalloc.o [4]              0

Uncalled function
  "prepend_alloc" in dlmalloc.o [4]: 0x08077b05

  Maximum call chain                                40 bytes

    "prepend_alloc" in dlmalloc.o [4]               40
    "abort"                                          0
    "__exit"                                         0

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.04.01 10:06

C# 테스트 프로그램을 만들어 장비와 연동하는데 기존에는 파일로 읽어서 바로 저장하다가 TextBox에 모두 남긴 후 한번에 저장하도록 프로그램을 작성하였습니다.

내부에서 텍스트 박스에 찍힌 로그를 보면서 이상 유무를 바로 확인하자고 했기 때문입니다.

문제는 텍스트 박스에 적히는 글이 많아질 수록 속도가 현저하게 느려지는 현상이 발생하였습니다.

기존에는 그다지 많은 양의 (100KB 이하) 데이터만을 로그로 찍다보니 알 수 없는 증상이었습니다.

 

이 문제를 찾다보니 같은 증상에 대한 문의와 해결방법이 있었습니다.

자동 줄바꿈 처리에 대한 부분인데 이 부분을 False로 설정하니 속도가 비약적으로 향상되었습니다.

어차피 제 프로그램은

Textbox.text += str

이런 구조에

줄 바꿈도 자체적으로 "\r\n"으로 처리하기때문에 자동 줄바꿈 필요는 없었습니다.

 

----- 관련 내용 -----

사이트 :

https://code.i-harness.com/ko/q/431bd5

 

내용 : WordWrap = false로 설정하면 일부 경우 성능이 크게 향상됩니다. 최대 한도에 도달하면 여전히 긴 줄을 감 쌉니다. 나는 Base64 데이터의 긴 덩어리를 포함하는 90K의 텍스트를 시도했고, 응답은 16 초에서 2 초로 바뀌었다

 

WordWrap에 대한 설명

https://msdn.microsoft.com/ko-kr/library/system.windows.forms.textboxbase.wordwrap(v=vs.110).aspx

 

WordWrap의 사용법에 대한 동영상

https://www.youtube.com/watch?v=o4FvCUWS8RE

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.03.15 18:38

U2F 장치 검색에서 어디에 잡히는 지 한참 보아야 하였습니다.

HID 준수 장치라고 잡힌게 U2F 장치입니다.

자세히는 기타 디바이스 설정에서 볼 수 있었습니다.

 

 

 

 

- 디스크립션 내용 -

ST Micro에서는 CustomHID 파일을 사용하면 됩니다.

 

/**
  ******************************************************************************
  * @file    usb_desc.c
  * @author  MCD Application Team
  * @version V4.1.0
  * @date    26-May-2017
  * @brief   Descriptors for Custom HID Demo
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */


/* Includes ------------------------------------------------------------------*/
#include "usb_lib.h"
#include "usb_desc.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Extern variables ----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/* USB Standard Device Descriptor */
const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
  {
    0x12,                       /*bLength */
    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
    0x10,                       /*bcdUSB */
    0x01,
  
    0x00,                       /*bDeviceClass*/
    0x00,                       /*bDeviceSubClass*/
    0x00,                       /*bDeviceProtocol*/
    0x40,                       /*bMaxPacketSize 64*/
    0x00,                       /*idVendor (0x0000) <= 자사의 밴더 ID에 맞게 설정*/
    0x00,
    0x00,                       /*idProduct = 0x0000 <= 자사의 프로덕트 ID에 맞게 설정 */
    0x00,
  
    0x03,                       /*bcdDevice rel. 2.00*/
    0x10,
  
    1,                          /*Index of string descriptor describing
                                              manufacturer */
    2,                          /*Index of string descriptor describing
                                             product*/
    0,                          /*Index of string descriptor describing the
                                             device serial number */
    0x01                        /*bNumConfigurations*/
  }
  ; /* CustomHID_DeviceDescriptor */


/* USB Configuration Descriptor */
/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
  {
    0x09, /* bLength: Configuration Descriptor size */
    0X02, //USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
    0X29, //CUSTOMHID_SIZ_CONFIG_DESC,
    /* wTotalLength: Bytes returned */
    0x00,
    0x01,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing
                                 the configuration*/
    0x80,         /* bmAttributes: Self powered */
    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */

    /************** Descriptor of Custom HID interface ****************/
    /* 09 */
    0x09,         /* bLength: Interface Descriptor size */
    0x04, //USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
    0x00,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    0x02,         /* bNumEndpoints */
    0x03,         /* bInterfaceClass: HID */
    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */
    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
    0,            /* iInterface: Index of string descriptor */
    /******************** Descriptor of Custom HID HID ********************/
    /* 18 */
    0x09,         /* bLength: HID Descriptor size */
    0x21, //HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
    0x10,         /* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /* bCountryCode: Hardware target country */
    0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */
    0x22,         /* bDescriptorType */
    0x22, //CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */
    0x00,
    /******************** Descriptor of Custom HID endpoints ******************/
    /* 27 */
    0x07,          /* bLength: Endpoint Descriptor size */
    0x05, //USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

    0x81,//0x83          /* bEndpointAddress: Endpoint Address (IN) */
    0x03,          /* bmAttributes: Interrupt endpoint */
    0x40,//0x02,          /* wMaxPacketSize: 2 Bytes max */
    0x00,
    0x05,//0x20,          /* bInterval: Polling Interval (32 ms) */
    /* 34 */
     
    0x07, /* bLength: Endpoint Descriptor size */
    0x05, //USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
   /* Endpoint descriptor type */
    0x01,//0x04 /* bEndpointAddress: */
   /* Endpoint Address (OUT) */
    0x03, /* bmAttributes: Interrupt endpoint */
    0x40,//0x02, /* wMaxPacketSize: 2 Bytes max  */
    0x00,
    0x05,//0x20, /* bInterval: Polling Interval (20 ms) */
    /* 41 */
  }
  ; /* CustomHID_ConfigDescriptor */
const uint8_t CustomHID_ReportDescriptor[CUSTOMHID_SIZ_REPORT_DESC] =
  {                   
/*
const uint8_t HID_ReportDescriptor[] = { 
 HID_UsagePage ( FIDO_USAGE_PAGE ), 
 HID_Usage ( FIDO_USAGE_U2FHID ), 
 HID_Collection ( HID_Application ), 
 HID_Usage ( FIDO_USAGE_DATA_IN ), 
 HID_LogicalMin ( 0 ), 
 HID_LogicalMaxS ( 0xff ), 
 HID_ReportSize ( 8 ), 
 HID_ReportCount ( HID_INPUT_REPORT_BYTES ),
 HID_Input ( HID_Data | HID_Absolute | HID_Variable ),
 
 HID_Usage ( FIDO_USAGE_DATA_OUT ),
 HID_LogicalMin ( 0 ),
 HID_LogicalMaxS ( 0xff ), 
 HID_ReportSize ( 8 ), 
 HID_ReportCount ( HID_OUTPUT_REPORT_BYTES ), 
 HID_Output ( HID_Data | HID_Absolute | HID_Variable ),
 HID_EndCollection
};
*/
 
  0x06, 0xd0, 0xf1,  /* HID_UsagePage ( FIDO_USAGE_PAGE ),  */
 0x09, 0x01,  /* HID_Usage ( FIDO_USAGE_U2FHID ),  */
 0xa1, 0x01,  /* HID_Collection ( HID_Application ),  */
 
 0x09, 0x20, /* HID_Usage ( FIDO_USAGE_DATA_IN ),   */
 0x15, 0x00,  /* HID_LogicalMin ( 0 ),   */
 0x26, 0xff, 0x00,  /* HID_LogicalMaxS ( 0xff ), */
 0x75, 0x08,  /* HID_ReportSize ( 8 ) */
 0x95, HID_PACKET_SIZE, /* HID_ReportCount ( HID_INPUT_REPORT_BYTES ),  */
 0x81, 0x02, /* HID_Input ( HID_Data | HID_Absolute | HID_Variable ),  */
 
  0x09, 0x21,  /* HID_Usage ( FIDO_USAGE_DATA_OUT ),  */
 0x15, 0x00,  /* HID_LogicalMin ( 0 ),  */
 0x26, 0xff, 0x00,  /* HID_LogicalMaxS ( 0xff ),   */
 0x75, 0x08,  /* HID_ReportSize ( 8 ),  */
 0x95, HID_PACKET_SIZE,  /* HID_ReportCount ( HID_OUTPUT_REPORT_BYTES ),  */
 0x91, 0x02,  /* HID_Output ( HID_Data | HID_Absolute | HID_Variable ),  */
 
 0xc0 /* HID_EndCollection */
}; /* CustomHID_ReportDescriptor */

/* USB String Descriptors (optional) */
const uint8_t CustomHID_StringLangID[CUSTOMHID_SIZ_STRING_LANGID] =
  {
    CUSTOMHID_SIZ_STRING_LANGID,
    USB_STRING_DESCRIPTOR_TYPE,
    0x09,
    0x04
  }
  ; /* LangID = 0x0409: U.S. English */

const uint8_t CustomHID_StringVendor[CUSTOMHID_SIZ_STRING_VENDOR] =
  {
    CUSTOMHID_SIZ_STRING_VENDOR, /* Size of Vendor string */
    USB_STRING_DESCRIPTOR_TYPE,  /* bDescriptorType*/
    /* Manufacturer: "STMicroelectronics" */
    'X', 0, 'X', 0, 'X', 0, 'X', 0, 'X', 0, 'X', 0, 'X', 0, 'C', 0,
    'O', 0, 'M', 0, 'P', 0, 'A', 0, 'N', 0, 'Y', 0
  };

const uint8_t CustomHID_StringProduct[CUSTOMHID_SIZ_STRING_PRODUCT] =
  {
    CUSTOMHID_SIZ_STRING_PRODUCT,          /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'H', 0, 'Y', 0, 'P', 0, 'E', 0, 'R', 0, 'F', 0, 'I', 0,
    'D', 0, 'O', 0, ' ', 0, 'T', 0, 'o', 0, 'k', 0, 'e', 0,
    'n', 0
  };
uint8_t CustomHID_StringSerial[CUSTOMHID_SIZ_STRING_SERIAL] =
  {
    CUSTOMHID_SIZ_STRING_SERIAL,           /* bLength */
    USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
    'X', 0, 'X', 0, 'U', 0,'X', 0,'X', 0
  };

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

 

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.03.15 11:36

이 칩 저 칩을 쓰다보니 헷갈리네요.

 

IO가 부족하여 Jtag 단자를 사용하려고 아무리 설정을 하여도 동작이 되지 않아 헤매다가 찾았습니다.

몇년전에 할 때도 이 문제가 있었던 것 같은데 몇년에 한번씩 사용하다보니 기억도 나지 않아 한참 헤맸습니다.

....

 

 /* Enable the AFIO Clock for Remap */
 RCC_APB2PeriphClockCmd (RCC_APB2Periph_AFIO, ENABLE);
 /* Jtag Pin Disable */
 GPIO_PinRemapConfig (GPIO_Remap_SWJ_JTAGDisable, ENABLE);

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.03.05 23:06

하드웨어 비트코인 지갑 관련하여 공부를 하고 있습니다.

어떤 정보를 하드웨어 지갑에 넣어야 하고 어떤 데이터를 공유하여야 하는가에 대해서요.

한 공개 채팅방에서 무척 친절하게 알려주셔서 많은 공부를 할 수 있었습니다.

가상화폐라는 것을 한번도 사용해보지 않은 저에게 무척이나 상세하게 알려주신 분들 감사합니다. 이 내용은 올려주신 분께 여쭈어 보고 올린 내용이고, 혹시 틀린 내용이 있을 수 있다고 말씀해주셨습니다.

감사합니다.

 

 

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.02.21 17:04

마이그레이션 방법

https://developer.android.com/studio/intro/migrate.html#intellij

 

 

이클립스 버젼의 안드로이드 프로그램을 안드로이드 스튜디오로 마이그레이션 할 경우 에러 발생 부분과 처리 방법

 

http://forum.technote.kr/topic/%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95-errorminimum-supported-gradle-version-is-2-14-1

 

 

Error:Minimum supported Gradle version is 4.1. Current version is 2.14.1. If using the gradle wrapper, try editing the distributionUrl in E:\xxxxxxx\01_X-NUCLEO-NFC01A1\01_Refer\en.stsw-st25002\Multi_NDEF\gradle\wrapper\gradle-wrapper.properties to gradle-4.1-all.zip

Consult IDE log for more details (Help | Show Log)

 

 


Error:A problem occurred configuring project ':app'.
> Failed to find target with hash string 'android-15' in: C:\Users\k\AppData\Local\Android\Sdk

 


 

 

 

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.02.08 10:12

 

ST에서 Cypress에서처럼 emwin의 그래픽쪽 라이센스를 구매하였는지 예제 파일이 들어 있어서 카메라에서 이미지를 받아 그 이미지를 그래픽에 뿌려보려고 테스트를 하였습니다. 정상적으로 동작하지 않아 JPEG이미지를 가져와 코드에 넣고 확인하려했으나 이미지가 계속 나오지 않았습니다.

무엇때문일까? 왜 일까? 고심하다 one elf section per function 옵션을 제거해 보았습니다.

그랬더니 이미지가 똭!!!!!

그간 아무 생각없이 항상 체크해두던 옵션이 이럴 수가...

잡다한 인생님 홈페이지(http://electro-don.tistory.com/60)나 Keil 공식 사이트(http://www.keil.com/support/docs/3738.htm)에서의 설명으로는 라이브러리에서 사용하지 않는 함수 제거인데...

조금 더 공부를 해보아야겠습니다.

언제 초보딱지를...... ㅠㅠㅠㅠㅠㅠㅠ

 

Removing unused functions from a library: The major issue with removing unused functions in libraries is that the library object files are already compiled and usually the compiler will pack all functions of one module into a common section. So the linker can only remove this entire section, if all functions in this section are unused.

In order to remove some unused functions in this case, the library objects need to be build with "--split_sections" (there is a check box One ELF Section per Function in Options for Target - C/C++ to enable it). This option will put each function of a module in its own section. So the linker is able to remove each individual function, because it is in its own section. So enabling this for your library will allow the linker to remove unused functions from the library.

 

 

 

 

 

static const U8 _HotImage[54619] = {
  0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x02, 0x01, 0x01, 0x2C, 0x01, 0x2C, 0x00, 0x00, 0xFF, 0xE1, 0x0F, 0x0D, 0x45, 0x78, 0x69, 0x66, ..............

}

 


static int APP_GetData1(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off) {
  *ppData = &_HotImage[Off];

  return NumBytes;
}

int main(void)
{
 /* Initialize system */
 SystemInit();
 
 USART_Init(USART1, TM_USART_PinsPack_1, 115200);
 
 RCC_GetClocksFreq(&SYS_Clocks);
 UART1_printf("\r\nSYSCLK:%dM\r\n",SYS_Clocks.SYSCLK_Frequency/1000000);
 UART1_printf("HCLK:%dM\r\n",SYS_Clocks.HCLK_Frequency/1000000);
 UART1_printf("PCLK1:%dM\r\n",SYS_Clocks.PCLK1_Frequency/1000000);
 UART1_printf("PCLK2:%dM\r\n",SYS_Clocks.PCLK2_Frequency/1000000); 
 UART1_printf("\n\r DCMI Example\n\r");
 
GUI_Init();

 while (1) {
  GUI_JPEG_DrawEx(APP_GetData1, 0, 0, 0);
  UART1_printf("\n\r APP_GetData1 Example\n\r");
  /* Delay 100ms */
  GUI_Delay(2000);
 }

}

 

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.02.07 08:31

DE0_CV_QSYS.qsys

 

MultiCore를 테스트 하다보니 .text 데이터가 변경되는 현상이 발생하였습니다. 학습의 깊이가 짧아 그런지 이론상으로 이해도 되지 않았는데 의심되는 쪽인 양쪽 코어가 공유하고 있는 부분 uart_jtag(양쪽에서 printf를 사용하여 데이터를 확인하려는 의도였습니다.)을 한 쪽에서는 사용하지 못하도록 제거하였더니 그러한 현상이 발생하지 않았습니다.

현재 6일째 Aging를 하고 있지만 발생하지 않는 걸로 봐서 크게 이상은 없을 거라 생각되지만 현재는 엔지니어 관점에서의 처리만 하고 있어 실제 필드 테스트를 해봐야 할 것 같습니다.

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.02.01 14:45

Nios II에서 프로그램이 있는 고정 데이터 영역과 변수, Heap, Stack등을 나눔.

(Const 데이터인 rodata를 같이 독립 시키는 부분이 맞는 지는 잘 모르겠습니다.)

 

 

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.02.01 10:53

Source Code를 변경하지 않고 Makefile를 통하여 Define 값을 넣는 방법

 

Makefile부분

# Common arguments for ALT_CFLAGSs
APP_CFLAGS_DEFINED_SYMBOLS :=
APP_CFLAGS_UNDEFINED_SYMBOLS :=
APP_CFLAGS_OPTIMIZATION := -O0
APP_CFLAGS_DEBUG_LEVEL := -g
APP_CFLAGS_WARNINGS := -Wall
APP_CFLAGS_USER_FLAGS := -D__ALTERA_SYSTEMS__ -D__PRODUCT_NAME=200

 

 

Source Code부분

#if defined(__ALTERA_SYSTEMS__)
 printf("%x, %s, Version %x.%x.%02x \r\n", __PRODUCT_NAME,  PRODUCT_PNAME, VERSION_UPPER, VERSION_MIDDLE, VERSION_DOWN);
#endif

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.01.26 13:41

JPG 파일 포맷의 구조

 

시작 포맷

시작에서는 FF D8로  시작

FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 00 00 00 00 00 FF DB 00 43 00 0C 08 09 0B 09 08 0C

 

종료 포맷

종료에는 FF D9로 종료

10 FF 00 61 71 40 87 D4 32 5D 47 1F 53 40 8A B2 6A 5F DC 4F CE AA C9 7B 33 7F 16 3E 94 08 FF D9

 

 

 

 

상세 설명 페이지

http://cometkorea.tistory.com/56


http://sunshowers.tistory.com/69

 



*** Marker: SOF0 (Baseline DCT) (xFFC0) ***


Raw Data 

FF C0 00 11 08 01 62 02 76 03 01 11 00 02 11 01 03 11 01


  OFFSET: 0x0000009E

  Frame header length = 17(0x11)

  Precision = 8

  Number of Lines = 354(0x0162)

  Samples per Line = 630(0x0276)

  Image Size = 630 x 354

  Raw Image Orientation = Landscape

  Number of Img components = 3

    Component[1]: ID=0x01, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)

    Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cb)

    Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x01 (Chrom: Cr)



 

JPEG 영상 전달 소스 예제)

 

   if( (JpegBuffer[0]==0xFF)&&(JpegBuffer[1]==0xD8) )
   {
     while ( !( (JpegBuffer[JpegBufferLen - JpegDataCnt-2]==0xFF) && (JpegBuffer[JpegBufferLen-JpegDataCnt-1]==0xD9) ) ) 
    {  
     JpegDataCnt++;
    }    
     for(i = 0; i < (JpegBufferLen - JpegDataCnt); i++) //sizeof(JpegBuffer)
    {
     USART_Transmit(JpegBuffer[i]); //영상전달을 UART로 전달
    }
   }

 

영상은 항상 느끼는 거지만 렌즈의 성능 부분도 중요하지만 빛, 촛점거리, 렌즈 기술, 렌즈 색 등이 정말 중요한 것 같습니다.

어렵네요.

 

'초보의 아웅다웅 설계하기 > C언어' 카테고리의 다른 글

JPG 파일 포맷의 구조  (0) 2018.01.26
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.01.19 23:48
2018.01.16 17:29
Bin2SREC 바이너리 파일을 모토로라 헥사포맷으로 변경하기

 

http://www.s-record.com/

에서 bin2srec를 다운 받은 후

 

윈도우 cmd에서

bin2srec -b 4 -i input.bin -o outfile.srec

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.01.09 15:36

DE0_CV__Nios_MultiCore.z01

DE0_CV__Nios_MultiCore.z02

DE0_CV__Nios_MultiCore.z03

DE0_CV__Nios_MultiCore.z04

DE0_CV__Nios_MultiCore.z05

DE0_CV__Nios_MultiCore.zip

Nios II Multi Core 만들기

 

동영상 -

https://www.youtube.com/watch?v=O54sJjSjq60

 

- 별도의 RAM에 프로그램을 올리고 Shared Ram을 공유하는 경우

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2018.01.04 15:20

Nios ii 프로세서 추가후

reset slave is not specified. please select the reset slave 에러가 발생하면

추가한 프로세서의 Reset Vector과 Exception Vector 메모리를 변경해주면 됩니다.

 

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.12.11 14:54

edh_ed51004.pdf

설정관련 문서

 

Nios 2에서 elf 파일을 bin 파일로 변환하기

 

1) Nios II Command Shell을 실행합니다.

 

 

 

 

2) elf 파일이 있는 위치로 경로 이동을 합니다.

cd <Path>

 

3) 변환할 파일의 이름을 적고 변환되었을 때 이름을 적습니다.

nios2-elf-objcopy -O binary DE0_CV_SDRAM_Nios_Test2.elf DE0_CV_SDRAM_Nios_Test2.bin

 

 

 

4) 경로에 bin 파일이 생성되었습니다.

 

 

 

 

기타)

Srec 포맷으로 변경시

nios2-elf-objcopy -O srec DE0_CV_SDRAM_Nios_Test2.elf DE0_CV_SDRAM_Nios_Test2.srec

 

Motorola Hex Format(Srec) 포맷의 구조

http://blog.naver.com/PostView.nhn?blogId=daetery&logNo=150037004193

 

 

Hex 값이 아닌 String 값을 확인.

Nios에서는 S2 포맷을 사용

예제)

S2 포맷

데이터 길이 14(20byte)

Address 0x040000

Data 데이터의 형상은 가변

마지막 1바이트는 (14 ~ 00까지 더한 후 Not)

S2 14 040000 140084003A48011004F8BF1016FDBF00 1F..

S2 14 040010 34014000140840083A68000800000000 54..

 

예제)

~(0x14 + 0x04 + 0xF2 + 0x68 + 0x 11) = ~(0x83) = 0x7c

S2 14 04F268 11000000000000000000000000000000 7c..

 

포맷 변경 예제 파일)

MultiCoreGenori.srec

=> 맨뒤에 S2 14 04F268 11000000000000000000000000000000 7c.. 추가

MultiCoreGen.srec

 

 

S2140655A000000000000000000000000000000000f0..

S2140655B000000000000000000000000000000000e0..

S2140655c000000000000000000000000000000000d0..

S2140655d000000000000000000000000000000000c0..

S2140655e000000000000000000000000000000000b0..

S2140655f000000000000000000000000000000000a0..

S214065600000000000000000000000000000000008f..

 

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.11.13 20:10

samples.zip

 

 

icarus verilog를 사용하여 Aes CTR Test

 

Aes 소스

https://github.com/secworks/aes

Mode 참조

http://www.jidum.com/jidums/view.do?jidumId=614

Test Vector

https://www.monkeybreadsoftware.net/example-encryption-aes-aestestvectors.shtml

 

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.11.05 22:36

Keil 컴파일러에서 특정값을 다른 메모리 번지에 저장하는 방법

 

#if defined ( __ICCARM__ )
#pragma location="ExtQSPIFlashSection"
#else
__attribute__((section(".ExtQSPIFlashSection")))
#endif
static GUI_CONST_STORAGE unsigned char _acvnc1[] = {

...

}

 

 

다른 블로그 참조 부분

http://blog.naver.com/kim1417/220941229924

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.11.03 16:12

 

'초보의 아웅다웅 설계하기 > Jlink_JFlash' 카테고리의 다른 글

J-Link 및 J-Flash 사용법  (0) 2017.11.03
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.10.20 18:52

prj_niosii__.z01

prj_niosii__.z02

prj_niosii__.zip

 

 

PLL 설정 부분의 altpll_0_areset_conduit_export를 설정해주어야 동작.

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.10.05 09:38

사용법을 다룬 블로그 http://donny.co.kr/wp/?p=181

 

linux - http://singerhwang.tistory.com/category/Verilog

 

windows - http://bleyer.org/icarus/

 

iverilog-10.1.1-x64_setup.exe

 

환경 변수 -> 시스템 변수 편집에서 PATH 에 아래 경로 추가

C:\iverilog\bin

C:\iverilog\gtkwave\bin

 

 

ledblink.v

 

화면에서 확인

> iverilog ledblink.v

> vvp a.out

 

여러개 할 경우

> iverilog -o test tb_aes.v aes.v aes_core.v aes_decipher_block.v aes_encipher_block.v aes_inv_sbox.v aes_sbox.v aes_key_mem.v

> vvp test

 

timing 확인

>gtkwave

 

'초보의 아웅다웅 설계하기 > Altera' 카테고리의 다른 글

Verilog AES 테스트  (0) 2017.11.13
PLL 설정 부분  (0) 2017.10.20
Verilog simulation  (0) 2017.10.05
Downloading ELF Process failed 에러  (0) 2017.09.25
알테라에서 IP추가후 에러가 발생하는 문제  (0) 2017.09.25
Altera 시뮬레이션 하기  (0) 2017.05.11
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.09.25 21:23

에러 발생의 원인을 계속 못 찾았습니다.

그러다 아래 사이트에서 이 부분을 확인하였습니다.

Clock이 맞지 않는 경우 --- PLL 설정된 부분을 지우고 입력 Clock로 바로 설정하였더니 이상없이 동작하였습니다.

PLL 부분은 조금 더 공부하여야 할 것 같습니다.

 

https://alteraforum.com/forum/showthread.php?t=35610

 

 

 

 

'초보의 아웅다웅 설계하기 > Altera' 카테고리의 다른 글

PLL 설정 부분  (0) 2017.10.20
Verilog simulation  (0) 2017.10.05
Downloading ELF Process failed 에러  (0) 2017.09.25
알테라에서 IP추가후 에러가 발생하는 문제  (0) 2017.09.25
Altera 시뮬레이션 하기  (0) 2017.05.11
wire와 reg  (0) 2017.05.07
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.09.25 19:38

알테라에서 IP추가후 에러가 발생하는 문제

(Error (12006): Node instance "추가한 아이피 이름" instantiates undefined entity "new_component". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.
)

 

Component Editor -> Synthesis Files에서 추가한 *.vhd의 Analyze Synthesis Files를 눌러서 생성해주어야 함.

'초보의 아웅다웅 설계하기 > Altera' 카테고리의 다른 글

Verilog simulation  (0) 2017.10.05
Downloading ELF Process failed 에러  (0) 2017.09.25
알테라에서 IP추가후 에러가 발생하는 문제  (0) 2017.09.25
Altera 시뮬레이션 하기  (0) 2017.05.11
wire와 reg  (0) 2017.05.07
ALTERA 프로젝트 만들기  (0) 2017.05.06
Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요

2017.08.23 15:58

Flash Protection을 걸었을 경우 해제하는 방법

 

 

http://i12b.egloos.com/v/1298092

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요