当前位置: 首页 > news >正文

网站开发合同是否要交印花税赣州品牌网站建设

网站开发合同是否要交印花税,赣州品牌网站建设,wordpress中文相册插件下载,平台设计图说明#xff1a;记录日常使用 RT_Thread 开发时做的笔记。 持续更新中#xff0c;欢迎收藏。 1.打印相关 1.打印宏定义#xff0c;可以打印打印所在文件#xff0c;函数#xff0c;行数。 #define PRINT_TRACE() printf(-------%s:%s:%d------\r\n, __FIL…说明记录日常使用 RT_Thread 开发时做的笔记。 持续更新中欢迎收藏。 1.打印相关 1.打印宏定义可以打印打印所在文件函数行数。 #define PRINT_TRACE() printf(-------%s:%s:%d------\r\n, __FILE__, __FUNCTION__, __LINE__);__FILE__正在编译文件的路径及文件名 __LINE__正在编译文件的行号 __DATE__编译时刻的日期字符串 如“July 19 2019” __TIME__编译时刻的时间字符串 如”22:00:00“ __FUNCTION__函数名类型为字符常量指针 __VER__IDE版本信息类型为整型 2. rt thread 3.1.5  nano版本中添加 rt_kprintf() 函数功能 .1 rtconfig.h头文件中开启控制台相关宏  #define RT_USING_CONSOLE .2 在 board.c 中 添加串口初始化函数 和  rt_kprintf() 串口输出调用的函数 rt_hw_console_output #ifdef RT_USING_CONSOLEstatic int uart_init(void) { //#error TODO 2: Enable the hardware uart and config baudrate.USART1_Init();return 0; } INIT_BOARD_EXPORT(uart_init);void rt_hw_console_output(const char *str) { //#error TODO 3: Output the string str through the uart./* empty console output */rt_enter_critical();while (*str ! \0){HAL_UART_Transmit(Uart1Handle, (uint8_t *) (str), 1, 1000);}rt_exit_critical(); }#endif3. printf 重定向 可通过搜索功能查找到函数 fputc修改函数体中的串口数据发送函数。 /* printf 重定向 */ int fputc(int ch, FILE *f) { #if PRINTF_PORT_JLINKSEGGER_RTT_PutChar(0, ch); #elseHAL_UART_Transmit(Uart1Handle, (uint8_t *)ch, 1, 1000); #endifreturn (ch); }int fgetc(FILE *f) {int ch;HAL_UART_Receive(Uart1Handle, (uint8_t *)ch, 1, 1000);return (ch); }4.串口打印函数 1.0 RT官方文档对print函数介绍 https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/libc/compiler 标准输出函数 (printf 家族) printf 函数 在 Keil 和 IAR 编译平台下用户可以直接使用 printf 函数在 GCC 下需要额外使能 RT_USING_POSIX_FS 和 RT_USING_POSIX_STDIO 宏才能使用 printf 函数。 rt_kprintf 函数 与 printf 函数的使用选择 如果不是特殊需求建议使用 rt_kprintf 函数因为 printf 是由编译平台内部提供的其空间占用、以及内存使用情况我们无从得知printf 函数要比 rt_kprintf 函数的 ROM 占用大很多。 无论是 rt_kprintf 函数以及 printf 函数都是非线程函数在多线程同时使用的情况下会出现交叉打印的现象该问题是正常现象因为根据 C 标准的要求printf 函数就是非线程安全的。 原生 rt_kprintf 函数是经过优化的占用空间要比 printf 函数小很多。但是 rt_kprintf 函数并不支持浮点类型的输出。因此 如需 rt_kprintf 函数支持浮点类型的输出可以安装 rt_vsnprintf_full 软件包如需 rt_kprintf 函数支持线程安全输出可以安装 rt_kprintf_threadsafe 软件包上述两个软件包可以同时安装使用以同时让 rt_kprintf 支持线程安全和浮点类型输出的能力。 其他字符串格式化输出函数 (例如 snprintf 等) 其他字符串格式化输出函数例如 snprintf 等都是可以直接使用的。 强烈建议用户使用 rt_snprintf 等 RT-Thread 这侧的函数来代替 snprintf 等函数以降低资源消耗。尤其是在 GCC 编译链下NewlibGCC 工具链内部默认的 C 库内置提供的 snprintf 函数是非线程安全的在多线程无保护输出浮点数的情况下可能会引发死机snprintf 函数非线程安全是不正常的。 同理原生 rt_snprintf 等函数不支持浮点输出用户可以通过安装 rt_vsnprintf_full 软件包 来支持浮点数输出。 1.1 串口打印函数可以直接打印字符串或者变量值。以下两种方式 rt_kprintf(led_test); 打印某个变量的数据如打印 count 变量值 while (1){rt_kprintf(thread1 count: %d\n, count );rt_thread_mdelay(500);} 1.2 printf 打印函数参数格式 描述:         C 库函数 int printf(const char *format, ...) 发送格式化输出到标准输出 stdout。 printf()函数的调用格式为: printf(格式化字符串, 参量表); 声明:下面是 printf() 函数的声明。 printf(格式化字符串, 参量表); 参数:         format -- 这是字符串包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签format 标签可被随后的附加参数中指定的值替换并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier具体讲解如下 格式字符 意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进制形式输出无符号整数(不输出前缀Ox) u 以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数 e,E 以指数形式输出单、双精度实数 g,G 以%f或%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串 p 输出指针地址 lu 32位无符号整数 llu 64位无符号整数 1.3 按固位数输出 按固位数输出比如4位 xxxx6位 xxxxxx 以下用 %x举例其他格式也是相同用法。 应用说明如果16进制%x输出 0x061E, 实际打印出的结果是 61E ,开始的0被省略掉。 如果需要按固定4位打印则需要把 %x 改为 %04x这样就能输出061E。 rt_kprintf(CpuID[0] %08x ,CpuID[1] %08x , CpuID[2] %08x \r\n,CpuID[0],CpuID[1],CpuID[2]); 1.4 串口打印2串口输出2如通过串口打印输出一个字符数组。(非 rt_kprintf ) static rt_device_t serial; /* 串口设备句柄 */ static char str[] 中国加油武汉加油全世界加油\r\n; /* 需要发送的数据 */ //中间省略了串口配置的部分 rt_device_write(serial, 0, str, (sizeof(str)-1)); //打印输出str是数组名可直接作为数组首地址的地址指针sizeof(srt)计算数组的大小这个语句可以自动全部打印输出str数组1.5 RT THREAD 串口发送数据非 rt_kprintf 函数 向串口中写入数据可以通过如下函数完成 rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size); 参数 描述 dev 设备句柄 pos 写入数据偏移量此参数串口设备未使用 buffer 内存缓冲区指针放置要写入的数据 size 写入数据的大小 返回 —— 写入数据的实际大小 如果是字符设备返回大小以字节为单位 0 需要读取当前线程的 errno 来判断错误状态 调用这个函数会把缓冲区 buffer 中的数据写入到设备 dev 中写入数据的大小是 size。 向串口写入数据示例程序如下所示 #define SAMPLE_UART_NAME uart2 /* 串口设备名称 */ static rt_device_t serial; /* 串口设备句柄 */ char str[] hello RT-Thread!\r\n; struct serial_configure config RT_SERIAL_CONFIG_DEFAULT; /* 配置参数 */ /* 查找串口设备 */ serial rt_device_find(SAMPLE_UART_NAME);/* 以中断接收及轮询发送模式打开串口设备 */ rt_device_open(serial, RT_DEVICE_FLAG_INT_RX); /* 发送字符串 */ rt_device_write(serial, 0, str, (sizeof(str) - 1)); 1.6 打印输出数据按格式对齐 比如输出数据1和11对齐即输出0111这样有助于通过串口输出的数据整齐方便后期数据处理如下图时分秒按2位显示对齐只有各位数的在十位补空格。这样让整个数据格式整齐。 具体输出函数如下在需要显示指定位数的地方 %2d ,表示按2位数据格式输出10进制数据。 经过测试发现如果限制数据为 %2d 但是实际数据是3位则输出任然按3位输出。 rt_kprintf(%d.%d.%d/%2d:%2d:%2d:AHT10 温度:%d;SHT30 湿度:%d;SHT30 温度:%d;SHT30 湿度:%d;\n,\rtc_data_hex[6],rtc_data_hex[5],rtc_data_hex[4],rtc_data_hex[2],rtc_data_hex[1],rtc_data_hex[0],\AHT10_temperature,AHT10_humidity,SHT30_temperature,SHT30_humidity); 1.7 rt_kprintf 打印输出数据按格式对齐 使用 rt_kprintf 函数打印小数、浮点数 rt_kprintf(表头 PA7 电压 %d.%03d 传感器 PB0 电压 %d.%03d\n, vol_bt / 1000, vol_bt % 1000, vol_sig / 1000, vol_sig % 1000); 1.8 调试信息、编译信息打印如编译路径时间日期文件名字等等 __FILE__正在编译文件的路径及文件名 __LINE__正在编译文件的行号 __DATE__编译时刻的日期字符串 如“July 19 2019” __TIME__编译时刻的时间字符串 如”22:00:00“ __FUNCTION__函数名类型为字符常量指针 __VER__IDE版本信息类型为整型char BuildFile[] __FILE__; int BuildLine __LINE__; char BuildDate[] __DATE__; char BuildTime[] __TIME__; /* 为打印调试提供文件行数函数名等附加信息*/ rt_kprintf(编译文件路径%s\n, BuildFile); rt_kprintf(编译代码所在行%d\n, TestLine); rt_kprintf(编译日期%s\n, BuildDate); rt_kprintf(编译时间%s\n, BuildTime); 打印效果 1.9 串口底层直接发送数据 for( i 0 ; i Send_Count; i) //循环发送,直到发送完毕 {while((USART1-SR0X40)0);//判断串口数据是否发送完USART1-DR DataScope_OutPut_Buffer[i]; //从串口丢一个字节数据出去 } 1.10 串口函数 rt_kprintf 打印字符串数组 /*定义一个字符串数组*/ u_char Adc_Channel_Name[CH_NUM][12] \{{ch1_vh2_r },\{ch1_vh1_ra},\{ch1_vh1_la},\{ch1_vh2_l },\{ch1_vh1_rb},\{ch1_vh1_lb},\{ch2_vh2_r },\{ch2_vh1_ra},\{ch2_vh1_la},\{ch2_vh2_l },\{ch2_vh1_rb},\{ch2_vh1_lb},\{ch1_th1 },\{ch2_th1 },\{24v_th1 },\{3v3_th1 },\};/*通道名称*/--------------------- /*打印输出*/if (argc ! 3 ){rt_kprintf(校准命令请输入校准命令 和 校准目标值,单位mV,输入如: vcf ch1_vh2_r 14000 \n);rt_kprintf(当前采样电压 \n);for (uint8_t var 0; var CH_NUM; var){rt_kprintf(%s %d \n,Adc_Channel_Name[var][0],Adc_Channel_InVol[var]);}return;} 输出效果 1.11 关于 %*.*s , %.*s 小数点.后“*”表示输出位数具体的数据来自参数表 printf 格式字符串中与宽度控制和精度控制有关的常量都可以换成变量方法就是使用一个“*”代替那个常量然后在后面提供变量给“*”。同样小数点.前也可以添加*也要用户输入一个位宽值来代替表示输出的字符所占位宽。也就是说前面定义输出总宽度后面定义输出字符个数。 举例 #include cstdio #include iostream int main() { char *s this is test example; int a,b; printf(%.*s\n, 10, s);//这里的常量10就是给*号的,你也可以用一个变量来控制宽度 printf(%*.*s\n, 20, 10, s);//常量20控制输出所占位宽也可以用一个变量控制 std::cinab; //输入15 10 printf(%*.*s\n, a, b, s);//输出为-----this is te 前面定义输出总宽度后面定义输出字符个数std::cin.get(); std::cin.ignore();//暂停程序执行 } 输出结果为this is te----------this is te//-代表空格15  10 //输入-----this is te转载于:https://www.cnblogs.com/ph829/p/5576832.html 1.12 打印宏定义内容 #define def_buffer_swver_data SW-MCU-V1.3-20210720 /* 软件版本号 *//* 软件版本号打印 */ rt_kprintf(软件版本号: ); rt_kprintf(%s,def_buffer_swver_data); rt_kprintf(\r\n); 1.13 仿 rt_kprintf函数用在调试串口外的串口更方便发送数据 修改代码中 rt_device_write() 串口句柄参数就可以像 rt_kprintf一样使用自定义的串口了。 /*** This function will print a formatted string on system console* 本函数基于 系统的 rt_kprintf 改动而来主要改动了 指向串口硬件的变量 yl_uart_device* param fmt the format*/ void yl_kprintf(const char *fmt, ...) {rt_device_t yl_uart_device serial_uart3; /* 定义一个本函数用的串口硬件句柄 */va_list args;rt_size_t length;static char rt_log_buf[RT_CONSOLEBUF_SIZE];va_start(args, fmt);/* the return value of vsnprintf is the number of bytes that would be* written to buffer had if the size of the buffer been sufficiently* large excluding the terminating null byte. If the output string* would be larger than the rt_log_buf, we have to adjust the output* length. */length rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args);if (length RT_CONSOLEBUF_SIZE - 1)length RT_CONSOLEBUF_SIZE - 1;if (yl_uart_device RT_NULL){rt_hw_console_output(rt_log_buf);}else{rt_uint16_t old_flag yl_uart_device-open_flag;yl_uart_device-open_flag | RT_DEVICE_FLAG_STREAM;//rt_device_write(serial_uart3, 0, rt_log_buf, length); /* 串口对应 RS232 */yl_rt_device_write(serial_uart3, 0, rt_log_buf, length);/* 串口对应硬件是RS485接口 */yl_uart_device-open_flag old_flag;}va_end(args); } RTM_EXPORT(yl_kprintf); 1.14 仿 rt_kprintf函数方便打印调试信息的开关 通过宏定义来统一管理调试信息输出的开关 以下代码通过仿 LOG_D(Hello RT-Thread!); 改变而得。/**************************以下内容放到 .h 文件中**************************************/ #define DEBUG_PRINTF_ONOFF 0 /* 调试信息打印开关 */ /* 调试信息打印函数 */ #define debug_printf(fmt, ...) \do \{ \if(DEBUG_PRINTF_ONOFF)rt_kprintf(fmt, ##__VA_ARGS__); \} \while (0)/************************** .c 文件中的调用 **************************************/ for (uint8_t var 0; var max; var){debug_printf(函数回调功能触发 %d \r\n,var);rt_thread_mdelay(100);} 2. MSH 控制台功能 1. rt thread 3.1.5  nano版本中添加 MSH 控制台功能 .1 在 keil 软件包中勾选 shell 功能 .2 在 finsh_port.c 中看提示开启宏和串口接收函数。 添加 shell 功能后编译 在 finsh_port.c 文件中会有2个错误的提示。 /* 在 rtconfig.h 中开启 #include finsh_config.h 宏 */ #ifndef RT_USING_FINSH #error Please uncomment the line #include finsh_config.h in the rtconfig.h #endif#ifdef RT_USING_FINSH/* 定义串口接收功能 */ RT_WEAK char rt_hw_console_getchar(void) {/* Note: the initial value of ch must 0 */int ch -1;//#error TODO 4: Read a char from the uart and assign it to ch.return ch; }#endif /* RT_USING_FINSH */.3 定义一个接收函数放到 rt_hw_console_getchar 中调用 前提串口已经实现了对串口数据的接收接收的数据存储在了接收缓存中缓存的前2个字节用于存储 shell 取了第几个字节数据第3个字节开始存储串口收到的数据。 void read_uart1_ch(int *ch) {uint16_t *count NULL;count (uint16_t *)usart1_rx_buf;*ch usart1_rx_buf[*count];if (*ch 0){*ch -1;}else{*count *count 1;} }3.调试笔记 1.rt thread  内存申请失败调试笔记 问题描述 1.在线程中调用了一个函数A该函数会申请内存函数结束前会再释放。测试中发现这个函数在线程中调用几次后就提示异常申请不到内存。 2请教内存的释放 是否是在 rt_free 后就完成 3大概逻辑 线程 {while(n){调用函数A申请内存执行相关工作释放内存延时调用函数A申请内存执行相关工作释放内存延时} }问题已解决自己回答 1调试发现内存堆分配了15K,关掉发现问题的线程后发现系统跑起来其他线程都运行后内存最大已经使用了13K多这就反应了为什么前几次能申请到内存后面就申请不到了因为这个线程运行的比较早开始时内存充足可以申请到后面问题线程延时时系统调度启动了别的线程导致内存堆空间减少延时结束继续申请内存时就出现了内存不足。 2增大内存堆后问题解决。 2. rt-thread 3.1.5 内存堆大小设置 .1 修改位置 在 board.c 文件中修改 #define RT_HEAP_SIZE (30*1024) #if defined(RT_USING_USER_MAIN) defined(RT_USING_HEAP) /** Please modify RT_HEAP_SIZE if you enable RT_USING_HEAP* the RT_HEAP_SIZE max value (sram size - ZI size), 1024 means 1024 bytes*/ #define RT_HEAP_SIZE (30*1024) static rt_uint8_t rt_heap[RT_HEAP_SIZE];.2 官方介绍: RT-Thread 堆区大小设置 ​RT-Thread 堆区大小设置 链接https://www.cnblogs.com/jzcn/p/16427067.html 介绍了 RT-THREAD 内存堆的设置STM32内存分布情况。
http://www.w-s-a.com/news/102540/

相关文章:

  • 网站开发新型技术那些网站做任务领q币
  • 海口手机网站建设wordpress微支付宝
  • 做公司网站需要几天深圳自定义网站开发
  • 做网站学多长时间可以学会推广软件公司
  • 网络网站设计培训长沙建站模板大全
  • 站群搭建移动端处理器天梯图
  • 岳池发展建设集团有限公司门户网站湛江seo咨询
  • 手机网站工具关键词排名是什么意思
  • 游民星空是谁做的网站沈阳网站托管公司
  • 做网站搭建需要什么人vs2017移动网站开发
  • 购物网站开发需要什么技术怎么查看网站是否备案
  • 学做电商那个网站好网站建设投票主题
  • 中卫网站推广网络营销毕业设计做网站大小有什么要求
  • 做问卷网站义乌网站建设推广专家
  • 不会编程怎样建设网站昆明做网站哪家
  • 直播网站模板新营销平台电商网站
  • 建设部指定招标网站免费的企业查询软件
  • 做前端常用的网站及软件下载平台优化是什么意思
  • 企石镇仿做网站wordpress 网站白屏
  • 班级网站建设规划书专业定制网红变色杯
  • 上海网站设计公司电话甘肃路桥建设集团有限公司官方网站
  • 哈尔滨网站建设网站开发陕西省建设监理工程协会网站
  • 微信公众号电商网站开发wordpress增加论坛
  • 网站建设视频百度网盘下载免费wordpress搭建
  • 哈尔滨市网站建设公司汕头市公司网站建设平台
  • 东莞网站建设方案外包甘肃两学一做网站
  • 网站建设优化排名推广平面设计职业学校
  • 网后台的网站怎么做网站代理商
  • 网站如何转移到新的空间服务器上手机无人区离线地图app
  • 网站建设模板的买域名做网站的坏处