'잡동사니'에 해당되는 글 13144건

  1. 2023.05.30 ssh ecdsa 미지원(ubuntu 22.04)
  2. 2023.05.29 abzu 플레이
  3. 2023.05.28
  4. 2023.05.27 fftw 다차원 분석
  5. 2023.05.26 rust mut 외 몇가지 컴파일 에러들
  6. 2023.05.26 nxp i.mx8mp win iot part 2
  7. 2023.05.26 nxp i.mx8mp win iot
  8. 2023.05.25 rust mut
  9. 2023.05.25 rust visibility and privacy
  10. 2023.05.25 cobs

ubuntu 22.04로 올렸더니 git에서 받으려고 시도했으나 실패해서

옆자리 동료에서 물어보니 ssh 보안관련 문제라고

 

그래서 추가로 검색해보니 SSL 에서 구버전 암호화 deprecate 시키듯이

SSH 에서도 ed25519 를 구버전 암호화로 사용을 막도록 기본값을 변경해서 생긴 문제인 듯.

The RSA SHA-1 hash algorithm is being quickly deprecated across operating systems and SSH clients because of various security vulnerabilities, with many of these technologies now outright denying the use of this algorithm.

It seems this has happened for the ssh client in Ubuntu 22.04. The RSA public-private key pair is considered not safe any more.

Solution
Use a more modern and secure type of key such as ed25519. Generate a new key pair in your Ubuntu 22.04 computer with this command:

ssh-keygen -t ed25519 -C "colin@colin-desktop"

[링크 : https://askubuntu.com/questions/1409105/ubuntu-22-04-ssh-the-rsa-key-isnt-working-since-upgrading-from-20-04]

[링크 : https://songs-family.tistory.com/entry/장애이슈-SSH-키-인증-방식-변경ssh-rsa-ecdsa-에-따른-서비스-장애]

 

EdDSA는 Edwards-curve 디지털 서영 알고리즘의 약자고

Ed25519는 SHA-512와 curve25519를 사용했다는데

Edwards-curve Digital Signature Algorithm (EdDSA)
Ed25519 is the EdDSA signature scheme using SHA-512 (SHA-2) and Curve25519[2] where

[링크 : https://en.wikipedia.org/wiki/EdDSA]

 

curve25519는 128bit 암호화를 제공해서 잘린건가?

In cryptography, Curve25519 is an elliptic curve used in elliptic-curve cryptography (ECC) offering 128 bits of security (256-bit key size) and designed for use with the elliptic curve Diffie–Hellman (ECDH) key agreement scheme. 

[링크 : https://en.wikipedia.org/wiki/Curve25519]

Posted by 구차니

역시 인텔 그래픽 감속기로는 무리인가...

HD 620 인데(7세대 내장) 그래픽 옵션들 전부 최저에

해상도 50%(960x540) 으로 해도 15프레임 될까 말까 한 듯

 

프레임도 느린데 asdw 키를 통해서 좌우/상하 전환하면

먼가 예상 한 것 보다 너무 빠르게 움직이고 한템포 늦게 카메라가 또 돌아가버리니 미묘하게 환장하게 만드는 조작감...

 

그래도 유유자적(?)하며 바다를 거니는 느낌은 좋다.

'게임 > 오리진&스팀&유플레이' 카테고리의 다른 글

오리진 계정 복구  (0) 2023.06.08
ea origin은 어디가고..  (2) 2023.06.06
epic 무료게임 - 데스 스트랜딩  (0) 2022.12.26
스위치 둠 공략 - 챕터..4?  (0) 2022.08.30
macos 에픽게임즈  (0) 2022.05.27
Posted by 구차니

그치질 않네

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

청소  (0) 2023.06.04
기절  (0) 2023.06.03
앵무새와 cites  (0) 2023.05.15
낮잠 기절  (0) 2023.05.13
휴가 10일차  (2) 2023.05.07
Posted by 구차니

libttfw 에서는 2차원 3차원 DFT를 지원하는데, 내가 생각하는 그 2차원 3차원이 맞나 모르겠다.

센서가 3축이면 3차원은 맞긴한데.. 희소행렬 형태로 삽입이 되어야 하나?

2.2 Complex Multi-Dimensional DFTs
Multi-dimensional transforms work much the same way as one-dimensional transforms: you allocate arrays of fftw_complex (preferably using fftw_malloc), create an fftw_plan, execute it as many times as you want with fftw_execute(plan), and clean up with fftw_destroy_plan(plan) (and fftw_free).

FFTW provides two routines for creating plans for 2d and 3d transforms, and one routine for creating plans of arbitrary dimensionality. The 2d and 3d routines have the following signature:

fftw_plan fftw_plan_dft_2d(int n0, int n1,
                           fftw_complex *in, fftw_complex *out,
                           int sign, unsigned flags);
fftw_plan fftw_plan_dft_3d(int n0, int n1, int n2,
                           fftw_complex *in, fftw_complex *out,
                           int sign, unsigned flags);

[링크 : https://www.fftw.org/fftw3_doc/Complex-Multi_002dDimensional-DFTs.html]

 

3.2.1 Row-major Format
The multi-dimensional arrays passed to fftw_plan_dft etcetera are expected to be stored as a single contiguous block in row-major order (sometimes called “C order”). Basically, this means that as you step through adjacent memory locations, the first dimension’s index varies most slowly and the last dimension’s index varies most quickly.

To be more explicit, let us consider an array of rank d whose dimensions are n0 × n1 × n2 × … × nd-1 . Now, we specify a location in the array by a sequence of d (zero-based) indices, one for each dimension: (i0, i1, i2,..., id-1). If the array is stored in row-major order, then this element is located at the position id-1 + nd-1 * (id-2 + nd-2 * (... + n1 * i0)).

Note that, for the ordinary complex DFT, each element of the array must be of type fftw_complex; i.e. a (real, imaginary) pair of (double-precision) numbers.

In the advanced FFTW interface, the physical dimensions n from which the indices are computed can be different from (larger than) the logical dimensions of the transform to be computed, in order to transform a subset of a larger array. Note also that, in the advanced interface, the expression above is multiplied by a stride to get the actual array index—this is useful in situations where each element of the multi-dimensional array is actually a data structure (or another array), and you just want to transform a single field. In the basic interface, however, the stride is 1.

[링크 : https://www.fftw.org/fftw3_doc/Row_002dmajor-Format.html]

 

A multi-dimensional array whose size is declared at compile time in C is already in row-major order. You don’t have to do anything special to transform it. For example:

{
     fftw_complex data[N0][N1][N2];
     fftw_plan plan;
     ...
     plan = fftw_plan_dft_3d(N0, N1, N2, &data[0][0][0], &data[0][0][0],
                             FFTW_FORWARD, FFTW_ESTIMATE);
     ...
}
This will plan a 3d in-place transform of size N0 x N1 x N2. Notice how we took the address of the zero-th element to pass to the planner (we could also have used a typecast).

[링크 : https://www.fftw.org/fftw3_doc/Fixed_002dsize-Arrays-in-C.html]

[링크 : https://www.fftw.org/fftw3_doc/Multi_002ddimensional-Array-Format.html]

 

+

에라이 모르겠다 ㅠㅠ

     switch (sz->rnk) {
 case 1:
      if (p->sign < 0) {
   if (verbose > 2) printf("using plan_dft_r2c_1d\n");
   return FFTW(plan_dft_r2c_1d)(sz->dims[0].n, 
(bench_real *) p->in, 
(bench_complex *) p->out,
flags);
      }
      else {
   if (verbose > 2) printf("using plan_dft_c2r_1d\n");
   return FFTW(plan_dft_c2r_1d)(sz->dims[0].n, 
(bench_complex *) p->in, 
(bench_real *) p->out,
flags);
      }
      break;
 case 2:
      if (p->sign < 0) {
   if (verbose > 2) printf("using plan_dft_r2c_2d\n");
   return FFTW(plan_dft_r2c_2d)(sz->dims[0].n, sz->dims[1].n,
(bench_real *) p->in, 
(bench_complex *) p->out,
flags);
      }
      else {
   if (verbose > 2) printf("using plan_dft_c2r_2d\n");
   return FFTW(plan_dft_c2r_2d)(sz->dims[0].n, sz->dims[1].n,
(bench_complex *) p->in, 
(bench_real *) p->out,
flags);
      }
      break;
 case 3:
      if (p->sign < 0) {
   if (verbose > 2) printf("using plan_dft_r2c_3d\n");
   return FFTW(plan_dft_r2c_3d)(
sz->dims[0].n, sz->dims[1].n, sz->dims[2].n,
(bench_real *) p->in, (bench_complex *) p->out,
flags);
      }
      else {
   if (verbose > 2) printf("using plan_dft_c2r_3d\n");
   return FFTW(plan_dft_c2r_3d)(
sz->dims[0].n, sz->dims[1].n, sz->dims[2].n,
(bench_complex *) p->in, (bench_real *) p->out,
flags);
      }
      break;
 default: {
      int *n = mkn(sz);
      if (p->sign < 0) {
   if (verbose > 2) printf("using plan_dft_r2c\n");
   pln = FFTW(plan_dft_r2c)(sz->rnk, n,
    (bench_real *) p->in, 
    (bench_complex *) p->out,
    flags);
      }
      else {
   if (verbose > 2) printf("using plan_dft_c2r\n");
   pln = FFTW(plan_dft_c2r)(sz->rnk, n,
    (bench_complex *) p->in, 
    (bench_real *) p->out,
    flags);
      }
      bench_free(n);
      return pln;
 }
     }

[링크 : https://github.com/FFTW/fftw3/blob/master/tests/bench.c]

 

+

mpi 예제도 있음.

그런데 3d로 한다고 하니 어마어마하게 데이터가 필요할 것 같은데

단순하게 3축 데이터라면 엄청 큰 공간에 딱 3줄 넣는 식이 될텐데 어떻게 해야 할까?

    data = (FFTW_COMPLEX *) FFTW_MALLOC(sizeof(FFTW_COMPLEX) * NX*NY*NZ*sizeof(FFTW_COMPLEX));
    
    /* create plan for forward DFT */
    gettimeofday(&tv_start, NULL);
    plan = FFTW_PLAN_DFT_3D(NX, NY, NZ, data, data,
    FFTW_FORWARD, FFTW_ESTIMATE);
    gettimeofday(&tv_stop, NULL);
    deltaT =  tv_stop.tv_sec  - tv_start.tv_sec +
      1e-6 * (tv_stop.tv_usec - tv_start.tv_usec);
    printf("Plan init time (c2c)  : %f sec\n", deltaT);
    
    /* initialize data */
    for (i = 0; i < NX; ++i) {
      for (j = 0; j < NY; ++j) {
        for (k = 0; k < NZ; ++k) {
          data[(i*NY + j)*NZ + k][0] = (i*NY + j)*NZ + k;
          data[(i*NY + j)*NZ + k][1] = 0;
        }
      }
    }

[링크 : https://github.com/pkestene/simpleFFTW/blob/master/c/fftw_test_3d_serial.c]

 

+

암만봐도 2d나 3d fft는 어떻게 써야 할지 감도 안와서 사용 시도 자체를 포기!

'프로그램 사용 > fft, fftw' 카테고리의 다른 글

fft 잘못 사용하고 있었나?  (0) 2023.06.02
fft 라이브러리 목록  (0) 2023.06.01
fft phase 연산  (0) 2023.04.07
fftw input range?  (0) 2023.04.07
fft 복소수(complex) - 실수, 허수부(real, imaginary)  (0) 2023.04.07
Posted by 구차니
Programming/rust2023. 5. 26. 23:31

use std::io; 없이 사용시

error[E0433]: failed to resolve: use of undeclared crate or module `io`
 --> main.rs:8:5
  |
8 |     io::stdin()
  |     ^^
  |     |
  |     use of undeclared crate or module `io`
  |     help: a builtin type with a similar name exists: `i8`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0433`.




변수 사용 없음 (경고)

warning: unused `Result` that must be used
  --> main.rs:10:5
   |
10 | /     io::stdin()
11 | |         .read_line(&mut guess);
   | |______________________________^
   |
   = note: this `Result` may be an `Err` variant, which should be handled
   = note: `#[warn(unused_must_use)]` on by default

warning: 1 warning emitted




read_line mut 없이

error[E0308]: mismatched types
  --> main.rs:11:20
   |
11 |         .read_line(&guess);
   |          --------- ^^^^^^ types differ in mutability
   |          |
   |          arguments to this method are incorrect
   |
   = note: expected mutable reference `&mut String`
                      found reference `&String`
note: method defined here
  --> /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc\library\std\src\io\stdio.rs:383:12

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.





///
let guess = String::new();
    io::stdin().read_line(&mut guess);
///

error[E0596]: cannot borrow `guess` as mutable, as it is not declared as mutable
  --> main.rs:11:20
   |
11 |         .read_line(&mut guess);
   |                    ^^^^^^^^^^ cannot borrow as mutable
   |
help: consider changing this to be mutable
   |
8  |     let mut guess = String::new();
   |         +++

error: aborting due to previous error

For more information about this error, try `rustc --explain E0596`.







//
let guess = String::new();
    io::stdin().read_line(&guess);
//

error[E0308]: mismatched types
 --> main.rs:9:27
  |
9 |     io::stdin().read_line(&guess);
  |                 --------- ^^^^^^ types differ in mutability
  |                 |
  |                 arguments to this method are incorrect
  |
  = note: expected mutable reference `&mut String`
                     found reference `&String`
note: method defined here
 --> /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc\library\std\src\io\stdio.rs:383:12

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.










'Programming > rust' 카테고리의 다른 글

rust mut  (0) 2023.05.25
rust visibility and privacy  (0) 2023.05.25
rust 소유권  (0) 2023.05.25
rust was  (0) 2023.05.20
c에서 rust 호출하기  (0) 2023.05.11
Posted by 구차니
embeded/i.mx 8m plus2023. 5. 26. 12:33

다시 문서를 보니 이전에 10.1 단계를 건너뛰고 10.2만 진행한 것 같다.

 

아무생각 없이 무지성으로 win 10 x64용 에서 해당 파일 꺼내려고 보니 2GB.

아키텍쳐가 안되겠지...? 라는 생각에

win 10 iot ent 다운로드 받는데 4시간..(32bit / 64bit + 영어 / 국문...)

10.1 Flashing Windows 10 IoT Installer to the SD card
Currently, the only way to deploy a Windows IoT Enterprise on the onboard eMMC is to use WinPE.
OS (Windows Preinstallation Environment) to write the Windows IoT image to eMMC.
Windows manufacturing OS (WinPE) that can be fully loaded and run from memory without using persistent
storage. The following steps create an SD card with WinPE and a Windows IoT image that contains the BSP
drivers. The boot firmware checks the SD card and boots WinPE, which then installs the Windows IoT image to
the eMMC.
1. Decompress the W21H2-1-x-x-imx-windows-bsp-binaries.zip file. The package contains release-signed prebuilt binaries and image files.
2. Open the elevated command prompt and navigate to the IoTEntOnNXP directory.
3. Mount the previously downloaded Windows IoT Enterprise ISO image file (see chapter Software
requirements) and copy the install.wim file from the <DVD mount drive:>\sources\install.wim to the
IoTEntOnNXP directory.
4. Execute the command:
make-winpe-enterprise.cmd /disable_updates /disable_transparency /test_signing
This command creates a copy of the selected install.wim image with injected i.MX drivers and applied
updates from the kbpatch/ directory. These patches are for Windows 21H2, build 19044.1288 and update
the image to build 19044.2566.
Note: Be sure to copy the whole command line.
5. Execute the command:
make-winpe-enterprise.cmd /apply <disk_number>
where <disk_number> is the physical number of the SD card disk on your PC. It can be obtained using the
Disk Management tool (right-click the start menu icon and select Disk Management).
This command deploys the WinPE image to the SD card.
CAUTION: Make sure to select the correct disk number, as this step formats the selected disk! The WinPEbased Windows installer is now deployed on the SD card.
6. Continue with the firmware installation to the SD card.

10.2 Flashing firmware to the SD card
During active development of the boot firmware, it can be time-consuming and error-prone to repeatedly change
the dip switches between UUU download mode and eMMC boot mode. To simplify this process, the i.MX EVK
boards support SD card boot mode that allows you to keep the boot firmware on an SD card.
To deploy boot firmware to an SD card from Windows, we recommend using the Cfimager tool from https://www.
nxp.com/webapp/Download?colCode=CF_IMAGER.
Perform the following steps to flash the firmware to the SD card:
1. Download the NXP cfimager tool and copy it into the firmware directory or a directory listed in the system
environment variable %PATH%.
2. Navigate to the firmware directory.
3. Plug the SD card into the host PC and execute the following board-specific command:
For i.MX 8M Mini EVK board:
flash_bootloader.cmd /device MX8M_MINI_EVK /target_drive <SD card driver letter, for example, f:>
For i.MX 8M Quad EVK board:
flash_bootloader.cmd /device MX8M_EVK /target_drive <SD card driver letter, for example, f:>
For i.MX 8M Nano EVK board:
flash_bootloader.cmd /device MX8M_NANO_EVK /target_drive <SD card driver letter, for example, f:>
For i.MX 8M Plus EVK board:
flash_bootloader.cmd /device MX8M_PLUS_EVK /target_drive <SD card driver letter, for example, f:>
For i.MX 8QuadXPlus MEK board:
flash_bootloader.cmd /device MX8QXP_MEK /target_drive <SD card driver letter, for example, f:>
For i.MX 93 EVK board:
flash_bootloader.cmd /device MX93_11X11_EVK /target_drive <SD card driver letter, for example, f:>
4. Power off the board.
5. Insert the SD card to the board.
6. Change the boot device to the SD card.
7. Power on the board

[링크 : https://www.nxp.com/docs/en/quick-reference-guide/IMXWQSG.pdf]

 

 

+

다시 시도 하는데 이런저런 또 막히는 것들 산더미 -_-

C:\nxp\W21H2-1-3-0-imx-windows-bsp-binaries\IoTEntOnNXP>make-winpe-enterprise.cmd /disable_updates /disable_transparency /test_signing

You must install the Windows PE Add-on for the ADK
https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/download-winpe--windows-pe

Script failed Cleaning up

배포 이미지 서비스 및 관리 도구
버전: 10.0.22621.1


오류: 50

지원되지 않는 요청입니다.

DISM 로그 파일은 C:\Windows\Logs\DISM\dism.log에 있습니다.

배포 이미지 서비스 및 관리 도구
버전: 10.0.22621.1


오류: 50

지원되지 않는 요청입니다.

DISM 로그 파일은 C:\Windows\Logs\DISM\dism.log에 있습니다.
C:\nxp\W21H2-1-3-0-imx-windows-bsp-binaries\IoTEntOnNXP\diskpart.txt을(를) 찾을 수 없습니다.

 

그래서 PE Addon 만 까는 청개구리 짓을 발동!

 

다시 문서를 읽어 보니 adk for win10, winpe addon for adk 2004 두개를 깔아야 한다고 한데 winPE add-on for ADK 만 설치해도 일단은 넘어간다.

3 Software requirements
• Binary drivers and firmware (either downloaded from nxp.com or built locally)
• Windows IoT operating system. There are two options:
– Visual Studio Subscription portal my.visualstudio.com
– At the portal, click Downloads -> Windows 10 -> Search for “Windows 10 IoT Enterprise LTSC 2021” or
“Windows 10 IoT Enterprise 2021”
– The default architecture is set to x64, click the dropdown menu to change it to Arm64 and download the
DVD
– Through microsoftoem.com facilitated by a Windows IoT OS distributor
– To find a distributor, visit aka.ms/iotdistributorlist
• Windows ADK for Windows 10 and Windows PE add-on for ADK, version 2004.

 

다시 시도하니 되는것 같긴한데

무지성으로(!) 받은 x86 , x64용 Win IoT Ent 라서 ARM64 아니라고 뱉는다.

C:\nxp\W21H2-1-3-0-imx-windows-bsp-binaries\IoTEntOnNXP>make-winpe-enterprise.cmd /disable_updates /disable_transparency /test_signing

Selected: "install.wim"


Source image:                          install.wim
Test signing:                          yes
Patch Sdport:                          no
Windows debug over ethernet:           no, IP:
Windows PE debug over ethernet:        no, IP:
KD_NET file (for debug over net):      no
Windows debug over serial:             no
Windows PE debug over serial:          no
Unattended install answer file:        no
Disable updates:                       yes
Disable transparency:                  yes
Split wim:                             no
Cummulative update:                    no, path:

*********************************************************************************************************************************************************
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*** Step 1 Creating i.MX Windows IoT Enterprise image: out\imx_win_iot_install.wim
*********************************************************************************************************************************************************
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Cleaning up from previous run

---------------------------------------------------------------------------------------------------------------------------------------------------------
*** Step 1.1 Copying Windows Enterprise image install.wim to out\imx_win_iot_install.wim
---------------------------------------------------------------------------------------------------------------------------------------------------------
하위 디렉터리 또는 파일 out이(가) 이미 있습니다.
copy "install.wim" "out\imx_win_iot_install.wim"
        1개 파일이 복사되었습니다.

---------------------------------------------------------------------------------------------------------------------------------------------------------
*** Step 1.2 Mounting i.MX Windows IoT Enterprise image at out\mount_enterprise
---------------------------------------------------------------------------------------------------------------------------------------------------------
dism /mount-wim /wimfile:"out\imx_win_iot_install.wim" /mountdir:"out\mount_enterprise" /index:2

배포 이미지 서비스 및 관리 도구
버전: 10.0.22621.1


오류: 0xc1510113

지정한 이미지가 WIM에 없습니다.
WIM에서 먼저 기존 이미지가 있는지 확인하십시오.

DISM 로그 파일은 C:\Windows\Logs\DISM\dism.log에 있습니다.

'embeded > i.mx 8m plus' 카테고리의 다른 글

NXP i.mx8mp LF_v6.1.55-2.2.0 테스트  (0) 2023.12.21
missed: not vectorized: relevant stmt not supported:  (0) 2023.08.31
nxp i.mx8mp win iot  (0) 2023.05.26
rpmsg-lite  (0) 2023.03.23
i.mx8m plus cortex-m7 part.2  (0) 2023.02.23
Posted by 구차니
embeded/i.mx 8m plus2023. 5. 26. 10:56

baudrate 보소.. 이런 변태 같은 -_-

3.1 Serial logging setup
To help troubleshoot issues during boot, use the USB micro-B port on i.MX EVK boards to output U-Boot and
UEFI firmware serial debug logs to a host PC. The USB micro-B port on the EVK presents a virtual serial port to
the host PC, which can be read by common Windows serial terminal applications such as HyperTerminal, Tera
Term, or PuTTY.
1. Connect the target and the PC using the cable mentioned above.
2. Open Device Manager on the PC and locate the Enhanced Virtual serial device and note the COM port
number.
3. Open the terminal on the PC. Configure the Enhanced Virtual serial/COM port to 921600 baud/s, 8-bit, onestop bit.

[링크 : https://www.nxp.com/docs/en/quick-reference-guide/IMXWQSG.pdf]

 

아무튼 baudrate 맞추니 이상하게 라도 나온다(키보드 인식 안해서 uart를 통해서 제어해야 하다니 -_ㅠ)

 

Device manager 뜨는게 없다.

 

Boot Manager 에서는 UEFI 옵션별로 뜨는데

 

요건 i.mx8mp 보드의 eMMC로 부팅하는거. 어떤 버전이 구워져있는진 모르겠지만

부팅하다가 kernel panic 뜨는데 어쩌면 윈도우용으로 부트로더가 설정하는 바람에

uboot + kernel 에서 설정되지 않는 부분때문에 그런걸지도 모르겠다.

 

윈도우 IoT 이미지가 2.5MB 밖에 안되서 그런가 SD 카드로 부팅하려고 하면 진행이 안된다.

 

Boot Maintenance Manager 에서는 먼가 조금 뜨는데 들어간다고 먼가 되는게 있는 것도 아니라서..

 

그나마 console option 으로 들어가면 input / output / stderr 요런걸로 어떤 장치를 쓸거냐 정도만 나온다.

그냥 윈도우 처럼 GUI 화면은 도대체 어떻게 해야 하냐..

'embeded > i.mx 8m plus' 카테고리의 다른 글

missed: not vectorized: relevant stmt not supported:  (0) 2023.08.31
nxp i.mx8mp win iot part 2  (0) 2023.05.26
rpmsg-lite  (0) 2023.03.23
i.mx8m plus cortex-m7 part.2  (0) 2023.02.23
i.mx8m plus cortex-m7  (0) 2023.02.23
Posted by 구차니
Programming/rust2023. 5. 25. 19:53

변수에 값을 넣으면 c 처럼 값이 변경되지 않아

let을 이용 재귀적으로 다시 할당을 하거나 mut 키워드로 변경이 가능한 변수로 지정해야 한다.

fn main() {
    let x = 5;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

$ cargo run
   Compiling variables v0.1.0 (file:///projects/variables)
error[E0384]: cannot assign twice to immutable variable `x`
 --> src/main.rs:4:5
  |
2 |     let x = 5;
  |         -
  |         |
  |         first assignment to `x`
  |         help: consider making this binding mutable: `mut x`
3 |     println!("The value of x is: {x}");
4 |     x = 6;
  |     ^^^^^ cannot assign twice to immutable variable

For more information about this error, try `rustc --explain E0384`.
error: could not compile `variables` due to previous error

 

좀 더 아래 shadowing 에 있는 예제인데

let x = 5;

let x = x + 1; 을 이용해서 자기 자신에게 새로운 값을 소유하게 하는 것은 인정 되는 듯

fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }

    println!("The value of x is: {x}");
}

 

아무튼 언어 설계상 정석은 mut 키워드를 쓰는 것으로 보인다.

fn main() {
    let mut x = 5;
    println!("The value of x is: {x}");
    x = 6;
    println!("The value of x is: {x}");
}

 

[링크 : https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html]

'Programming > rust' 카테고리의 다른 글

rust mut 외 몇가지 컴파일 에러들  (0) 2023.05.26
rust visibility and privacy  (0) 2023.05.25
rust 소유권  (0) 2023.05.25
rust was  (0) 2023.05.20
c에서 rust 호출하기  (0) 2023.05.11
Posted by 구차니
Programming/rust2023. 5. 25. 19:40

pub 이라는 키워드가 존재해서

Syntax
Visibility :
      pub
   | pub ( crate )
   | pub ( self )
   | pub ( super )
   | pub ( in SimplePath )

 

기본은 private 이고 public으로 할 녀석들만 pub로 해주면 된다.

그런데 rust는 객체지향 언어는 아니라니까 class가 존재하지 않는데

c언어 처럼 static 키워드로 내/외부용으로 구분하는 수준이 되려나?

구조체에서 개별 항목에 대해서 pub이 적용되는지 조금 더 찾아봐야 할 것 같다.

// Declare a private struct
struct Foo;

// Declare a public struct with a private field
pub struct Bar {
    field: i32,
}

// Declare a public enum with two public variants
pub enum State {
    PubliclyAccessibleState,
    PubliclyAccessibleState2,
}

[링크 : https://doc.rust-lang.org/reference/visibility-and-privacy.html]

'Programming > rust' 카테고리의 다른 글

rust mut 외 몇가지 컴파일 에러들  (0) 2023.05.26
rust mut  (0) 2023.05.25
rust 소유권  (0) 2023.05.25
rust was  (0) 2023.05.20
c에서 rust 호출하기  (0) 2023.05.11
Posted by 구차니

bit stuffing 등을 포함하는 상위개념

[링크 : https://en.m.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing]

'이론 관련 > 네트워크 관련' 카테고리의 다른 글

can invader  (0) 2024.01.09
multicast  (0) 2023.08.26
PAM4  (0) 2023.01.16
nrz encoding/decoding  (0) 2022.08.24
광 케이블 DAC, AOC  (0) 2022.06.30
Posted by 구차니