欢迎来到58原创网网

一篇文章轻松搞定《flash 读书笔记》的写作。(精选5篇)

更新日期:2025-07-21 07:44

一篇文章轻松搞定《flash

写作核心提示:

写一篇关于Flash读书笔记的作文,需要注意以下事项:
1. 确定读书笔记的主题:首先,明确你想要表达的中心思想。Flash技术作为计算机领域的重要分支,其应用范围广泛,你可以从Flash的发展历程、技术特点、应用领域等方面入手。
2. 结构清晰:一篇好的读书笔记应具备良好的结构。一般来说,可以按照以下顺序展开:
a. 引言:简要介绍Flash技术的背景、起源和发展历程。
b. 主要内容:详细介绍Flash技术的基本原理、技术特点和应用领域。
c. 评价与反思:结合自身实际,对Flash技术进行评价,并提出自己的观点和看法。
d. 总结:概括全文,强调Flash技术的重要性和发展趋势。
3. 语言表达:在写作过程中,注意以下几点:
a. 语言简练:尽量用简洁明了的语言描述,避免冗长、啰嗦。
b. 逻辑性强:确保文章思路清晰,论述有理有据。
c. 观点鲜明:在评价Flash技术时,要明确提出自己的观点,并给出相应的理由。
4. 举例说明:在介绍Flash技术时,可以结合实际案例进行分析,使文章更具说服力。
5. 注重原创性:在写作过程中,尽量发挥自己的见解,避免抄袭他人观点。
6. 适当引用:在论述过程中,可以适当引用权威资料、专家观点等,以增强文章的权威性。

太强了!搞科研、写论文,如何随时随地记录idea、捕捉闪念?

随时随地记录闪念

笔者有在电脑上随手记录的习惯,也一直想找一款好用的笔记 APP,满足写作相关需求,笔者先后使用过 WPS、腾讯文档、幕布 APP、为知笔记、有道笔记等。


当我第一次使用 Obsidian 时,我就知道我的写作习惯将要发生重大改变了。虽然我使用的 Obsidian 不能云同步(可以自己搭建云同步平台,或者购买高级会员),但是依然能让我随时随地访问我的笔记。


Obsidian 需要第三方插件、自己配置,我像发现了宝藏一般,享受着搭建自己的工作台的过程,Obsidian确实带给了我惊喜。


在科研中,你是否会在某个瞬间产生一个想法,但没过多久就想不起来了,正所谓灵感转瞬即逝,毕竟我们的大脑并不擅长记忆,大脑的作用更在于思考与创造,否则,人类就不会有这么多伟大的发明和创举。Obsidian 会像我的秘书一样,记录下我的每一个想法。记录的过程要求简单、方便且不会花费我们太多时间。


闪念笔记就是一个临时记录想法的盒子,尤其是看文献、写论文的时候,很容易产生灵光乍现,体验下来是非常有用的。


强大的第三方外挂——QuickAdd


本期,笔者介绍一下如何在 Obsidian 中实现闪念(flash of thought)记录功能。


这里实现的闪念需要 Obsidian 的最强第三方外挂之一——QuickAdd


QuickAdd 外挂可以快速将新笔记或内容添加到您的文件库,官方地址:

GitHub - chhoumann/quickadd: QuickAdd for Obsidian


QuickAdd 外挂位于 Obsidian 的社区插件中,您可以搜索“QuickAdd”,并在那里安装它。下图就是笔者用社区安装的截图。



如何设置 QuickAdd

打开 QuickAdd 设置界面,它有 4 种类型供选择:

• Capture:捕捉输入内容到某个文件。

• Template:用模板新建文件。

• Multi:用于把 quickadd 命令做成可选菜单的形式。

• Macro:执行一系列命令组合。

笔者捕捉闪念使用的是【Capture】,下图是笔者配置的 QuickAdd

新建一个【Capture 】,命名学习闪念,然后打开设置如下图。这里要注意几点:

设置文件路径,也就是说闪念存储的文件;

闪念存储的文件内位置;

以及闪念存储格式,如下图所示。闪念存储在标题“学习闪念”下面的结尾处。

QuickAdd 支持很多种格式类型如下图所示,包括日期、标题和内容。

笔者举几个例子说明这些格式语法的用法。

➤例 1:

{{DATE:YYYY-MM-DD HH:mm}}复制

这是向笔记中插入一个时间,例如 2022-05-29 10:30。

➤例 2:

- {{VALUE}}复制

这是向笔记中以任务的形式插入你输入的文字。

➤例 3:

{{DATE:YYYY-MM-DD HH:mm}}{{VALUE}}复制

这是向笔记中插入时间 + 文字,效果如下:"2022-05-29 10:30这是一个例子 "。

大家可以自己设置格式,Capture 有很多功能,笔者就不详细介绍了。

闪念捕捉演示

我们可以通过命令直接调用设置好的闪念功能,如下图所示。

下面视频演示了笔者使用闪念的效果。

,时长00:38

笔者设置了三个闪念笔记,基本涵盖了各个方面:

• 工作闪念

• 学习闪念

• 日常闪念

对应地实现了三个QuickAdd 的【Capture】。

它们帮助我记录瞬间的想法,但这还不足够,我还要将这些想法进行整理,并将它们实现,才有意义。闪念笔记就是一个临时记录想法的盒子,是非常有用的,尤其是看文献、写论文的时候,很容易产生灵光乍现。

笔者只是教会大家一个 QuickAdd 的方法,大家可以自己设置专属 QuickAdd 方法。

当然你也可以自己打开一个文档,去写自己的闪念。但是 QuickAdd 能够提高我们的写作效率,我们只需要调用自己设置好的功能就好了。

写在最后

本期,笔者介绍了Obsidian 强大的第三方外挂——QuickAdd,讲解了如何使用它的【 Capture 】记录闪念,其实 QuickAdd 非常强大,可以做很多事情,笔者会在以后分享QuickAdd 的其他用法。

Obsidian 需要用户自己配置,对于一些不熟悉编程的用户可能不太友好,可能会在初期劝退一些用户。一旦你成功上手了 Obsidian,就会感受到它的强大。Obsidian 毕竟可以用于学习、笔记,也可以用于研究论文、日程安排,这些内容会在以后详细介绍。

大家如果想了解更多关于 Obsidian 的内容,可以关注投必得学术,点赞本文,也可以留言给我们。笔者接下来会分享更多Obsidian 的用途,帮助大家更好地使用 Obsidian,用 Obsidian 帮助大家更好地阅读、写作和学习。

Obsidian+Zotero的第三方插件总结

Obsidian 的强大就在于第三方插件。截至目前,笔者已经总结了一些 Obsidian+Zotero结合第三方插件的科研工作学习用法:


•【Obsidian】+【Media Extended & Extended BiliBili Plugin 插件】是一个很好用的视频学习神器,可以让你边看视频,边做笔记,还能在笔记里用视频时间戳。

•【Obsidian】+【PDF to Markdown 插件】是一个好用的 PDF 转换文本工具,可以直接将 PDF 转化为 markdown 文件,你可以直接在原文上做笔记了。

•【Obsidian】+【Note Refactor 插件】是一个很好用的拆书工具,可以让你用不同方式拆解一本书,打造自己的知识网络。

•【Obsidian】+【模板插件】是一个很好用的快捷写作工具,可以让你用不同的模板写论文、写文献笔记,提高你的写作效率。

•【Obsidian】+【Day Planners 插件】是一个很好用的时间管理工具,高颜值日清单帮你规划时间,定时提醒你的当前、下一步任务。

•【Obsidian】+【mindmap 插件】是一个很好用的思维导图自动生成工具,它可以直接将你的文本转化为思维导图,将冗长的文本变得清晰可视。

•【Obsidian】+【Enhancing mindmap 插件】是一个免费绘制思维导图工具,你可以直接用它绘制自己的想法。

•【Obsidian】+【Outline & Zoom 插件】是一个好用的大纲笔记工具,你可以直接用它设计论文大纲,做头脑风暴。

•【Obsidian】+【QuickAdd】是一个好用的闪念捕捉工具,你可以直接用它快速记录自己的想法。

•【Obsidian】+【MarkDownload - Markdown Web Clipper 插件】是一个好用的网页剪藏工具,你可以直接用它快速将想要收藏的网页导入 Obsidian 笔记中。

•【Obsidian】+【Zotero】是一个强大的文献管理、阅读、笔记组合,你可以做到阅读笔记高效切换。

•【Obsidian】+【Cubox】是一个强大的信息碎片收集工具,你可以将网页、手机上信息收藏到笔记中。

•【Obsidian】+【RSS 插件】是一个好用的期刊论文订阅工具,你可以每天收到最新期刊论文。

•【Obsidian】+【Citations、Better BibTeX】是一个 Zotero 与 Obsidian 联动方式,你可以拾取 Zotero 的所有文献数据,导入 Obsidian,写笔记的好帮手。

•【Obsidian】+【cMenu】是一个好用的仿 Word 工具栏,你可以像操作 word 一样编辑文本(标题、加粗、角标、高亮等等)。

•【Obsidian】+【Editor Syntax Highlight】是一个高效的编程笔记神器,你可以在笔记中插入高亮的编程脚本,非常 nice。

•【Obsidian】+【Markdown Formatting Assistant】是一个必备的格式辅助工具,你可以编辑文本、表格、HTML、数学公式等。

•【Obsidian】+【MarkDownload - Markdown Web Clipper】是一个网页剪藏工具,你可以讲网页转 Markdown,粘贴或者导入 Obsidian。

•【Zotero】+【Mdnotes 插件】是一个 PDF 注释导出工具,你可以导出的文献笔记到 Obsidian,不仅具备了文献的元数据,还拥有笔记。

•【Obsidian】+【floating-toc】是一个浮动大纲列表工具,可以给你的文本添加一个大纲,大纲会根据鼠标悬停显示,自动隐藏。

•【Obsidian】+【Table of Contents】是一个目录工具,你可以为你的论文生成一个带有链接跳转的目录。


上述这些插件只是 Obsidian 的冰山一角,笔者会在后续推文中分享 Obsidian 的更多第三方插件的强大用法,绝对可以提高你的科研学习效率。

单片机下FreeModbus移植笔记(二)

  在单片机下FreeModbus移植笔记(一) 中,我们已经制作好了stm8s003k3t6的FreeModbus空模板工程。现在,我们可以正式开始移植适配工作了。移植过程中,需要修改的文件有3个,一个是port中的portserial.c和porttimer.c,另一个是源码port/BARE目录中demo.c,在上篇文章中我们将demo.c重命名为了main.c。

  需要提到一点,关于本文的阅读建议是:不要阅读,直接丢收藏夹里吃灰。因为即使看完了你也记不住,只要在有需要的时候翻出来做参考或直接copy代码即可。此外,还有一个温馨提示:由于stm8s003k3t6的Flash只有8K,如果用STM8的函数库开发的话,你会发现移植完FreeModbus后Flash余量就很小了,根本不足以实现比较复杂的应用,所以建议采用寄存器方式来开发。

portserial.c移植

  打开portserial.c文件,里面是一些函数模板,函数体是空的,我们只需按照注释说明完成这些函数体即可。首先在文件中需要包含头文件:#include "iostm8s003k3.h"。接下来开始portserial.c的移植工作。


  在这个函数中,我们需要完成对串口接收中断和串口发送完成中断的控制。完成后的代码如下:

void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
{
    /* If xRXEnable enable serial receive interrupts. If xTxENable enable
     * transmitter empty interrupts.
     */
    UART1_SR_bit.RXNE = 0;
    if(xRxEnable) UART1_CR2_bit.RIEN = 1; //使能UART1接收中断
    else UART1_CR2_bit.RIEN = 0; //关闭UART1接收中断

    UART1_SR_bit.TC = 0;
    if(xTxEnable) UART1_CR2_bit.TIEN = 1; //使能UART1发送完成中断
    else UART1_CR2_bit.TIEN = 0; //关闭UART1发送完成中断
}


  在这个函数中,我们要根据函数的传参实现串口的初始化工作。函数参数中的ucPORT是用于选择物理端口的,一般我们只把一个串口用来做Modbus通信,所以次参数可以无视。其他参数就顾名思义吧,实在没啥可解释的。完成后代码如下。

BOOL xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
{
    uint32_t BaudRate_Mantissa = 0, BaudRate_Mantissa100 = 0;

    /*UART1 RX IO初始化*/
    PD_DDR_bit.DDR6 = 0; //输入模式
    PD_CR1_bit.C16 = 1; //上拉输入
    PD_CR2_bit.C26 = 0;  //禁止外部中断
    /*UART1 TX IO初始化*/
    PD_DDR_bit.DDR5 = 1; //输出模式
    PD_CR1_bit.C15 = 1; //推挽输出
    PD_CR2_bit.C25 = 1;  //输出速度10MHz

    /* Set the UART1 BaudRates in BRR1 and BRR2 registers according to UART1_BaudRate value */
    BaudRate_Mantissa    = ((uint32_t)HSE_VALUE / (ulBaudRate << 4));
    BaudRate_Mantissa100 = (((uint32_t)HSE_VALUE * 100) / (ulBaudRate << 4));
    /* Set the fraction of UART1DIV  */
    UART1_BRR2 |= (uint8_t)((uint8_t)(((BaudRate_Mantissa100 - (BaudRate_Mantissa * 100)) << 4) / 100) & (uint8_t)0x0F);
    /* Set the MSB mantissa of UART1DIV  */
    UART1_BRR2 |= (uint8_t)((BaudRate_Mantissa >> 4) & (uint8_t)0xF0);
    /* Set the LSB mantissa of UART1DIV  */
    UART1_BRR1 |= (uint8_t)BaudRate_Mantissa;

    UART1_CR3_bit.STOP = 0; //1位停止位
    if(8 == ucDataBits) UART1_CR1_bit.M = 0;
    else UART1_CR1_bit.M = 1;
    switch(eParity) //奇偶校验设置
    {
        case MB_PAR_NONE:
            UART1_CR1_bit.PCEN = 0;
            break;
        case MB_PAR_ODD:
            UART1_CR1_bit.PCEN = 1;
            UART1_CR1_bit.PS = 1;
            break;
        case MB_PAR_EVEN:
            UART1_CR1_bit.PCEN = 1;
            UART1_CR1_bit.PS = 0;
            break;
        default:break;
    }
    UART1_CR2_bit.REN = 1; //使能接收
    UART1_CR2_bit.TEN = 1; //使能发送

    return TRUE;
}


  在这个函数中,要实现串口发送一字节数据的功能。代码实现如下:

BOOL xMBPortSerialPutByte( CHAR ucByte )
{
    /* Put a byte in the UARTs transmit buffer. This function is called
     * by the protocol stack if pxMBFrameCBTransmitterEmpty( ) has been
     * called. */
    UART1_DR = ucByte;
    return TRUE;
}


  在这个函数中,要实现串口接收一字节数据的功能。代码实现如下:

BOOL xMBPortSerialGetByte( CHAR * pucByte )
{
    /* Return the byte in the UARTs receive buffer. This function is called
     * by the protocol stack after pxMBFrameCBByteReceived( ) has been called.
     */
    *pucByte = UART1_DR;
    return TRUE;
}


  这个函数,从名称就可以看出是串口发送完成中断处理函数。由于在IAR中中断函数有特殊的写法,所以我们把这个函数连同函数名修改为如下代码:

#pragma vector= UART1_T_TC_vector
__interrupt void UART1_T_TC_IRQHandler(void)
{
    UART1_SR_bit.TC = 0;
    pxMBFrameCBTransmitterEmpty();
}


  同理,这个是串口接收完成中断处理函数。一样也是连同函数名一起修改:

#pragma vector=UART1_R_RXNE_vector
__interrupt void UART1_R_RXNE_IRQHandler(void)
{
    volatile uint8_t tmp;

    if(UART1_SR_bit.RXNE) {
        pxMBFrameCBByteReceived();
        UART1_SR_bit.RXNE = 0;
    }
    if(UART1_SR_bit.OR_LHE) {
        tmp = UART1_SR;
        tmp = UART1_DR;
    }
}

  至此,portserial.c文件中的所有接口都已实现完毕。

porttimer.c移植

  打开porttimer.c文件,里面同样是一些函数体为空的模板。首先在文件中需要包含头文件:#include "iostm8s003k3.h"。接下来开始porttimer.c的移植工作。


  这个函数用于初始化定时器,定时器的定时时间需要为50us。此定时器是FreeModbus用于判断数据包超时用的,这里使用stm8s的timer1作为超时定时器,晶振时频率为8MHz,如果时钟频率不同,需要自己修改分频和溢出数值。实现如下:

BOOL xMBPortTimersInit( USHORT usTim1Timerout50us )
{
    unsigned int period = 400-1;//分频系数

    TIM1_PSCRH = (uint8_t)(period >> 8);
    TIM1_PSCRL = (uint8_t)period;

    usTim1Timerout50us = usTim1Timerout50us-1;
    TIM1_ARRH = (uint8_t)(usTim1Timerout50us >> 8);
    TIM1_ARRL = (uint8_t)usTim1Timerout50us;

    TIM1_SR1_bit.UIF = 0; //清除更新标志
    TIM1_IER_bit.UIE = 1; //使能更新中断
    TIM1_CR1_bit.CEN = 1; //使能计数器

    return TRUE;
}


  这个函数用于使能定时器。实现代码如下:

inline void vMBPortTimersEnable(  )
{
    /* Enable the timer with the timeout passed to xMBPortTimersInit( ) */
    TIM1_SR1_bit.UIF = 0; //清除更新标志
    TIM1_IER_bit.UIE = 1; //使能更新中断
    TIM1_CNTRH = 0x00;
    TIM1_CNTRL = 0x00;  //计数器清零
    TIM1_CR1_bit.CEN = 1; //使能计数器
}


  这个函数用于关闭定时器。实现代码如下:

inline void vMBPortTimersDisable(  )
{
    /* Disable any pending timers. */
    TIM1_CR1_bit.CEN = 0; //关闭计数器
    TIM1_IER_bit.UIE = 0; //关闭更新中断
    TIM1_SR1_bit.UIF = 0; //清除更新标志
    TIM1_CNTRH = 0x00;
    TIM1_CNTRL = 0x00;  //计数器清零
}


  这个函数是定时器中断函数。连同函数名一同修改:

#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
{
    pxMBPortCBTimerExpired();
}

  至此,porttimer.c移植已经完毕。到这里,关于Modbus的移植的大部分工作已经完成。

回调函数移植

  在main.c(即源码中的demo.c)中已经提供了几个名为eMBRegxxxCB的回调函数。下面对函数参数和要实现的功能说明下:

UCHAR * pucRegBuffer:Modbus寄存器缓存。要写入的数据,可通过此指针传入。要响应的数据也通过此指针传出。

USHORT usAddress:Modbus协议中的寄存器地址。注意,usAddress会自动加一。比如要读取寄存器0,则实际usAddress会为1。

USHORT usNRegs:要操作的寄存器个数。

eMBRegisterMode eMode:操作模式。可以是读或写,即MB_REG_READ或MB_REG_WRITE。

  关于回调函数,大家根据自己的需要自行实现。只要把需要的回调函数实现好。全体移植工作就完成了。

热门标签

相关文档

文章说明

本站部分资源搜集整理于互联网或者网友提供,仅供学习与交流使用,如果不小心侵犯到你的权益,请及时联系我们删除该资源。

热门推荐

一键复制全文
下载