petalinux 빌드 후 images/linux 위치에서 아래 명령을 이용하여 BOOT.BIN 파일을 생성할 수 있다.
petalinux-package --boot --fsbl ./zynqmp_fsbl.elf --fpga ./system.bit --u-boot --force
petalinux 빌드 후 images/linux 위치에서 아래 명령을 이용하여 BOOT.BIN 파일을 생성할 수 있다.
petalinux-package --boot --fsbl ./zynqmp_fsbl.elf --fpga ./system.bit --u-boot --force
H/W 디자인시 uartlite를 추가하고, 전송 속도를 115200이 아닌값을 설정한 경우 petalinux 설정에서 아래와 같이 설정이 uartlite로 설정이 변경된다.
Subsystem AUTO Hardware Settings->Serial Settings->system stdin/stdout baudrate for psu_uart_0 (19200) --->
여기서 uartlite의 설정은 19200으로 설정함.
build/conf/plnxtool.conf 이곳에 SERIAL_CONSOLES이 19200으로 되어있음
이는 Xilinx의 버그 이며, 아래와 같이 설정으로 hang을 벗어날수있다.
vi ~/project-spec/meta-user/conf/petalinuxbsp.conf
SERIAL_CONSOLES = "115200;ttyPS0"
설정 추가후 빌드
Xilinx 이슈 Link
https://support.xilinx.com/s/article/76468?language=en_US
https://support.xilinx.com/s/question/0D52E00006hpPSvSAM/console-ps-uart0-baud-rate-bug-when-a-different-axi-uart-lite-instantiated-in-pl-with-a-different-baud-rate?language=en_US
장치의 전원을 키고 콘솔 창에 Hit any key to stop autoboot 메시지가 나오면 아무키나 눌러 u-boot 환경변수를 확인 및 수정할 수 있다.
환경변수 확인 : printenv
환경변수 설정 : setenv [환경변수 명] [설정 값]
환경변수 저장 : saveenv
변경 사항이 tool에 의해 덮어쓰기 되기 때문에 해당 파일을 수정해서는 안 되며, 대신 해당 파일에 정의된 값을 수정하려면 다음 파일에 새 값을 기록 또는 수정하면 됩니다.
project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h
PetaLinux 프로젝트에서 환경 변수의 기본값은 다음 파일에서 찾을 수 있으며, 이 파일은 하드웨어(Vivado) 설계 및 PetaLinux 프로젝트 설정의 세부 정보를 사용하여 PetaLinux에 의해 자동으로 생성됩니다.project-spec/configs/u-boot-xlnx/platform-auto.h
주의 : platform-auto.h 파일의 기록된 환경값을 적용하기 위해서는 petalinux-config에서 아래 설정을 선택해지 해야합니다.
Auto Config Settings ---> [ ] u-boot autoconfig
수의 표현
실수 : 1.23 -> 1.23, 4.56*107 -> 4.56e7
허수 : $\sqrt{1}$ -> 1i 또는 1j ex> 실수가 5이고 허수가 3인 복소수 -> 5+1j*3
∞ : inf
π : pi
수가 아닌것 : NaN
행렬 혹은 배열의 형태
스칼라 : a=[3]
행 백터 : X = [1,2,3]
열 백터 : Y = [1;2;3]
행렬 : A = [1,2,3; 4,5,6]
연산자 형태
.* : 배열곱셈
' : 전치
.' : 배열 전치
./ : 배열 나눗셈
.^ : 배열 거듭제곱
이 장에서는 예제 응용 프로그램의 기초가 될 새로운 다중 프로젝트 솔루션을 만들 것입니다. 사용자 인터페이스와 비즈니스 로직을 분리하여 Model View Controller 패턴을 적용할 것입니다. 또한 Qt의 단위 테스트 프레임워크인 QtTest를 소개하고 이를 솔루션에 통합하는 방법을 보여줍니다. 이 장에서는 다음 사항을 다룰 것입니다.
이전 장에서 만든 스크래치패드 응용 프로그램은 .pro 파일로 표시되는 Qt 프로젝트입니다. 비즈니스 환경에서 기술 솔루션은 일반적으로 회사 이니셔티브의 일부로 개발되며 이러한 이니셔티브는 일반적으로 프로젝트라고도 합니다. 혼란을 최소화하기 위해(그리고 프로젝트라는 단어가 나타나는 횟수!), 우리는 .pro 파일로 정의된 Qt 프로젝트를 의미하는 프로젝트와 비즈니스 의미의 프로젝트를 언급하는 이니셔티브라는 단어를 사용할 것입니다.
우리가 작업할 이니셔티브는 일반적인 클라이언트 관리 시스템이 될 것입니다. 공급업체가 고객을 관리하고 의료 서비스가 환자를 관리하는 등 여러 애플리케이션에 맞게 조정하고 용도를 변경할 수 있습니다. 실제 LOB(Line of Business) 응용 프로그램에서 반복적으로 발견되는 일반적인 작업을 수행하며 주로 데이터를 추가, 편집 및 삭제합니다.
스크래치패드 애플리케이션은 단일 프로젝트 내에 완전히 캡슐화되어 있습니다. 더 작은 응용 프로그램의 경우 이것은 완벽하게 실행 가능합니다. 그러나 더 큰 코드 기반, 특히 여러 개발자가 관련된 경우에는 관리하기 쉬운 부분으로 쪼개는 것이 좋습니다.
우리는 MVC(Model View Controller) 아키텍처 패턴의 초경량 구현을 사용할 것입니다. 이전에 MVC를 접한 적이 없다면 주로 사용자 인터페이스에서 비즈니스 로직을 분리하는 데 사용됩니다. 사용자 인터페이스(보기)는 명령을 스위치보드 스타일 클래스(컨트롤러)에 전달하여 데이터를 검색하고 필요한 작업을 수행합니다. 컨트롤러는 차례로 데이터, 논리 및 규칙에 대한 책임을 데이터 개체(모델)에 위임합니다.
그림1
핵심은 컨트롤러에 명령을 보내고 모델에 저장된 데이터를 표시해야 하기 때문에 뷰가 컨트롤러와 모델에 대해 알고 있다는 것입니다. 컨트롤러는 작업을 위임해야 하므로 모델에 대해 알고 있지만 뷰에 대해서는 모릅니다. 모델은 컨트롤러나 뷰에 대해 아무것도 모릅니다.
비즈니스 환경에서 이러한 방식으로 애플리케이션을 설계하는 주요 이점은 전담 UX 전문가가 보기에 대해 작업하는 동안 프로그래머가 비즈니스 로직에 대해 작업할 수 있다는 것입니다. 두 번째 이점은 비즈니스 논리 계층이 UI에 대해 아무것도 모르기 때문에 논리 계층에 영향을 주지 않고 사용자 인터페이스를 추가, 편집 및 완전히 대체할 수 있다는 것입니다. 좋은 사용 사례는 데스크톱 애플리케이션을 위한 "풀 팻(full fat)" UI와 모바일 장치를 위한 컴패니언 "반 팻(half fat)" UI를 갖는 것입니다. 둘 다 동일한 비즈니스 로직을 사용할 수 있습니다. 이 모든 것을 염두에 두고 UI와 비즈니스 로직을 별도의 프로젝트로 물리적으로 분리할 것입니다.
또한 자동화된 단위 테스트를 솔루션에 통합하는 방법도 살펴볼 것입니다. 단위 테스트 및 테스트 주도 개발(TDD)은 최근에 인기를 얻었으며 비즈니스 환경에서 애플리케이션을 개발할 때 코드와 함께 단위 테스트를 작성하게 될 가능성이 높습니다. 그렇지 않은 경우 많은 가치가 있으므로 실제로 제안해야 합니다. 이전에 단위 테스트를 해본 적이 없다고 걱정하지 마세요. 매우 간단하며 나중에 이 책에서 더 자세히 논의할 것입니다.
마지막으로 이러한 하위 프로젝트를 함께 집계하여 개별적으로 열 필요가 없도록 하는 방법이 필요합니다. 우리는 다른 프로젝트를 하나로 묶는 것 외에는 아무것도 하지 않는 우산 솔루션 프로젝트로 이를 달성할 것입니다. 이것이 우리의 프로젝트를 배치하는 방법입니다:
그림2
이전 장에서 몇 개의 텍스트 파일을 만드는 것만으로 새 프로젝트를 설정하는 것이 얼마나 쉬운지 살펴보았습니다. 그러나 우리는 Qt Creator를 사용하여 새로운 솔루션을 만들 것입니다. 새 프로젝트 마법사를 사용하여 최상위 솔루션과 단일 하위 프로젝트를 만드는 과정을 안내합니다.
상단 메뉴에서 File > New File or Project 또는 프로젝트를 선택한 다음 Projects > Other Project > Subdirs Project 를 선택하고 선택…을 클릭합니다.
그림3
Subdirs 프로젝트는 최상위 솔루션 프로젝트에 필요한 템플릿입니다. 이름을 cm로 지정하고 qt 프로젝트 폴더에 생성합니다.
그림4
키트 선택 창에서 설치한 Desktop Qt 5.10.0 MinGW 32비트 키트를 확인합니다. 설치되어 있는 경우 시험해보고 싶은 추가 키트를 자유롭게 선택하십시오. 그러나 필수는 아닙니다. 다음을 클릭하십시오.
그림5
논의한 바와 같이 버전 제어는 이 책의 범위를 벗어나므로 프로젝트 관리 창의 버전 제어에 추가 드롭다운에서 없음을 선택합니다. 마침 및 하위 프로젝트 추가를 클릭합니다.
그림6
사용자 인터페이스 프로젝트를 첫 번째 하위 프로젝트로 추가합니다. 마법사는 방금 수행한 단계와 거의 동일한 패턴을 따르므로 다음을 수행합니다.
이제 최상위 솔루션과 UI 프로젝트가 실행 중이므로 다른 하위 프로젝트를 추가해 보겠습니다. 다음과 같이 비즈니스 논리 프로젝트를 다음에 추가합니다.
마지막으로 단위 테스트 프로젝트를 만드는 프로세스를 반복합니다.
통과해야 할 대화 상자가 많았지만 이제 뼈대 솔루션이 제자리에 있습니다. 프로젝트 폴더는 다음과 같아야 합니다.
그림7
이제 콘텐츠를 추가하기 전에 각 프로젝트를 차례로 살펴보고 약간의 조정을 할 것입니다.
Zturn 보드 HDMI 출력 설계
Qt의 스타일 시트 시스템을 사용하면 멋지고 전문적인 UI를 쉽게 만들 수 있습니다. 이 예에서는 위젯에 사용자 정의 속성을 설정하고 이를 사용하여 다른 스타일 간에 전환하는 방법을 배웁니다.
위젯 속성과 하위 컨트롤을 사용자 정의하려면 다음 단계를 따르십시오.
<< code >>
QPushButton
{
color: white;
background-color: #27a9e3;
border-width: 0px;
border-radius: 3px;
}
<< code >>
QPushButton:hover {
color: white;
background-color: #66c011;
border-width: 0px;
border-radius: 3px;
}
<< code >>
QPushButton:pressed {
color: white;
background-color: yellow;
border-width: 0px;
border-radius: 3px;
}
<< code >>
QPushButton[pagematches=true] {
color: white;
background-color: red;
border-width: 0px;
border-radius: 3px;
}
<< code >>
QPushButton[pagematches=true] {
color: white;
background-color: red;
border-width: 0px;
border-radius: 3px;
}
<< code >>
void MainWindow::on_tabWidget_currentChanged(int index)
{
// Set all buttons to false
ui->Page1->setProperty("pagematches", false);
ui->Page2->setProperty("pagematches", false);
ui->Page3->setProperty("pagematches", false);
// Set one of the buttons to true
if (index == 0)
ui->Page1->setProperty("pagematches", true);
else if (index == 1)
ui->Page2->setProperty("pagematches", true);
else
ui->Page3->setProperty("pagematches", true);
// Update buttons style
ui->Page1->style()->polish(ui->Page1);
ui->Page2->style()->polish(ui->Page2);
ui->Page3->style()->polish(ui->Page3);
}
<< code >>#include <QStyle>
QSpinBox::down-button {
image: url(:/images/spindown.png);
subcontrol-origin: padding;
subcontrol-position: right bottom;
}Qt는 나중에 사용할 수 있도록 프로그램 실행 파일에 모든 유형의 파일을 저장할 수 있는 플랫폼 독립적 리소스 시스템을 제공합니다. 이미지, 오디오, 비디오, HTML, XML, 텍스트 파일, 바이너리 파일 등 실행 파일에 저장할 수 있는 파일 유형에는 제한이 없습니다.
리소스 시스템은 애플리케이션에서 언제든지 액세스할 수 있도록 리소스 파일(예: 아이콘 및 번역 파일)을 실행 파일에 포함하는 데 유용합니다. 이를 달성하려면 .qrc 파일에서 리소스 시스템에 추가하려는 파일을 Qt에 알려야 하고 Qt는 빌드 프로세스 중에 나머지를 처리합니다.
프로젝트에 새 .qrc 파일을 추가하려면 File | New File or Project... 에서 File and Clsses의 Qt를 선택하고 Qt Resource File을 선택합니다. 그런 다음 이름(즉, 리소스)을 지정하고 다음 버튼을 클릭한 후 마침 버튼을 클릭합니다. 이제 .qrc 파일이 생성되고 Qt Creator에 의해 자동으로 열립니다. Qt Creator가 자원을 관리하기 위한 사용자 인터페이스를 제공하므로 XML 형식으로 .qrc 파일을 직접 편집할 필요가 없습니다.
프로젝트에 이미지와 아이콘을 추가하려면 이미지와 아이콘이 프로젝트 디렉토리에 있는지 확인해야 합니다. .qrc 파일에 마우스 오른쪽 버튼을 클릭하여 Add Prefix 선택하여 리소스를 관리할 수 있다. Prefix는 프로젝트에 많은 리소스가 있을 때 더 잘 관리할 수 있도록 리소스를 분류하는 데 사용됩니다.
<< code >>
#centralwidget {
background-color: rgba(32, 80, 96, 100);
border-image: url(:/imses/resources/login_bg.png);
}
아직 끝나지 않았습니다! 이전 레시피(1.5.4 스타일 시트를 사용하여 로그인 화면 만들기)를 보면 로그인 양식과 로고는 그 아래의 수직 스페이서로 인해 기본 창 상단에 붙어 있습니다. 로고와 로그인 양식은 메인 창 상단이 아닌 중앙에 위치해야 합니다. 이 문제를 해결하려면 다음 단계를 따르세요.
<< code >>
#centralWidget {
background: rgba(32, 80, 96, 100);
}
<< code >>
#topPanel {
background-color: qlineargradient(spread:reflect, x1:0.5, y1:0, x2:0, y2:0, stop:0 rgba(91, 204, 233, 100), stop:1 rgba(32, 80, 96, 100));
}
<< code>>
#loginForm {
background: rgba(0, 0, 0, 80);
border-radius: 8px;
}
<< code >>
QLabel { color: white; }
QLineEdit { border-radius: 3px; }
<< code >>
QPushButton {
color: white;
background-color: #27a9e3;
border-width: 0px;
border-radius: 3px;
}
<< code >>
QPushButton:hover { background-color: #66c011; }
아직 로그인 양식이 완료되지 않았습니다. 이제 로그인 양식에 대한 컨테이너를 만들었으므로 양식에 더 많은 위젯을 넣을 차례입니다.
이제 다음 단계를 사용하여 로그인 양식을 생성해 보겠습니다.
<< code >>
#loginForm { border: 1px solid; }
다음으로 다음 단계를 사용하여 로고를 추가합니다.
<< code >>
border: 1px solid;
이전 예제에서 배운 모든 지식을 통합하고 가상의 운영 체제에 대한 로그인 화면을 만드는 방법을 배웁니다. 스타일 시트는 좋은 UI를 디자인하기 위해 마스터해야 하는 유일한 것이 아닙니다. Qt Designer의 레이아웃 시스템을 사용하여 위젯을 깔끔하게 배열하는 방법도 배워야 합니다.
Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...