首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

kea128工程统一部份

硬件开发 63.61KB 14 需要积分: 1
立即下载

资源介绍:

kea128工程统一部份
/* * file printf.c */ #include #include "printf.h" /********************************************************************/ typedef struct { int dest; void (*func)(char); char *loc; } PRINTK_INFO; int printk(PRINTK_INFO *, const char *, va_list); /********************************************************************/ #define DEST_CONSOLE (1) #define DEST_STRING (2) #define FLAGS_MINUS (0x01) #define FLAGS_PLUS (0x02) #define FLAGS_SPACE (0x04) #define FLAGS_ZERO (0x08) #define FLAGS_POUND (0x10) #define IS_FLAG_MINUS(a) (a & FLAGS_MINUS) #define IS_FLAG_PLUS(a) (a & FLAGS_PLUS) #define IS_FLAG_SPACE(a) (a & FLAGS_SPACE) #define IS_FLAG_ZERO(a) (a & FLAGS_ZERO) #define IS_FLAG_POUND(a) (a & FLAGS_POUND) #define LENMOD_h (0x01) #define LENMOD_l (0x02) #define LENMOD_L (0x04) #define IS_LENMOD_h(a) (a & LENMOD_h) #define IS_LENMOD_l(a) (a & LENMOD_l) #define IS_LENMOD_L(a) (a & LENMOD_L) #define FMT_d (0x0001) #define FMT_o (0x0002) #define FMT_x (0x0004) #define FMT_X (0x0008) #define FMT_u (0x0010) #define FMT_c (0x0020) #define FMT_s (0x0040) #define FMT_p (0x0080) #define FMT_n (0x0100) #define IS_FMT_d(a) (a & FMT_d) #define IS_FMT_o(a) (a & FMT_o) #define IS_FMT_x(a) (a & FMT_x) #define IS_FMT_X(a) (a & FMT_X) #define IS_FMT_u(a) (a & FMT_u) #define IS_FMT_c(a) (a & FMT_c) #define IS_FMT_s(a) (a & FMT_s) #define IS_FMT_p(a) (a & FMT_p) #define IS_FMT_n(a) (a & FMT_n) /********************************************************************/ static void printk_putc(int c, int *count, PRINTK_INFO *info) { switch (info->dest) { case DEST_CONSOLE: info->func((char) c); break; case DEST_STRING: *(info->loc) = (unsigned char) c; ++(info->loc); break; default: break; } *count += 1; } /********************************************************************/ static int printk_mknumstr(char *numstr, void *nump, int neg, int radix) { int a, b, c; unsigned int ua, ub, uc; int nlen; char *nstrp; nlen = 0; nstrp = numstr; *nstrp++ = '\0'; if (neg) { a = *(int *) nump; if (a == 0) { *nstrp = '0'; ++nlen; goto done; } while (a != 0) { b = (int) a / (int) radix; c = (int) a - ((int) b * (int) radix); if (c < 0) { c = ~c + 1 + '0'; } else { c = c + '0'; } a = b; *nstrp++ = (char) c; ++nlen; } } else { ua = *(unsigned int *) nump; if (ua == 0) { *nstrp = '0'; ++nlen; goto done; } while (ua != 0) { ub = (unsigned int) ua / (unsigned int) radix; uc = (unsigned int) ua - ((unsigned int) ub * (unsigned int) radix); if (uc < 10) { uc = uc + '0'; } else { uc = uc - 10 + 'A'; } ua = ub; *nstrp++ = (char) uc; ++nlen; } } done: return nlen; } /********************************************************************/ static void printk_pad_zero(int curlen, int field_width, int *count, PRINTK_INFO *info) { int i; for (i = curlen; i < field_width; i++) { printk_putc('0', count, info); } } /********************************************************************/ static void printk_pad_space(int curlen, int field_width, int *count, PRINTK_INFO *info) { int i; for (i = curlen; i < field_width; i++) { printk_putc(' ', count, info); } } /********************************************************************/ int printk(PRINTK_INFO *info, const char *fmt, va_list ap) { /* va_list ap; */ char *p; int c; char vstr[33]; char *vstrp; int vlen; int done; int count = 0; int flags_used; int field_width; #if 0 int precision_used; int precision_width; int length_modifier; #endif int ival; int schar, dschar; int *ivalp; char *sval; int cval; unsigned int uval; /* * Start parsing apart the format string and display appropriate * formats and data. */ for (p = (char *) fmt; (c = *p) != 0; p++) { /* * All formats begin with a '%' marker. Special chars like * '\n' or '\t' are normally converted to the appropriate * character by the __compiler__. Thus, no need for this * routine to account for the '\' character. */ if (c != '%') { /* * This needs to be replaced with something like * 'out_char()' or call an OS routine. */ #ifndef UNIX_DEBUG if (c != '\n') { printk_putc(c, &count, info); } else { printk_putc(0x0D /* CR */, &count, info); printk_putc(0x0A /* LF */, &count, info); } #else printk_putc(c, &count, info); #endif /* * By using 'continue', the next iteration of the loop * is used, skipping the code that follows. */ continue; } /* * First check for specification modifier flags. */ flags_used = 0; done = FALSE; while (!done) { switch (/* c = */*++p) { case '-': flags_used |= FLAGS_MINUS; break; case '+': flags_used |= FLAGS_PLUS; break; case ' ': flags_used |= FLAGS_SPACE; break; case '0': flags_used |= FLAGS_ZERO; break; case '#': flags_used |= FLAGS_POUND; break; default: /* we've gone one char too far */ --p; done = TRUE; break; } } /* * Next check for minimum field width. */ field_width = 0; done = FALSE; while (!done) { switch (c = *++p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': field_width = (field_width * 10) + (c - '0'); break; default: /* we've gone one char too far */ --p; done = TRUE; break; } } /* * Next check for the width and precision field separator. */ if (/* (c = *++p) */*++p == '.') { /* precision_used = TRUE; */ /* * Must get precision field width, if present. */ /* precision_width = 0; */ done = FALSE; while (!done) { switch (/* c = uncomment if used below */*++p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': #if 0 precision_width = (precision_width * 10) + (c - '0'); #endif break; default: /* we've gone one char too far */ --p; done = TRUE; break; } } } else { /* we've gone one char too far */ --p; #if 0 precision_used = FALSE; precision_width = 0; #endif } /* * Check for the length modifier. */ /* length_modifier = 0; */ switch (/* c = */*++p) { case 'h': /* length_modifier |= LENMOD_h; */ break; case 'l': /* length_modifier |= LENMOD_l; */ break; case 'L': /* length_modifier |= LENMOD_L; */ break; default: /* we've gone one char too far */ --p; break; } /* * Now we're ready to examine the format. */ switch (c = *++p) { case 'd': case 'i': ival = (int) va_arg(ap, int); vlen = printk_mknumstr(vstr, &ival, TRUE, 10); vstrp = &vstr[vlen]; if (ival < 0) { schar = '-'; ++vlen; } else { if (IS_FLAG_PLUS(flags_used)) { schar = '+'; ++vlen; } else { if (IS_FLAG_SPACE(flags_used)) { schar = ' '; ++vlen; } else { schar = 0; } } } dschar = FALSE; /* * do the ZERO pad. */ if (IS_FLAG_ZERO(flags_used)) { if (schar) printk_putc(schar, &count, info); dschar = TRUE; printk_pad_zero(vlen, field_width, &count, info); vlen = field_width; } else { if (!IS_FLAG_MINUS(flags_used)) { printk_pad_space(vlen, field_width, &count, info); if (schar) printk_putc(schar, &count, info); dschar =

资源文件列表:

KEA128工程统一部分.zip 大约有16个文件
  1. KEA128工程统一部分/02_CPU/
  2. KEA128工程统一部分/02_CPU/core_cm0plus.h 40.4KB
  3. KEA128工程统一部分/02_CPU/core_cmFunc.h 16.33KB
  4. KEA128工程统一部分/02_CPU/core_cmInstr.h 20.35KB
  5. KEA128工程统一部分/03_MCU/
  6. KEA128工程统一部分/03_MCU/SKEAZ1284.h 253.9KB
  7. KEA128工程统一部分/03_MCU/startup_SKEAZ1284.S 11.34KB
  8. KEA128工程统一部分/03_MCU/system_SKEAZ1284.c 10.33KB
  9. KEA128工程统一部分/03_MCU/system_SKEAZ1284.h 8.13KB
  10. KEA128工程统一部分/04_Linker_File/
  11. KEA128工程统一部分/04_Linker_File/intflash.ld 4.96KB
  12. KEA128工程统一部分/common/
  13. KEA128工程统一部分/common/common.h 2.31KB
  14. KEA128工程统一部分/printf/
  15. KEA128工程统一部分/printf/printf.c 11.74KB
  16. KEA128工程统一部分/printf/printf.h 600B
0评论
提交 加载更多评论
其他资源 Visdom静态资源文件,用来解决启动visdom时卡在下载阶段
Visdom静态资源文件,用来替换本地安装路径下的static文件夹,解决启动visdom时卡在下载阶段的问题
智云CMS影音程序PHP源码V3.0.zip
无需数据库,只需要上传源码即可访问。本程序可在服务器或虚拟主机空间上搭建,且模板自适应移动端,浏览效果更佳。安装操作简单,无需繁琐的步骤,即可快速拥有一个视频看片资源网站。本程序支持通用苹果cms10的m3u8 josn或者是josn接口数据,但暂不支持上传到二级目录进行访问。 源码下载地址:00818.cn 智云影院CMS程序PHP源码V3.0采用纯PHP代码采集,全站内容均为全自动更新采集,自动缓存生成HTML,提高页面访问速度,有利于收录,是网站引流必备源码。
汉字与十六进制互转,输入1汉字转十六进制,输入2十六进制转汉字
工程可在dev软件中打开,压缩包中带有exe文件,可在window下直接执行
仿YouTube版PHP视频上传分享程序.zip
源码下载地址:00818.cn 仿YouTube版PHP视频上传分享程序PlayTube,基于PHP的视频分享上传程序,仿YouTube版PlayTube是一个视频分享程序,能够快速搭建一个视频上传、导入和分享的网站。该程序具有多语言支持、用户管理、广告管理、视频上传以及从YouTube和Vimeo等网站导入视频的功能。此次发布的是2.0.2版本。在搭建过程中发现是英文版的,但在后台可以进行相应的替换设置。
ssm高校专业信息管理系统设计与实现 源码+文档+数据库
现如今,信息种类变得越来越多,信息的容量也变得越来越大,这就是信息时代的标志。近些年,计算机科学发展得也越来越快,而且软件开发技术也越来越成熟,因此,在生活中的各个领域,只要存在信息管理,几乎都有计算机的影子,可以说很多行业都采用计算机的方式管理信息。信息计算机化处理相比手工操作,有着保密性强,效率高,存储空间大,成本低等诸多优点。针对高校专业信息管理,采用高校专业信息管理系统可以有效管理,使信息管理能够更加科学和规范。 总之,在实际中使用高校专业信息管理系统,其意义如下: 第一点:高校专业信息管理系统的实际运用,可以帮助管理人员在短时间内完成信息处理工作; 第二点:通过系统页面的合理排版布局,可以更加直观的展示系统的内容,并且使用者可以随时阅读页面信息,随时操作系统提供的功能; 第三点:可以实现信息管理计算机化; 第四点:可以降低信息管理成本; 推荐使用:谷歌浏览器 后台地址 http://localhost:8080/你的系统名/admin/dist/index.html http://localhost:8080/你的系统名/admin/dist/#/login 管理员
45454555555555555555555
4555555555
MadEdit反编译直接修改.class文件内容
反编译,.class文件修改
基于JS的token无感刷新
内容概要: 本文档描述了一种基于JavaScript实现的token无感刷新机制,旨在为用户提供无缝的认证体验,避免因token过期而中断用户操作。 适用人群 Web开发者:需要在他们的应用中实现token管理的前端和后端开发者。 系统架构师:负责设计和优化用户认证流程的技术决策者。 产品经理:关注用户体验和产品安全性的专业人士。 使用场景及目标 场景:用户在使用Web应用或服务时,经常需要保持会话状态,进行长时间的操作或数据交互。 目标: 减少用户因token过期而需要重新登录的次数,提升用户体验。 通过自动化的token刷新流程,降低系统因认证问题导致的中断风险。 确保应用的安全性,即使在token接近过期时也能保障用户数据的安全。 其他说明: 实现token无感刷新时,必须考虑到安全性,避免token泄露或被滥用。建议使用HTTPS协议传输数据,并采用安全的token存储机制。 该机制应兼容主流的Web浏览器和后端技术栈,确保在不同环境下均能稳定运行。 通过实现这一机制,开发者可以为用户提供更加流畅和安全的应用体验,同时确保后端服务的稳定性和可靠性。