<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Embedded</title>
    <link>https://duwonembedded.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 05:58:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>고을</managingEditor>
    <image>
      <title>Embedded</title>
      <url>https://tistory1.daumcdn.net/tistory/959012/attach/1f622a919748486a90ad7bc85187ac4c</url>
      <link>https://duwonembedded.tistory.com</link>
    </image>
    <item>
      <title>Binary, Decimal, Hex 문자열을 숫자로 변환</title>
      <link>https://duwonembedded.tistory.com/29</link>
      <description>&lt;pre id=&quot;code_1693178182238&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// 16진수 문자열을 byte array로 변환
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;HexString&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
public byte[] HexStringToByteArray(string HexString)
{
    // 0x, 0X를 제거
    if (HexString.StartsWith(&quot;0x&quot;) || HexString.StartsWith(&quot;0X&quot;)) HexString = HexString.Substring(2);

    // hex character가 아닌 문자가 포함되어 있으면 해당 character를 제거
    HexString = new string(HexString.Where(c =&amp;gt; Uri.IsHexDigit(c)).ToArray());

    // hex string을 byte array로 변환하기
    string hexString = HexString.Replace(&quot; &quot;, &quot;&quot;); // 공백 제거
    if (hexString.Length % 2 != 0)
    {
        hexString = &quot;0&quot; + hexString; // hex string의 길이가 홀수이면 앞에 0을 추가
        // return null;
    }

    byte[] bytes = new byte[hexString.Length / 2]; // byte array의 크기는 hex string의 길이의 절반
    for (int i = 0; i &amp;lt; hexString.Length; i += 2)
    {
        bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16); // 16진수 문자열을 byte로 변환
    }

    return bytes;
}

/// &amp;lt;summary&amp;gt;
/// 2진수 문자열을 byte array로 변환
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;BinaryString&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
public byte[] BinaryStringToByteArray(string BinaryString)
{
    // 0b, 0B를 제거
    if (BinaryString.StartsWith(&quot;0b&quot;) || BinaryString.StartsWith(&quot;0B&quot;)) BinaryString = BinaryString.Substring(2);

    // binary character가 아닌 문자가 포함되어 있으면 해당 character를 제거
    BinaryString = new string(BinaryString.Where(c =&amp;gt; c == '0' || c == '1').ToArray());

    // binary string을 byte array로 변환하기
    string binaryString = BinaryString.Replace(&quot; &quot;, &quot;&quot;); // 공백 제거
    if (binaryString.Length % 8 != 0)
    {
        //binary string의 길이가 8의 배수가 아니면 8의 배수가되게 0을 추가
        binaryString = binaryString.PadLeft(binaryString.Length + (8 - binaryString.Length % 8), '0');
    }

    byte[] bytes = new byte[binaryString.Length / 8]; // byte array의 크기는 binary string의 길이의 8분의 1
    for (int i = 0; i &amp;lt; binaryString.Length; i += 8)
    {
        bytes[i / 8] = Convert.ToByte(binaryString.Substring(i, 8), 2); // 2진수 문자열을 byte로 변환
    }

    return bytes;
}

/// &amp;lt;summary&amp;gt;
/// 2진수(0b01), Decimal, 16진수(0x01) 문자열을 int형으로 변환
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;NumberString&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
public int StringToInt32(string NumberString)
{
    if (NumberString == null) return 0;

    int result = 0;
    if (NumberString.StartsWith(&quot;0b&quot;) || NumberString.StartsWith(&quot;0B&quot;))
    {
        byte[] bytes = BinaryStringToByteArray(NumberString); // 2진수 문자열을 byte array로 변환
        Array.Reverse(bytes); // byte array를 reverse

        if (bytes != null) result = BitConverter.ToInt32(bytes, 0); // byte array를 int로 변환
    }
    else if (NumberString.StartsWith(&quot;0x&quot;) || NumberString.StartsWith(&quot;0X&quot;))
    {
        byte[] bytes = HexStringToByteArray(NumberString); // 16진수 문자열을 byte array로 변환
        Array.Reverse(bytes); // byte array를 reverse

        if (bytes != null) result = BitConverter.ToInt32(bytes, 0); // byte array를 int로 변환
    }
    else
    {
        //숫자를 제외한 문자열 삭제
        NumberString = new string(NumberString.Where(c =&amp;gt; char.IsDigit(c) || c == '-').ToArray());

        //하위 10개 문자열만 제외하고 삭제
        if (NumberString.Length &amp;gt; 11) NumberString = NumberString.Substring(NumberString.Length - 11, 11);

        //int형을 벗어나는 값이면 최대값 또는 최소값으로 설정
        Int64 tmpNum = Convert.ToInt64(NumberString);
        if (tmpNum &amp;gt; int.MaxValue) result = int.MaxValue;
        else if (tmpNum &amp;lt; int.MinValue) result = int.MinValue;
        else result = Convert.ToInt32(NumberString);

    }

    return result;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming/C#</category>
      <author>고을</author>
      <guid isPermaLink="true">https://duwonembedded.tistory.com/29</guid>
      <comments>https://duwonembedded.tistory.com/29#entry29comment</comments>
      <pubDate>Mon, 28 Aug 2023 08:16:34 +0900</pubDate>
    </item>
    <item>
      <title>도커를 이용하여 vue.js 서버 만들기</title>
      <link>https://duwonembedded.tistory.com/28</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 기본 폴더 : /home/docker/vuejs/front/&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. default.conf - 기본폴더/nginx/default.conf&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue.js router 사용하기 위한 설정&lt;/p&gt;
&lt;pre class=&quot;elixir&quot;&gt;&lt;code&gt;server {  
  listen 80;  
  listen \[::\]:80;  

  root /usr/share/nginx/html;  

  index index.html;  

  server\_name vue-router.example.com;  

  location / {  
    try\_files $uri $uri/ @rewrites;  
  }  

  location @rewrites {  
    rewrite ^(.+)$ /index.html last;  
  }  

  location ~\* \\.(?:ico|css|js|gif|jpe?g|png)$ {  
    expires max;  
    add\_header Pragma public;  
    add\_header Cache-Control &quot;public, must-revalidate, proxy-revalidate&quot;;  
  }  
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. vue.js build&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dist 배포 디렉토리가 생성됨&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. docker 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 디렉토리 및 nginx 설정파일을 nginx docker 와 연결&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;docker run --name vuejs_server -d -p 80:80 -v /home/docker/vuejs/front/dist:/usr/share/nginx/html -v /home/docker/vuejs/front/nginx:/etc/nginx/conf.d nginx&lt;/code&gt;&lt;/pre&gt;</description>
      <author>고을</author>
      <guid isPermaLink="true">https://duwonembedded.tistory.com/28</guid>
      <comments>https://duwonembedded.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 3 Nov 2021 16:14:08 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js용 Dockerfile</title>
      <link>https://duwonembedded.tistory.com/27</link>
      <description>&lt;p&gt;defualt.conf - nginx 설정파일&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {

  listen 80;
  listen [::]:80;

  root /usr/share/nginx/html;

  index index.html;

  server_name vue-router.example.com;

  location / {
    try_files $uri $uri/ @rewrites;
  }

  location @rewrites {
    rewrite ^(.+)$ /index.html last;
  }

  location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires max;
    add_header Pragma public;
    add_header Cache-Control &amp;quot;public, must-revalidate, proxy-revalidate&amp;quot;;
  }

}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dockerfile - docker build 파일&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#Docker file for VueJS using NGINX

\# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package\*.json ./
RUN npm install
COPY . .
RUN npm run build

\# production stage
FROM nginx:stable-alpine as production-stage
COPY \--from\=build-stage /app/dist /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY \--from\=build-stage /app/default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD \[&amp;quot;nginx&amp;quot;, &amp;quot;-g&amp;quot;, &amp;quot;daemon off;&amp;quot;\]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;docker build -t vuejs .&lt;br&gt;docker run --name vuejs_server -d -p 80:80 vuejs&lt;/p&gt;</description>
      <author>고을</author>
      <guid isPermaLink="true">https://duwonembedded.tistory.com/27</guid>
      <comments>https://duwonembedded.tistory.com/27#entry27comment</comments>
      <pubDate>Wed, 3 Nov 2021 15:54:34 +0900</pubDate>
    </item>
    <item>
      <title>텍스트 박스에 HEX만 입력 필터링</title>
      <link>https://duwonembedded.tistory.com/26</link>
      <description>&lt;pre id=&quot;code_1607041121906&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void textBox_KeyPress(object sender, KeyPressEventArgs e)
{
  /* HEX만 입력 되도록 필터링 */
  if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back) || 
        &quot;ABCDEF0123456789abcdef&quot;.IndexOf(e.KeyChar) != -1)) /* 숫자와 백스페이스를 제외한 나머지를 바로 처리 */
  {
    e.Handled = true;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1693178123566&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// character가 hex characters, spaces, backspace, and delete 이면 true를 반환
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;c&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
public bool IsHexDigit(char c)
{
    return Uri.IsHexDigit(c) || c == ' ' || c == '\b' || c == '\u007F' || c == '\u0016' || c == '\u0003';
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming/C#</category>
      <author>고을</author>
      <guid isPermaLink="true">https://duwonembedded.tistory.com/26</guid>
      <comments>https://duwonembedded.tistory.com/26#entry26comment</comments>
      <pubDate>Fri, 4 Dec 2020 09:21:45 +0900</pubDate>
    </item>
    <item>
      <title>STM32 MXCube을 이용한 1초 타이머</title>
      <link>https://duwonembedded.tistory.com/25</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 클럭설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- TIM2 사용을 위해 APB1 Timer clocks 설정 - 72MHz&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;750&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTbuxF/btqI7wCmDgS/j26VKT5A43RCFxfGiHmFK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTbuxF/btqI7wCmDgS/j26VKT5A43RCFxfGiHmFK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTbuxF/btqI7wCmDgS/j26VKT5A43RCFxfGiHmFK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTbuxF%2FbtqI7wCmDgS%2Fj26VKT5A43RCFxfGiHmFK0%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1654&quot; data-origin-height=&quot;750&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. TIM2 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Clock Source : Internal Clock&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Prescaler : 7200-1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Counter Period : 10000-1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계산식 : 72MHz / 7200 / 10000 = 1&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;1353&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QMqhC/btqJhIBJp9D/ikILNGolGST7SKu0K1koc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QMqhC/btqJhIBJp9D/ikILNGolGST7SKu0K1koc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QMqhC/btqJhIBJp9D/ikILNGolGST7SKu0K1koc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQMqhC%2FbtqJhIBJp9D%2FikILNGolGST7SKu0K1koc0%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1521&quot; data-origin-height=&quot;1353&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 코드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로젝트 생성 후 htim2 타이머 인터럽트 시작 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 정의된 HAL_TIM_PeriodElapsedCallback 사용 LED 토글&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&amp;amp;htim2);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if (htim-&amp;gt;Instance == TIM2) /* 1s */
  {
    HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>STM32</category>
      <author>고을</author>
      <guid isPermaLink="true">https://duwonembedded.tistory.com/25</guid>
      <comments>https://duwonembedded.tistory.com/25#entry25comment</comments>
      <pubDate>Mon, 21 Sep 2020 16:48:27 +0900</pubDate>
    </item>
  </channel>
</rss>