{"id":1855,"date":"2023-08-21T11:26:41","date_gmt":"2023-08-21T03:26:41","guid":{"rendered":"https:\/\/www.huangrongzhen.ink\/?p=1855"},"modified":"2023-10-03T12:45:49","modified_gmt":"2023-10-03T04:45:49","slug":"c-%e8%af%ad%e8%a8%80%e9%9b%b6%e6%95%a3%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/www.huangrongzhen.ink\/?p=1855","title":{"rendered":"C \u8bed\u8a00\u96f6\u6563\u7b14\u8bb0"},"content":{"rendered":"<div class=\"wp-block-post-excerpt\"><p class=\"wp-block-post-excerpt__excerpt\">\u8bb0\u5f55\u4e00\u4e9b C \u8bed\u8a00\u96f6\u6563\u77e5\u8bc6\u70b9\u3002 <\/p><\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E6%9C%AA%E5%88%86%E7%B1%BB\"><\/span>\u672a\u5206\u7c7b<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Visual Studio \u4e2d\u9632\u6b62\u7f16\u8bd1\u5668\u62a5\u9519<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#define _CRT_SECURE_NO_WARNINGS<\/code><\/pre>\n\n\n\n<p>\u9632\u6b62\u7a0b\u5e8f\u4e00\u95ea\u800c\u8fc7\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include \"windows.h\"\n\nint main(void)\n{\n  system(\"pause\");\n  return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u5e38\u7528\u9884\u5b9a\u4e49\u5b8f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">__FILE__\uff1a\u662f\u5f53\u524d\u7f16\u8bd1\u7684\u6587\u4ef6\u7684\u6587\u4ef6\u540d \u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\n\n__TIME__\uff1a\u662f\u5f53\u524d\u7f16\u8bd1\u7684\u6587\u4ef6\u7684\u7f16\u8bd1\u65f6\u95f4 \u683c\u5f0f\u662fhh:mm:ss \u662f\u5b57\u7b26\u4e32\n\n__DATE__\uff1a\u662f\u5f53\u524d\u7f16\u8bd1\u7684\u6587\u4ef6\u7684\u7f16\u8bd1\u65e5\u671f \u683c\u5f0f\u662fMmm:dd:yyyy \u662f\u5b57\u7b26\u4e32\n\n__LINE__\uff1a\u662f\u8c03\u7528\u8be5\u5b8f\u8bed\u53e5\u6240\u5728\u7684\u884c\u6570\uff0c\u662f\u4e2a\u5341\u8fdb\u5236\u6570<\/code><\/pre>\n\n\n\n<p>\u4e24\u70b9\u76f4\u7ebf\u62df\u5408\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">static double LineFit(double x)\n{\n  const double x0 = 0.1;\n  const double x1 = 0.2;\n  const double y0 = 100.0;\n  const double y1 = 150.0;\n  double rate, result;\n  rate = (y1 - y0) \/ (x1 - x0);\n  result = y0 + rate * (x - x0);\n  return result;\n}<\/code><\/pre>\n\n\n\n<p>\u4e0b\u8ff0\u4ee3\u7801\u5b9e\u73b0\u4e86\u7ed3\u6784\u4f53\u6309 1 \u5b57\u8282\u5bf9\u9f50\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/\/\u65b9\u5f0f\u4e00\n#pragma pack(1)\ntypedef struct\n{\n  int a,\n  char b,\n  double c,\n}Struct;\n#pragma pack()\n\n\/\/\u65b9\u5f0f2\n#pragma pack(push)\n#pragma pack(1)\ntypedef struct\n{\n  int a,\n  char b,\n  double c,\n}Struct;\n#pragma pack(pop)<\/code><\/pre>\n\n\n\n<p>\u4e0b\u8ff0\u4ee3\u7801\u5b9e\u73b0\u4e86\u6570\u7ec4\u8d77\u59cb\u5730\u5740\u6309\u7167 32 \u5b57\u8282\u5bf9\u9f50\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">__align(32) unsigned char s_arrDataBuf[1024] = {0};<\/code><\/pre>\n\n\n\n<p>\u4e0b\u8ff0\u4ee3\u7801\u5b9e\u73b0\u4e86\u5c06\u6570\u7ec4\u8d77\u59cb\u5730\u5740\u56fa\u5b9a\u5206\u914d\u5230 0x6C000000\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">__align(32) unsigned chars_arrDataBuf[1024] __attribute__((at((u32)0x6C000000)));<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9B%B8%E5%85%B3\"><\/span>\u5b57\u7b26\u4e32\u76f8\u5173<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u8ffd\u52a0\u5b57\u7b26\u4e32\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1aStringAdd\n* \u51fd\u6570\u529f\u80fd\uff1a\u8ffd\u52a0\u5b57\u7b26\u4e32\n* \u8f93\u5165\u53c2\u6570\uff1atarget\uff1a\u76ee\u6807\u5b57\u7b26\u4e32\uff0cadd\uff1a\u8ffd\u52a0\u7684\u5b57\u7b26\u4e32\n* \u8f93\u51fa\u53c2\u6570\uff1avoid\n* \u8fd4 \u56de \u503c\uff1avoid\n* \u521b\u5efa\u65e5\u671f\uff1a2018\u5e7401\u670801\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid StringAdd(char* target, char* add)\n{\n  unsigned int i, j;\n\n  \/\/\u786e\u5b9a\u76ee\u6807\u5b57\u7b26\u4e32\u7ed3\u5c3e\n  i = 0;\n  while(0 != target[i]) {i++;}\n\n  \/\/\u62f7\u8d1d\u5b57\u7b26\u4e32\n  j = 0;\n  while(0 != add[j])\n  {\n    target[i] = add[j];\n    i++;\n    j++;\n  }\n\n  \/\/\u52a0\u4e0a\u5b57\u7b26\u4e32\u7ed3\u5c3e\n  target[i] = 0;\n}<\/code><\/pre>\n\n\n\n<p>\u4fee\u6539\u6587\u4ef6\u540d\u540e\u7f00\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1aNameModifySuffix\n* \u51fd\u6570\u529f\u80fd\uff1a\u4fee\u6539\u6587\u4ef6\u540d\u540e\u7f00\n* \u8f93\u5165\u53c2\u6570\uff1aname\uff1a\u5f53\u524d\u6587\u4ef6\u540d\uff08\u542b\u540e\u7f00\uff09\uff0csuffix\uff1a\u76ee\u6807\u540e\u7f00\n* \u8f93\u51fa\u53c2\u6570\uff1avoid\n* \u8fd4 \u56de \u503c\uff1avoid\n* \u521b\u5efa\u65e5\u671f\uff1a2018\u5e7408\u670831\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid NameModifySuffix(char* name, char* suffix)\n{\n  unsigned int pointPos; \/\/\u540e\u7f00\u70b9\u6240\u5728\u4f4d\u7f6e\n  unsigned int i;        \/\/\u5faa\u73af\u53d8\u91cf\n\n  pointPos = 0;\n  i = 0;\n  while (0 != name[i]) \/\/\u67e5\u627e\u540e\u7f00\u8d77\u59cb\u4f4d\u7f6e\n  {\n    if ('.' == name[i])\n    {\n      pointPos = i;\n    }\n    i++;\n  }\n  name[pointPos + 1] = 0;\n  StringAdd(name, suffix);\n}<\/code><\/pre>\n\n\n\n<p>\u4ece\u5b57\u7b26\u4e32\u4e2d\u79fb\u9664\u67d0\u4e2a\u5b57\u7b26\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a StringRemoveChar\n* \u51fd\u6570\u529f\u80fd\uff1a \u4ece\u5b57\u7b26\u4e32\u4e2d\u79fb\u9664\u67d0\u4e2a\u5b57\u7b26\n* \u8f93\u5165\u53c2\u6570\uff1a string\uff1a\u9700\u8981\u64cd\u4f5c\u7684\u5b57\u7b26\u4e32\uff0cc\uff1a\u9700\u8981\u79fb\u9664\u7684\u5b57\u7b26\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670831\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nstatic void StringRemoveChar(char* string, char c)\n{\n  char* str;\n  while (0 != *string)\n  {\n    if (*string == c)\n    {\n      str = string;\n      while (0 != *str)\n      {\n        *str = *(str + 1);\n        str++;\n      }\n    }\n    string++;\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u66ff\u6362\u5b57\u7b26\u4e32\u4e2d\u7684\u5b57\u7b26<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a StringReplaceChar\n* \u51fd\u6570\u529f\u80fd\uff1a \u66ff\u6362\u5b57\u7b26\u4e32\u4e2d\u7684\u5b57\u7b26\n* \u8f93\u5165\u53c2\u6570\uff1a string\uff1a\u9700\u8981\u64cd\u4f5c\u7684\u5b57\u7b26\u4e32\uff0ccold\uff1a\u65e7\u5b57\u7b26\uff0ccnew\uff1a\u65b0\u5b57\u7b26\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670831\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nstatic void StringReplaceChar(char* string, char cold, char cnew)\n{\n  while (0 != *string)\n  {\n    if (*string == cold)\n    {\n      *string = cnew;\n    }\n    string++;\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u5b57\u7b26\u4e32\u67e5\u627e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0: FindString\n* \u51fd\u6570\u529f\u80fd: \u67e5\u627e\u5b57\u7b26\u4e32\n* \u8f93\u5165\u53c2\u6570: source\uff1a\u6e90\u5b57\u7b26\u4e32\u9996\u5730\u5740\uff0c\u5373\u53ef\u80fd\u542b\u6709\u76ee\u7684\u5b57\u7b26\u4e32\u7684\u5b57\u7b26\u4e32\u9996\u5730\u5740\n*           target\uff1a\u76ee\u7684\u5b57\u7b26\u4e32\u9996\u5730\u5740\n* \u8f93\u51fa\u53c2\u6570: void\n* \u8fd4 \u56de \u503c: \u76ee\u7684\u5b57\u7b26\u4e32\u8ddd\u79bb\u6e90\u5b57\u7b26\u4e32\u9996\u5730\u5740\u504f\u79fb\u91cf\uff0c0xFFFFFFFF \u8868\u793a\u67e5\u627e\u5931\u8d25\n* \u521b\u5efa\u65e5\u671f: 2023\u5e7409\u670804\u65e5\n* \u6ce8    \u610f: \n*********************************************************************************************************\/\n#define STRING_NODE_INVALID 0xFFFFFFFF\nstatic unsigned int FindString(char* source, char* target)\n{\n  unsigned int i, j, k, ok;\n  \n  i = 0; j = 0; k = 0; ok = 0;\n  while(0 != source[i])\n  {\n    \/\/\u68c0\u6d4b\u5230\u76ee\u7684\u5b57\u7b26\u4e32\u7684\u5f00\u5934\n    if(source[i] == target[0])\n    {\n      j = i;\n      k = 0;\n      while((0 != source[j]) &amp;&amp; (0 != target[k]))\n      {\n        if(source[j] == target[k])\n        {\n          j++; k++;\n        }\n        else\n        {\n          break;\n        }\n      }\n      \n      \/\/\u6210\u529f\u67e5\u627e\u5230\u76ee\u7684\u5b57\u7b26\u4e32\n      if(0 == target[k])\n      {\n        ok = 1;\n        break;\n      }\n    }\n    i++;\n  }\n  \n  \/\/\u6210\u529f\u67e5\u627e\u5e26\u5b57\u7b26\u4e32\n  if(ok)\n  {\n    return i;\n  }\n  else\n  {\n    return STRING_NODE_INVALID;\n  }\n}<\/code><\/pre>\n\n\n\n<p>\u6253\u5370\u51fd\u6570\u5c01\u88c5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include \"stdio.h\"\n#include \"stdarg.h\"\n\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a PrintString\n* \u51fd\u6570\u529f\u80fd\uff1a \u5b57\u7b26\u4e32\u6253\u5370\u51fd\u6570\n* \u8f93\u5165\u53c2\u6570\uff1a fmt\uff1a\u5b57\u7b26\u4e32\u6570\u636e\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7408\u670819\u65e5\n* \u6ce8    \u610f\uff1a \n*********************************************************************************************************\/\nstatic void PrintString(char* fmt, ...)\n{\n  \/\/\u5b57\u7b26\u4e32\u8f6c\u6362\u7f13\u51b2\u533a\n  static char s_arrStringBuf[1024];\n\n  \/\/\u5b57\u7b26\u4e32\u957f\u5ea6\n  unsigned int len;\n\n  \/\/\u5b9a\u4e49\u4e00\u4e2a va_list \u7c7b\u578b\u7684\u53d8\u91cf\uff0c\u7528\u6765\u5b58\u50a8\u5355\u4e2a\u53c2\u6570\n  va_list args;\n\n  \/\/\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de\n  if(NULL == fmt)\n  {\n    return;\n  }\n\n  \/\/\u4f7f args \u6267\u884c\u53ef\u53d8\u53c2\u6570\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\n  va_start(args, fmt);\n\n  \/\/\u5b57\u7b26\u4e32\u8f6c\u6362\n  vsprintf(s_arrStringBuf, fmt, args);\n\n  \/\/\u7edf\u8ba1\u5b57\u7b26\u4e32\u957f\u5ea6\n  len = 0;\n  while(0 != s_arrStringBuf[len]){ len++; }\n\n  \/\/\u8f93\u51fa\u5230\u4e32\u53e3\n  WriteUART0((void*)s_arrStringBuf, len);\n\n  \/\/\u7ed3\u675f\u53ef\u53d8\u53c2\u6570\u7684\u83b7\u53d6\n  va_end(args);\n}<\/code><\/pre>\n\n\n\n<p>\u83b7\u53d6\u5b57\u7b26\u4e32\u8f93\u5165\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">char string[100];\nprintf(\"input a file name:\");\nscanf(\"%s\", string);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%97%E8%BD%AC%E6%8D%A2\"><\/span>\u5b57\u7b26\u4e32\u3001\u6570\u5b57\u8f6c\u6362<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>10 \u8fdb\u5236\u5b57\u7b26\u4e32\u8f6c\u6574\u578b\uff0c\u4ee3\u7801\u5982\u4e0b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a StringToInt\n* \u51fd\u6570\u529f\u80fd\uff1a 10 \u8fdb\u5236\u5b57\u7b26\u4e32\u8f6c\u6574\u578b\n* \u8f93\u5165\u53c2\u6570\uff1a string\uff1a\u5b57\u7b26\u4e32\u5f62\u5f0f\u7684\u6570\u5b57\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a \u8f6c\u6362\u7ed3\u679c\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7402\u670810\u65e5\n* \u6ce8    \u610f\uff1a \u4e0d\u80fd\u542b\u6709\u6570\u5b57\u3001\u6b63\u8d1f\u53f7\u7b49\u5176\u5b83\u7b26\u53f7\n*********************************************************************************************************\/\nstatic int StringToInt(char* string)\n{\n  int sum;\n  int negative;\n  unsigned int i;\n  sum = 0;\n  i = 0;\n  negative = 0;\n  while(('+' == string[i]) || ('-' == string[i]) || ((string[i] &gt;= '0') &amp;&amp; (string[i] &lt;= '9')))\n  {\n    \/\/\u6b63\u53f7\n    if ('+' == string[i])\n    {\n      negative = 0;\n    }\n\n    \/\/\u8d1f\u53f7\n    else if ('-' == string[i])\n    {\n      negative = 1;\n    }\n\n    \/\/\u7a7a\u683c\n    else if (' ' == string[i])\n    {\n      \/\/\u4e0d\u505a\u5904\u7406\n    }\n\n    \/\/\u6570\u5b57\n    else if ((string[i] &gt;= '0') &amp;&amp; (string[i] &lt;= '9'))\n    {\n      sum = (sum * 10) + (string[i] - '0');\n    }\n\n    \/\/\u5faa\u73af\u53d8\u91cf\u52a0\u4e00\n    i++;\n  }\n\n  \/\/\u8d1f\u53f7\u5904\u7406\n  if (0 != negative)\n  {\n    sum = -sum;\n  }\n\n  \/\/\u8fd4\u56de\u8f6c\u6362\u7ed3\u679c\n  return sum;\n}\n<\/code><\/pre>\n\n\n\n<p>\u5b57\u7b26\u4e32\u8f6c\u6d6e\u70b9\u6570\uff0c\u4ee3\u7801\u5982\u4e0b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a StringToDouble\n* \u51fd\u6570\u529f\u80fd\uff1a \u5b57\u7b26\u4e32\u8f6c\u6d6e\u70b9\u6570\n* \u8f93\u5165\u53c2\u6570\uff1a void\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7407\u670813\u65e5\n* \u6ce8    \u610f\uff1a \u9664\u6570\u5b57\u3001\u6b63\u8d1f\u53f7\u3001\u5c0f\u6570\u70b9\u5916\uff0c\u4e0d\u5f97\u5e26\u6709\u5176\u5b83\u7b26\u53f7\n*********************************************************************************************************\/\nstatic double StringToDouble(char* string)\n{\n  double sum, devision;\n  int negative, dotFlag;\n  unsigned int i;\n  sum = 0;\n  negative = 0;\n  i = 0;\n  devision = 1;\n  dotFlag = 0;\n  while(('+' == string[i]) || ('-' == string[i]) || ('.' == string[i]) || ((string[i] &gt;= '0') &amp;&amp; (string[i] &lt;= '9')))\n  {\n    \/\/\u6b63\u53f7\n    if ('+' == string[i])\n    {\n      negative = 0;\n    }\n\n    \/\/\u8d1f\u53f7\n    else if ('-' == string[i])\n    {\n      negative = 1;\n    }\n\n    \/\/\u5c0f\u6570\u70b9\n    else if ('.' == string[i])\n    {\n      dotFlag = 1;\n    }\n\n    \/\/\u7a7a\u683c\uff0c\u4e0d\u5904\u7406\n    else if (' ' == string[i])\n    {\n\n    }\n\n    \/\/\u6570\u5b57\n    else if ((string[i] &gt;= '0') &amp;&amp; (string[i] &lt;= '9'))\n    {\n      sum = (sum * 10.0) + (string[i] - '0');\n      if (0 != dotFlag)\n      {\n        devision = devision * 10;\n      }\n    }\n\n    \/\/\u5faa\u73af\u53d8\u91cf\u52a0\u4e00\n    i++;\n  }\n\n  \/\/\u8d1f\u53f7\u5904\u7406\n  if (0 != negative)\n  {\n    sum = -sum;\n  }\n\n  \/\/\u5c0f\u6570\u70b9\u5904\u7406\n  sum = sum \/ devision;\n\n  \/\/\u8fd4\u56de\u8f6c\u6362\u7ed3\u679c\n  return sum;\n}<\/code><\/pre>\n\n\n\n<p>\u6570\u503c\u8f6c\u5b57\u7b26\u4e32\u5982\u4e0b\u6240\u793a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\/*********************************************************************************************************\n* \u6a21\u5757\u540d\u79f0\uff1aSerialString.c\n* \u6458    \u8981\uff1a\u5b57\u7b26\u4e32\u5904\u7406\u6a21\u5757\n* \u5f53\u524d\u7248\u672c\uff1a1.0.0\n* \u4f5c    \u8005\uff1aLeyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)\n* \u5b8c\u6210\u65e5\u671f\uff1a2021\u5e7407\u670801\u65e5\n* \u5185    \u5bb9\uff1a\n* \u6ce8    \u610f\uff1aBootloarder\u4e13\u7528\uff0c\u4e0d\u8981\u4f7f\u7528printf\u6216sprintf\u7b49C\u8bed\u8a00\u5b98\u65b9\u5e93\u51fd\u6570\uff0c\n*          \u5426\u5219\u7f16\u8bd1\u5668\u4f1a\u5c06C\u8bed\u8a00\u5b98\u65b9\u5e93\u7f16\u5165Bootloarder\u4e2d\uff0c\u4f7f\u5f97Bootloarder\u7a0b\u5e8f\u5360\u7528\u7a7a\u95f4\u5927\n**********************************************************************************************************\n* \u53d6\u4ee3\u7248\u672c\uff1a\n* \u4f5c    \u8005\uff1a\n* \u5b8c\u6210\u65e5\u671f\uff1a\n* \u4fee\u6539\u5185\u5bb9\uff1a\n* \u4fee\u6539\u6587\u4ef6\uff1a\n*********************************************************************************************************\/\n\n\/*********************************************************************************************************\n*                                              \u5305\u542b\u5934\u6587\u4ef6\n*********************************************************************************************************\/\n#include \"SerialString.h\"\n#include \"UART0.h\"\n\n\/*********************************************************************************************************\n*                                              \u5b8f\u5b9a\u4e49\n*********************************************************************************************************\/\n\n#define MAX_STRING_CONVER_LEN 64 \/\/\u5b57\u7b26\u4e32\u8f6c\u6362\u6700\u5927\u957f\u5ea6\n\n\/*********************************************************************************************************\n*                                              \u679a\u4e3e\u7ed3\u6784\u4f53\u5b9a\u4e49\n*********************************************************************************************************\/\n\n\/*********************************************************************************************************\n*                                              \u5185\u90e8\u53d8\u91cf\n*********************************************************************************************************\/\n\/\/\u6570\u503c-ASCII\u7801\u8f6c\u6362\u8868\nstatic const char s_arrNumTable[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};\n\n\/\/\u5b57\u7b26\u4e32\u8f6c\u6362\u7f13\u51b2\u533a\nstatic char s_arrStringBuf[MAX_STRING_CONVER_LEN];\n\n\/*********************************************************************************************************\n*                                              \u5185\u90e8\u51fd\u6570\u58f0\u660e\n*********************************************************************************************************\/\n\n\/*********************************************************************************************************\n*                                              \u5185\u90e8\u51fd\u6570\u5b9e\u73b0\n*********************************************************************************************************\/\n\n\/*********************************************************************************************************\n*                                              API\u51fd\u6570\u5b9e\u73b0\n*********************************************************************************************************\/\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1aPutString\n* \u51fd\u6570\u529f\u80fd\uff1a\u4e32\u53e3\u8f93\u51fa\u4e00\u4e2a\u5b57\u7b26\u4e32\n* \u8f93\u5165\u53c2\u6570\uff1astring\uff1a\u5b57\u7b26\u4e32\n* \u8f93\u51fa\u53c2\u6570\uff1avoid\n* \u8fd4 \u56de \u503c\uff1avoid\n* \u521b\u5efa\u65e5\u671f\uff1a2021\u5e7407\u670801\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid PutString(char* string)\n{\n  u32 len; \/\/\u5b57\u7b26\u4e32\u957f\u5ea6\n\n  \/\/\u7edf\u8ba1\u5b57\u7b26\u4e32\u957f\u5ea6\n  len = 0;\n  while(0 != string[len])\n  {\n    len++;\n  }\n\n  WriteUART0((unsigned char*)string, len);\n}\n\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1aPutUint\n* \u51fd\u6570\u529f\u80fd\uff1a\u4e32\u53e3\u8f93\u51fa\u4e00\u4e2a10\u8fdb\u5236\u65e0\u7b26\u53f7\u6574\u578b\n* \u8f93\u5165\u53c2\u6570\uff1anum\uff1a\u663e\u793a\u6570\u503c\uff0cwidth\uff1a\u663e\u793a\u5bbd\u5ea6\uff0c\u4e0d\u8db3\u8865\u96f6\n* \u8f93\u51fa\u53c2\u6570\uff1avoid\n* \u8fd4 \u56de \u503c\uff1avoid\n* \u521b\u5efa\u65e5\u671f\uff1a2021\u5e7407\u670801\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid PutDecUint(u32 num, u32 width)\n{\n  u32 divisor;      \/\/\u9664\u65701\u300110\u3001100\u30011000...\n  u32 widthDivisor; \/\/\u663e\u793a\u5b8c\u6574\u5bbd\u5ea6\u9700\u8981\u7684\u9664\u6570\u5927\u5c0f\n  u32 needDivisor;  \/\/\u663e\u793a\u5b8c\u6574\u6570\u5b57\u9700\u8981\u7684\u9664\u6570\u5927\u5c0f\n  u32 stringCnt;    \/\/\u5b57\u7b26\u4e32\u8ba1\u6570\n  u32 digital;      \/\/\u5355\u4e2a\u4f4d\u6570\u636e\n\n  \/\/\u8ba1\u7b97\u663e\u793a\u4f4d\u5bbd\u4e0b\u9700\u8981\u7684\u9664\u6570\u5927\u5c0f\n  widthDivisor = 1;\n  while(width)\n  {\n    width--;\n    widthDivisor = widthDivisor * 10;\n  }\n  widthDivisor = widthDivisor \/ 10;\n\n  \/\/\u8ba1\u7b97\u663e\u793a\u5b8c\u6574\u6570\u5b57\u9700\u8981\u7684\u9664\u6570\u5927\u5c0f\n  needDivisor = 1;\n  while(num &gt;= needDivisor)\n  {\n    needDivisor = needDivisor * 10;\n  }\n  needDivisor = needDivisor \/ 10;\n\n  \/\/\u786e\u5b9a\u9664\u6570\u521d\u503c\n  if(widthDivisor &gt; needDivisor)\n  {\n    divisor = widthDivisor;\n  }\n  else\n  {\n    divisor = needDivisor;\n  }\n\n  \/\/\u5b57\u7b26\u4e32\u8f6c\u6362\n  stringCnt = 0;\n  while(1)\n  {\n    \/\/\u5df2\u7ecf\u5230\u4e2a\u4f4d\u4e86\n    if(1 == divisor)\n    {\n      digital = num;\n      s_arrStringBuf[stringCnt++] = s_arrNumTable[digital];\n      break;\n    }\n    else\n    {\n      digital = num \/ divisor; \/\/\u53d6\u51fa\u9ad8\u4f4d\n      num     = num % divisor; \/\/\u5c06\u9ad8\u4f4d\u5254\u9664\n      divisor = divisor \/ 10;  \/\/\u66f4\u65b0\u9664\u6570\n      s_arrStringBuf[stringCnt++] = s_arrNumTable[digital]; \/\/\u6570\u503c\u8f6cASCII\u7801\n    }\n  }\n  s_arrStringBuf[stringCnt] = 0;\n\n  \/\/\u8f93\u51fa\n  PutString(s_arrStringBuf);\n}\n\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1aPutDouble\n* \u51fd\u6570\u529f\u80fd\uff1a\u4e32\u53e3\u8f93\u51fa\u4e00\u4e2a\u6d6e\u70b9\u6570\n* \u8f93\u5165\u53c2\u6570\uff1anum\uff1a\u663e\u793a\u6570\u503c\uff0cpointNum\uff1a\u5c0f\u6570\u70b9\u4f4d\u6570\n* \u8f93\u51fa\u53c2\u6570\uff1avoid\n* \u8fd4 \u56de \u503c\uff1avoid\n* \u521b\u5efa\u65e5\u671f\uff1a2021\u5e7407\u670801\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nvoid PutDouble(double num, u32 pointNum)\n{\n  u32 integer, decimal; \/\/\u6574\u6570\u3001\u5c0f\u6570\u8f6c\u6362\u7ed3\u679c\n  u32 divisor;          \/\/\u9664\u65701\u300110\u3001100\u30011000...\n\n  \/\/\u786e\u5b9a\u9664\u6570\n  divisor = 1;\n  while(pointNum)\n  {\n    pointNum--;\n    divisor = divisor * 10;\n  }\n\n  \/\/\u5f97\u5230\u6574\u6570\u90e8\u5206\n  integer = (u32)num;\n\n  \/\/\u5f97\u5230\u5c0f\u6570\u90e8\u5206\n  num = num * divisor;\n  decimal = ((u32)num) % divisor;\n\n  \/\/\u663e\u793a\n  PutDecUint(integer, 1); \/\/\u6574\u6570\u90e8\u5206\n  PutString(\".\");         \/\/\u5c0f\u6570\u70b9\n  PutDecUint(decimal, 1); \/\/\u5c0f\u6570\u90e8\u5206\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E8%AF%BB%E5%86%99%E6%96%87%E4%BB%B6\"><\/span>\u8bfb\u5199\u6587\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>C \u8bed\u8a00\u521b\u5efa\u5e76\u5199\u5165\u4e8c\u8fdb\u5236\u6587\u4ef6\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\n\/\/\u521b\u5efa\nFILE* bin = fopen(\"name.bin\", \"wb\");\n\n\/\/\u5199\u5165\nfwrite(buf, xxx, xxx, bin);\n\n\/\/\u4fdd\u5b58\nfclose(bin);<\/code><\/pre>\n\n\n\n<p>C \u8bed\u8a00\u521b\u5efa\u5e76\u5199\u5165 csv \u8868\u683c\u6587\u4ef6\uff0ccsv \u6587\u4ef6\u4ee5 &#8220;,&#8221; \u4e3a\u6570\u636e\u95f4\u7684\u5206\u9694\u7b26\uff0c\u4ee5 &#8220;\\n&#8221; \u4e3a\u884c\u5207\u6362\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\n\/\/\u521b\u5efa\nFILE* file = fopen(\"name.csv\", \"w\");\n\n\/\/\u5199\u5165\nfprintf(file, \"%d,\", data);\n\n\/\/\u4fdd\u5b58\nfclose(file);<\/code><\/pre>\n\n\n\n<p>\u83b7\u53d6\u7528\u6237\u8f93\u5165\u7684\u6587\u4ef6\u540d\u7684\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a GetFileName\n* \u51fd\u6570\u529f\u80fd\uff1a \u83b7\u53d6\u6587\u4ef6\u540d\n* \u8f93\u5165\u53c2\u6570\uff1a name\uff1a\u540d\u5b57\u7f13\u51b2\u533a\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a void\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7407\u670813\u65e5\n* \u6ce8    \u610f\uff1a\n*********************************************************************************************************\/\nstatic void GetFileName(char* name)\n{\n  printf(\"Please input file name: \");\n  scanf(\"%s\", name);\n}<\/code><\/pre>\n\n\n\n<p>\u4ee5\u6587\u672c\u6587\u4ef6\u5f62\u5f0f\u5c06\u6574\u4e2a\u6587\u4ef6\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u4ee3\u7801\u5982\u4e0b\u6240\u793a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n#include &lt;malloc.h&gt;\n\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a ReadSourceFileToMemoryByChar\n* \u51fd\u6570\u529f\u80fd\uff1a \u4ee5\u6587\u672c\u6587\u4ef6\u5f62\u5f0f\u5c06\u6574\u4e2a\u6587\u4ef6\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\n* \u8f93\u5165\u53c2\u6570\uff1a path\uff1a\u6587\u4ef6\u8def\u5f84\n*            size\uff1a\u7528\u4e8e\u8f93\u51fa\u6587\u4ef6\u5927\u5c0f\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a \u5185\u5b58\u9996\u5730\u5740\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7402\u670810\u65e5\n* \u6ce8    \u610f\uff1a \u5206\u914d\u5185\u5b58\u5931\u8d25\u3001\u6253\u5f00\u6587\u4ef6\u5931\u8d25\u4f1a\u76f4\u63a5\u5361\u6b7b\n*********************************************************************************************************\/\nstatic char* ReadSourceFileToMemoryByChar(char* path, unsigned int* size)\n{\n  FILE* sourceFile;\n  char* buf;\n\n  \/\/\u6253\u5f00\u6587\u4ef6\uff08\u4ee5\u6587\u672c\u7684\u5f62\u5f0f\uff09\n  sourceFile = fopen(path, \"r\");\n  if (NULL == sourceFile)\n  {\n    printf(\"ReadSourceFileToMemoryByChar: Fail to open source file: %s\\r\\n\", path);\n    while (1) {}\n  }\n\n  \/\/\u7edf\u8ba1\u6587\u4ef6\u957f\u5ea6\n  fseek(sourceFile, 0, SEEK_END);\n  *size = ftell(sourceFile);\n\n  \/\/\u7533\u8bf7\u52a8\u6001\u5185\u5b58\n  buf = malloc(*size);\n  if (NULL == buf)\n  {\n    printf(\"ReadSourceFileToMemoryByChar: Fail to malloc for source file\\r\\n\");\n    while (1) {}\n  }\n\n  \/\/\u8df3\u8f6c\u5230\u6587\u4ef6\u5f00\u5934\n  fseek(sourceFile, 0, SEEK_SET);\n\n  \/\/\u8bfb\u5165\u6574\u4e2a\u6587\u4ef6\n  fread(buf, *size, 1, sourceFile);\n\n  \/\/\u5173\u95ed\u6587\u4ef6\n  fclose(sourceFile);\n\n  \/\/\u8fd4\u56de\u5185\u5b58\u9996\u5730\u5740\n  return buf;\n}<\/code><\/pre>\n\n\n\n<p>\u4ee5\u4e8c\u8fdb\u5236\u6587\u4ef6\u5f62\u5f0f\u5c06\u6574\u4e2a\u6587\u4ef6\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">#include &lt;stdio.h&gt;\n#include &lt;malloc.h&gt;\n\n\/*********************************************************************************************************\n* \u51fd\u6570\u540d\u79f0\uff1a ReadSourceFileToMemoryByByte\n* \u51fd\u6570\u529f\u80fd\uff1a \u4ee5\u4e8c\u8fdb\u5236\u6587\u4ef6\u5f62\u5f0f\u5c06\u6574\u4e2a\u6587\u4ef6\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\n* \u8f93\u5165\u53c2\u6570\uff1a path\uff1a\u6587\u4ef6\u8def\u5f84\n*            size\uff1a\u7528\u4e8e\u8f93\u51fa\u6587\u4ef6\u5927\u5c0f\n* \u8f93\u51fa\u53c2\u6570\uff1a void\n* \u8fd4 \u56de \u503c\uff1a \u5185\u5b58\u9996\u5730\u5740\n* \u521b\u5efa\u65e5\u671f\uff1a 2023\u5e7402\u670810\u65e5\n* \u6ce8    \u610f\uff1a \u5206\u914d\u5185\u5b58\u5931\u8d25\u3001\u6253\u5f00\u6587\u4ef6\u5931\u8d25\u4f1a\u76f4\u63a5\u5361\u6b7b\n*********************************************************************************************************\/\nstatic char* ReadSourceFileToMemoryByByte(char* path, unsigned int* size)\n{\n  FILE* sourceFile;\n  char* buf;\n\n  \/\/\u6253\u5f00\u6587\u4ef6\uff08\u4ee5\u6587\u672c\u7684\u5f62\u5f0f\uff09\n  sourceFile = fopen(path, \"rb\");\n  if (NULL == sourceFile)\n  {\n    printf(\"ReadSourceFileToMemoryByByte: Fail to open source file: %s\\r\\n\", path);\n    while (1) {}\n  }\n\n  \/\/\u7edf\u8ba1\u6587\u4ef6\u957f\u5ea6\n  fseek(sourceFile, 0, SEEK_END);\n  *size = ftell(sourceFile);\n\n  \/\/\u7533\u8bf7\u52a8\u6001\u5185\u5b58\n  buf = malloc(*size);\n  if (NULL == buf)\n  {\n    printf(\"ReadSourceFileToMemoryByByte: Fail to malloc for source file\\r\\n\");\n    while (1) {}\n  }\n\n  \/\/\u8df3\u8f6c\u5230\u6587\u4ef6\u5f00\u5934\n  fseek(sourceFile, 0, SEEK_SET);\n\n  \/\/\u8bfb\u5165\u6574\u4e2a\u6587\u4ef6\n  fread(buf, *size, 1, sourceFile);\n\n  \/\/\u5173\u95ed\u6587\u4ef6\n  fclose(sourceFile);\n\n  \/\/\u8fd4\u56de\u5185\u5b58\u9996\u5730\u5740\n  return buf;\n}<\/code><\/pre>\n\n\n\n<p>Windows \u4e0b\u8def\u5f84\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u8def\u5f84\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c\">static void CheckDir(char* dir)\n{\n  if(0 != _access(dir, 0))\n  {\n    _mkdir(dir);\n  }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8bb0\u5f55\u4e00\u4e9b C \u8bed\u8a00\u96f6\u6563\u77e5\u8bc6\u70b9\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts\/1855"}],"collection":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1855"}],"version-history":[{"count":19,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts\/1855\/revisions"}],"predecessor-version":[{"id":2034,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=\/wp\/v2\/posts\/1855\/revisions\/2034"}],"wp:attachment":[{"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.huangrongzhen.ink\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}