8/12/2017

CCSv6,7 TI-BIOS시 ROV 기능 소개

ROV(Runtime Object View)

CCSv7에서 부터 지원이 가능한 것 같으며, TI-RTOS인 BIOS를 사용할 경우 지원이 가능한 것 같다.
아직 이 기능을 사용해보지 못했으며, 만약 다시 TI의 BIOS를 이용하게될 경우가 있다면 추후 이용해보도록 하겠다.

  1. CCS의 JTAG을 이용하여 Connection 
  2. CCS Debug Mode 로 진입 
  3. Tools->RTOS Object View(ROV)  선택 

정확한 기능은 A.out 기반으로 사용되는 실행파일(Object File)을 분석하고 각 Stack Size 및 Heap size를  측정해주는 것 같다.
다만 ELF도 되는지는 아직 확인 안했음. 

동작방식은 Symbol Table 기반으로 분석하여 각각 분석을 해주는 것 같은데, 카테고리로 나누어서 분석을 해줘
나중에 사용한다면 유용할 것 같다.

  https://www.youtube.com/watch?v=NV0gNNavmUw&t=36s
  https://www.youtube.com/watch?v=MI_2iM2WbU8&t=146

 아래의 동영상을 보면 최적화를 할때 반드시 필요할 것 같다.

TI-TOOLS 관련내용
  https://www.youtube.com/watch?v=_F2bVVqaeFk

8/10/2017

CCS MSP430의 Breakpoint 기능 및 Graph 기능

1. MSP430 JTAG의 고급 사용 

  • MSP430 CCS Manual
2.2.1 Breakpoint Types 에 본인의 MCU에 따라 지원되는 기능과 HW Breakpoint 제한이 있으니 확인해봐야한다.

  http://www.ti.com/lit/ug/slau157ao/slau157ao.pdf

아래의 기능을 MSP430으로 한정 지어서 생각할 필요는 없으며, 다른 TI Chip에게도 해당이 되는 일이기에 같이 설명한다.

1.1 HW Breakpoint의 작동원리 

기존에 설명했듯이 MSP430의 Debug는 JTAG이 지원을 하며, HW Breakpointer를 지원하 디버깅이 쉽게 가능하다.
물론 Breakpointer 기능이 SW로 구현이 가능하며, 이는 또한 Software debugger 필요하겠지만,  여기서 설명하는 것은 JTAG을 이용한 HW breakpoint 기능이다.
하지만 좀 더 많은 기능을 사용해보기 위해서 아래와 같이 BreakPointer의 원리와 구성을 알아보자.

  • HW BreakPoint의 기본동작
HW BreakPointer를 Source의 Line에 설정하면, 아래와 같이 설정화면이 나오는데, Action의 기능이 나오고 기타 기능이 나온다.
기본적으로 동작원리는 얼추 비슷하다. 심볼테이블에서에 실제 주소를 찾아 이 부분이 Cache에 들어올때
확인하여 그부분을 멈추는 것이다.



1.2 Breakpoint 세부설정 

상위에서 기본동작 원리를 알았으니, 이제 아래에서 세부적으로 더 설정이 가능한지 알아보자.
Breakpoint에는 Properties라는 설정이 있는데, 이는 세부적인 Control을 가능하게 만들어준다.

  • Breakpoint Properties 설정 



  • 기본설정구성 
Trigger 0:  구성
  -  Location:  현재 사용중인 a.out format
  -  Access :
  1. instruction fetch:  fetch 할 때 비교 하여  멈춤 

Skip Count:  설정
    Current Count 설정

Instruction Fetch 설정할 경우

Action :
  1. Remain Halted :  Trigger 의 조건이 맞을 경우, 멈추는 것 
  2. Refresh All Windows:  Trigger의 조건이 맞을 경우, 현재 CCS의 Window를 Refresh 



  • Breakpoint 관련 Manual 
  다양한 Breakpoint의 기능을 사용하고 싶다면 아래의 글을 읽어보도록 하자. 

  http://www.ti.com/lit/an/slaa393f/slaa393f.pdf
  https://drive.google.com/open?id=0B_ehveuLi8MVcVRwa3ZpNEZGSGc


2. HW Breakpoint 응용


아래와 같이 Register->View Memory at Address를 하면 쉽게 아래와 같이 주소를 알수 있으며,
이것을 상위 BreakPoint와 조합을 이용하여 사용이 가능하다.


본인이 원하는 Breakpoint를 별도로 설정하고 Register를 감시하자.
Watchpoint 를 사용해도 좋다.



아래 보면, Breakpointer list에 등록이 되어 있고 사용중인 지 항상확인해야 한다.




  • View->Expressions
이전에도 설명 했지만, Expressions에서는 주로 전역변수를 등록하여 감시가 가능하며, 여기서 아래와 같이 이중 포인터 설정가능하다.
(Local 변수도 가능하지만 제한적으로 가능)
쉽게 등록하는 방법은 Watchpoint로 등록하는 방법이고, 직접 여기에 전역변수를 본인이 직접 넣어도 무방하다.
다만 여기에는 Symboltable 기반으로 작동이 되는것 같다.


Breakpointer와 항상 사용하다보면 아래와 같이 이부분을 변경하며 Debug하게 된다.

간단한 사용의 예를 아래와 같이 정리한다.
아래는 txmsg는 배열선언 했으며, 이고, txhead는 일반 value 선언했다.
이를 이용하여 아래와 같이 C 프로그래밍처럼 배열참조가 가능하다.

각 Value에 우측 마우스를 이용하여 다음과 같은 메뉴가 나오며, 이를 이용하여 좀 더 나은 디버깅을 해보자.
  1. View Memory :  Memory 창에서 전역변수의 주소를 볼수가 있다.  
  2. View Memory at Address :  전역변수의 값의 주소를 볼수가 있다. 
  3. Number Format:  Value의 Format을 변경한다. (중요) 
  4. Graph는 추후 설명 



2.1 전역변수 Graph 설정

상위에서 HW BreakPointer의 설정을 이제 Graph에 적용을 해보자.
아래와 같이 설정하면, Breakpointer는 멈추지 않고 Graph를 Refresh 하고 그려줄 것이다.

  1. Breakpointer Properties -> Action -> Refresh All Windows 설정 
  2. Expression 창에서 전역변수를 등록
  3. 전역변수 우클릭으로 Graph 창 설정  
or

  1. Tools->Single Time 설정 
  2. Gprah Properties 설정 ( Start Address 설정 중요 )


아래의 기능은 아이콘 형태로 제공되므로 잘 찾아보자. 

  • Graph Properties를 설정
  1. Start Address : 전역변수 주소 
  2. Sampling Rate :  본인은 원하는 Rate
  3. Grid Style :  본인인 원하는 설정 
  4. Time Display Unit :  Sample or ms or us 





  • 추가적인 설정 
  1. Reset Graph: 그래프를 처음부터 보고 싶다고 한다면 
  2. (Disable/Enable) Continuous Refresh : 지속적으로 보고 싶다고 한다면. 
  3. Refresh on Halt :  Halt일 경우 Refresh 기능 



  http://processors.wiki.ti.com/index.php/Data_Breakpoint/Watchpoint
  http://processors.wiki.ti.com/index.php/Breakpoint
  https://www.youtube.com/watch?v=-iGnh0_9YxE

8/01/2017

Ubuntu에서 USB-Serial을 설정

USB Serial은 전에도 설명했듯이 CDC-ACM을 이용하여 Descriptor을 이용하여 사용한다.
Window도 이 Driver를 제공하지만, Linux도 이 Driver를 제공을 하고 있기에 아래와 같이 
간단히 설명한다. 

대부분 사람들이 Linux를 Virtual Box를 통해서 사용하기 때문에 그 기준으로 설명한다.


  • Virtual Box 설정 
  1. 설정->USB->장치필터 에 USB Serial 등록




  • Ubuntu xxx 설정 및 확인사항 
  1. Ubuntu 에서 lsusb에서 USB Vendor ID와 Product ID 확인 
  2. sudo modprobe usbserial vendor=xxx product=xxxx 로 등록 

현재 usb device 상황 파악

jhlee@jhlee-VirtualBox:~$ lsusb
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 003: ID 0451:16b6 Texas Instruments, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

jhlee@jhlee-VirtualBox:~$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/12p, 12M
    |__ Port 1: Dev 2, If 0, Class=HID, Driver=usbhid, 12M
    |__ Port 2: Dev 3, If 0, Class=comm., Driver=cdc_acm, 12M
    |__ Port 2: Dev 3, If 1, Class=data, Driver=cdc_acm, 12M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/12p, 480M




jhlee@jhlee-VirtualBox:~$ sudo modprobe usbserial vendor=0x0451 product=0x16b6

jhlee@jhlee-VirtualBox:~$ dmesg 
[    6.721716] cdc_acm 2-2:1.0: This device cannot do calls on its own. It is not a modem.
[    6.721805] cdc_acm 2-2:1.0: ttyACM0: USB ACM device
[    6.742603] usbcore: registered new interface driver cdc_acm
[    6.742605] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
.....
[   87.360071] usbcore: registered new interface driver usbserial
[   87.360707] usbcore: registered new interface driver usbserial_generic
[   87.360953] usbserial: USB Serial support registered for generic


  • Ubuntu에서 minicom 설정 (Serial Program)


jhlee@jhlee-VirtualBox:~$ dmesg | grep tty
[    3.809474] console [tty0] enabled
[    6.721805] cdc_acm 2-2:1.0: ttyACM0: USB ACM device

jhlee@jhlee-VirtualBox:~$ sudo minicom -s

            +-----[configuration]------+
            | Filenames and paths      |
            | File transfer protocols  |
            | Serial port setup        |
            | Modem and dialing        |
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+
Serial port setup
            | A -    Serial Device      : /dev/ttyACM0
Save setup as dfl 
Exit


참고사항
  http://belitino.tistory.com/140

Minicom 사용법
  https://help.ubuntu.com/community/Minicom

  • Serial Program 관련내용
만약 본인이 직접 프로그래밍을 한다고 하면, 반드시 sudo로 실행을 해야한다.

  http://tldp.org/HOWTO/Serial-Programming-HOWTO/
  https://wiki.kldp.org/wiki.php/Serial-Programming-HOWTO