侵权投诉

Python协程与JavaScript协程的对比及经验技巧

马哥Linux运维 2021-10-20 14:30 次阅读

前言以前没怎么接触前端,对 JavaScript 的异步操作不了解,现在有了点了解。一查发现 PythonJavaScript 的协程发展史简直就是一毛一样!这里大致做下横向对比和总结,便于对这两个语言有兴趣的新人理解和吸收。

共同诉求随着 cpu 多核化,都需要实现由于自身历史原因(单线程环境)下的并发功能

简化代码,避免回调地狱,关键字支持

有效利用操作系统资源和硬件:协程相比线程,占用资源更少,上下文更快

什么是协程?总结一句话,协程就是满足下面条件的函数:

可以暂停执行(暂停的表达式称为暂停点)

可以从挂起点恢复(保留其原始参数和局部变量)

事件循环是异步编程的底层基石

混乱的历史Python 协程的进化

Python2.2 中,第一次引入了生成器

Python2.5 中,yield 关键字被加入到语法中

Python3.5 中新增了 async/await 语法(PEP 492)

Python3.6 中 asyncio 库“转正” (之后的官方文档就清晰了很多)

在主线发展过程中,也出现了很多支线的协程实现如 Gevent。

deffoo():
print("foostart")
a=yield1
print("fooa",a)
yield2
yield3
print("fooend")


gen=foo()
#print(gen.next())
#gen.send("a")
#print(gen.next())
#print(foo().next())
#print(foo().next())

#在python3.x版本中,python2.x的g.next()函数已经更名为g.__next__(),使用next(g)也能达到相同效果。
#next()跟send()不同的地方是,next()只能以None作为参数传递,而send()可以传递yield的值.

print(next(gen))
print(gen.send("a"))
print(next(gen))
print(next(foo()))
print(next(foo()))

list(foo())

"""
foostart
1
fooaa
2
3
foostart
1
foostart
1
foostart
fooaNone
fooend
"""

JavaScript 协程的进化

  • 同步代码

  • 异步 JavaScript: callback hell

  • ES6 引入 Promise/a+, 生成器 Generators(语法function foo(){}* 可以赋予函数执行暂停/保存上下文/恢复执行状态的功能), 新关键词 yield 使生成器函数暂停。

  • ES7 引入 async函数/await语法糖,async 可以声明一个异步函数(将 Generator 函数和自动执行器,包装在一个函数里),此函数需要返回一个 Promise 对象。await 可以等待一个 Promise 对象 resolve,并拿到结果

Promise 中也利用了回调函数。在 then 和 catch 方法中都传入了一个回调函数,分别在 Promise 被满足和被拒绝时执行,这样就就能让它能够被链接起来完成一系列任务。总之就是把层层嵌套的 callback 变成 .then().then()...,从而使代码编写和阅读更直观。生成器 Generator 的底层实现机制是协程 Coroutine。
function*foo(){
console.log("foostart")
a=yield1;
console.log("fooa",a)
yield2;
yield3;
console.log("fooend")
}

constgen=foo();
console.log(gen.next().value);//1
//gen.send("a")//http://www.voidcn.com/article/p-syzbwqht-bvv.htmlSpiderMonkey引擎支持send语法
console.log(gen.next().value);//2
console.log(gen.next().value);//3
console.log(foo().next().value);//1
console.log(foo().next().value);//1

/*
foostart
1
fooaundefined
2
3
foostart
1
foostart
1
*/

Python 协程成熟体

可等待对象可以在 await 语句中使用,可等待对象有三种主要类型:协程(coroutine), 任务(task) 和 Future。

协程(coroutine)

  • 协程函数:定义形式为 async def 的函数;

  • 协程对象:调用 协程函数 所返回的对象

  • 旧式基于 generator(生成器)的协程

任务(Task 对象):

  • 任务 被用来“并行的”调度协程, 当一个协程通过 asyncio.create_task() 等函数被封装为一个 任务,该协程会被自动调度执行

  • Task 对象被用来在事件循环中运行协程。如果一个协程在等待一个 Future 对象,Task 对象会挂起该协程的执行并等待该 Future 对象完成。当该 Future 对象 完成,被打包的协程将恢复执行。

  • 事件循环使用协同日程调度: 一个事件循环每次运行一个 Task 对象。而一个 Task 对象会等待一个 Future 对象完成,该事件循环会运行其他 Task、回调或执行 IO 操作。

  • asyncio.Task 从 Future 继承了其除 Future.set_result() 和 Future.set_exception() 以外的所有 API。

未来对象(Future):

  • Future 对象用来链接 底层回调式代码 和高层异步/等待式代码。

  • 不用回调方法编写异步代码后,为了获取异步调用的结果,引入一个 Future 未来对象。Future 封装了与 loop 的交互行为,add_done_callback 方法向 epoll 注册回调函数,当 result 属性得到返回值后,会运行之前注册的回调函数,向上传递给 coroutine。

几种事件循环(event loop):

  • libevent/libev:Gevent(greenlet + 前期 libevent,后期 libev)使用的网络库,广泛应用;

  • tornado:tornado 框架自己实现的 IOLOOP;

  • picoev:meinheld(greenlet+picoev)使用的网络库,小巧轻量,相较于 libevent 在数据结构和事件检测模型上做了改进,所以速度更快。但从 github 看起来已经年久失修,用的人不多。

  • uvloop:Python3 时代的新起之秀。Guido 操刀打造了 asyncio 库,asyncio 可以配置可插拔的event loop,但需要满足相关的 API 要求,uvloop 继承自 libuv,将一些低层的结构体和函数用 Python 对象包装。目前 Sanic 框架基于这个库

例子

importasyncio
importtime


asyncdefexec():
awaitasyncio.sleep(2)
print('exec')

#这种会和同步效果一直
#asyncdefgo():
#print(time.time())
#c1=exec()
#c2=exec()
#print(c1,c2)
#awaitc1
#awaitc2
#print(time.time())

#正确用法
asyncdefgo():
print(time.time())
awaitasyncio.gather(exec(),exec())#加入协程组统一调度
print(time.time())

if__name__=="__main__":
asyncio.run(go())

JavaScript 协程成熟体

Promise 继续使用

Promise 本质是一个状态机,用于表示一个异步操作的最终完成 (或失败), 及其结果值。它有三个状态:
  • pending: 初始状态,既不是成功,也不是失败状态。
  • fulfilled: 意味着操作成功完成。
  • rejected: 意味着操作失败。
最终 Promise 会有两种状态,一种成功,一种失败,当 pending 变化的时候,Promise 对象会根据最终的状态调用不同的处理函数。

async、await语法糖

async、await 是对 Generator 和 Promise 组合的封装,使原先的异步代码在形式上更接近同步代码的写法,并且对错误处理/条件分支/异常堆栈/调试等操作更友好。

js 异步执行的运行机制

  1. 所有任务都在主线程上执行,形成一个执行栈。

  2. 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

  3. 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列"。那些对应的异步任务,结束等待状态,进入执行栈并开始执行。

遇到同步任务直接执行,遇到异步任务分类为宏任务(macro-task)和微任务(micro-task)。当前执行栈执行完毕时会立刻先处理所有微任务队列中的事件,然后再去宏任务队列中取出一个事件。同一次事件循环中,微任务永远在宏任务之前执行。

例子

varsleep=function(time){
console.log("sleepstart")
returnnewPromise(function(resolve,reject){
setTimeout(function(){
resolve();
},time);
});
};

asyncfunctionexec(){
awaitsleep(2000);
console.log("sleepend")
}

asyncfunctiongo(){
console.log(Date.now())
c1=exec()
console.log("-------1")
c2=exec()
console.log(c1,c2)
awaitc1;
console.log("-------2")
awaitc2;
console.log(c1,c2)
console.log(Date.now())
}

go();

event loop 将任务划分:

  • 主线程循环从"任务队列"中读取事件

  • 宏队列(macro task)js 同步执行的代码块,setTimeout、setInterval、XMLHttprequest、setImmediate、I/O、UI rendering等,本质是参与了事件循环的任务

  • 微队列(micro task)Promise、process.nextTick(node环境)、Object.observe, MutationObserver等,本质是直接在 Javascript 引擎中的执行的没有参与事件循环的任务

总结与对比

说明 python JavaScript 点评
进程 单进程 单进程 一致
中断/恢复 yield,yield from,next,send yield,next 基本相同,但 JavaScript 对 send 没啥需求
未来对象(回调包装) Futures Promise 解决 callback,思路相同
生成器 generator Generator 将 yield 封装为协程Coroutine,思路一样
成熟后关键词 async、await async、await 关键词支持,一毛一样
事件循环 asyncio 应用的核心。事件循环会运行异步任务和回调,执行网络 IO 操作,以及运行子进程。asyncio 库支持的 API 较多,可控性高 基于浏览器环境基本是黑盒,外部基本无法控制,对任务有做优先级分类,调度方式有区别 这里有很大区别,运行环境不同,对任务的调度先后不同,Python 可能和 Node.js 关于事件循环的可比性更高些,这里还需需要继续学习

到这里就基本结束了,看完不知道你会有什么感想,如有错误还请不吝赐教。

原文链接:https://www.cnblogs.com/lgjbky/p/14759463.html

编辑:jq

原文标题:Python 协程与 JavaScript 协程的对比

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

基于STM32的除以0运算话题

有人使用STM32G4系列芯片开发产品。他发现程序中如果遇到除以0的操作时,会跑进出错异常中断而影响....
发表于 12-04 14:06 0次 阅读
基于STM32的除以0运算话题

启明云端分享:一款基于瑞芯微PX30核心板的配套功能底板

概述IDO-EVB3022-V1.0是一款基于瑞芯微PX30核心板(我司核心板料号为IDO-SOM3....
发表于 12-04 12:51 0次 阅读
启明云端分享:一款基于瑞芯微PX30核心板的配套功能底板

关于STM32浮点运算单元FPU的小话题

有人利用STM32芯片做些DSP处理,在启用FPU单元进行调试、验证过程中可能会遇到些小问题、小困惑....
发表于 12-04 12:51 2次 阅读
关于STM32浮点运算单元FPU的小话题

raspberry pi Pico使用MicroPython变砖后的解决方法

使用raspberry pi Pico的原因在硬件产品(单片机)的开发中我们往往需要借助一些额外的仪....
发表于 12-04 12:51 4次 阅读
raspberry pi Pico使用MicroPython变砖后的解决方法

扒一扒中断为什么不能调printf?

前面说会写一下Modbus-RTU的实现,写了1000多字了,有兴趣的稍等一下哈。前面在一个群里看到....
发表于 12-04 12:21 2次 阅读
扒一扒中断为什么不能调printf?

扒一扒中断为什么不能调printf

[导读] 大家好,我是逸珺。前面说会写一下Modbus-RTU的实现,写了1000多字了,有兴趣的稍....
发表于 12-04 12:21 2次 阅读
扒一扒中断为什么不能调printf

解决串口传输“阻塞”问题的方案

关注、星标公众号,不错过精彩内容来源:嵌入式云IOT技术圈本文在探讨传统数据收发不足之后,介绍如何使....
发表于 12-04 11:51 2次 阅读
解决串口传输“阻塞”问题的方案

扒一扒中断为什么不能调printf

关注、星标嵌入式客栈,精彩及时送达[导读] 大家好,我是逸珺。前面说会写一下Modbus-RTU的实....
发表于 12-04 11:36 2次 阅读
扒一扒中断为什么不能调printf

NFC项目实验进展记录(二)

项目场景:NFC温度手环开发问题描述:是否需要MCU参与用户端 原因分析:MCU在NTAG I2C ....
发表于 12-04 11:36 2次 阅读
NFC项目实验进展记录(二)

单片机三种烧录方式ISP、IAP和ICP有什么不同?

关注+星标公众号,不错过精彩内容编排 |strongerHuang微信公众号 |嵌入式专栏学习单片机....
发表于 12-03 18:36 8次 阅读
单片机三种烧录方式ISP、IAP和ICP有什么不同?

A星路径规划算法完整代码资料汇总

A星路径规划算法完整代码资料汇总
发表于 12-03 17:16 5次 阅读

【单片机程序和RAM】程序在RAM中调试的运行方式&程序固化后运行方式

程序固化后运行方式: 程序开始运行后需要将RW 和ZI段搬移到RAM中去,程序下载进Flash中以....
发表于 12-03 15:21 6次 阅读
【单片机程序和RAM】程序在RAM中调试的运行方式&程序固化后运行方式

扒一扒中断为什么不能调printf

[导读] 大家好,我是逸珺。前面说会写一下Modbus-RTU的实现,写了1000多字了,有兴趣的稍....
发表于 12-03 14:51 3次 阅读
扒一扒中断为什么不能调printf

【IAR警告】 Fatal error: Failed to initialize device.   Session aborted!_liangchaoxi的IT博客_新浪博客......

警告:Wed Sep 21 03:16:21 2011: Fatal error: Failed t....
发表于 12-03 13:21 5次 阅读
【IAR警告】 Fatal error: Failed to initialize device.   Session aborted!_liangchaoxi的IT博客_新浪博客......

【IAR警告】 Fatal error: Failed to initialize device.   Session aborted!

警告:Wed Sep 21 03:16:21 2011: Fatal error: Failed t....
发表于 12-03 13:21 4次 阅读
【IAR警告】 Fatal error: Failed to initialize device.   Session aborted!

stm8单片机例程下载链接

在这篇文章中将自己上传的资源做一个下载链接的目录方便查找下载单片机解析字符串命令示例STM8单片机双....
发表于 12-03 12:06 12次 阅读
stm8单片机例程下载链接

工控机CPU双核和四核之间的区别是怎样的

工控机CPU有单核、双核、四核、六核、八核等几种常见类型,下面派勤电子主要给大家讲讲工控机双核CPU....
发表于 12-03 11:47 4次 阅读

新手指南丨FETT507-C核心板引脚功能修改指引

FETT507-C核心板CPU为四核Cortex-A53,1.5GHz主频;GPU为G31MP2;核....
的头像 栾新科 发表于 12-03 11:42 9次 阅读
新手指南丨FETT507-C核心板引脚功能修改指引

DevKit代码迁移工具主要功能介绍

本次直播介绍DevKit代码迁移工具通过自动扫描和分析待迁移代码,为应用从X86到鲲鹏平台的迁移提供....
的头像 华为计算 发表于 12-03 10:49 122次 阅读

基于鸿蒙分布式数据服务开发的聊天室应用

   之前给大家介绍过《HarmonyOS 分布式之仿抖音应用》,此次给大家介绍一下基于鸿蒙分布式数....
的头像 HarmonyOS技术社区 发表于 12-03 10:35 120次 阅读

【IAR下的汇编】IAR下的汇编/单片机启动代码汇编

原文: http://bbs.chinaunix.net/thread-3641855-1-1.h....
发表于 12-03 10:21 3次 阅读
【IAR下的汇编】IAR下的汇编/单片机启动代码汇编

HarmonyOS ArkUI 3.0框架试玩初体验

   HarmonyOS ArkUI 3.0 正式到来,今天就给大家分享一下我的 HarmonyOS....
的头像 HarmonyOS技术社区 发表于 12-03 10:14 145次 阅读

一款好用的鸿蒙系统上的权限请求框架

   桃夭是鸿蒙系统上的一款权限请求框架,对请求权限的代码进行高度封装,极大的简化了申请权限的代码逻....
的头像 HarmonyOS技术社区 发表于 12-03 10:10 142次 阅读

【IAR编译和单片机】IAR编译和单片机的一些积累

1、2012.4.12: IAR C编译器中如何选择才能不初始化片内RAM 程序复位不清除变量值....
发表于 12-03 10:06 3次 阅读
【IAR编译和单片机】IAR编译和单片机的一些积累

接上电就工作的单片机

对于手边的一盒STC单片机,测试一下它们使用相同的ISP方案在下载过程中是否都可以按照相同的方式完成....
发表于 12-03 10:06 2次 阅读
接上电就工作的单片机

鸿蒙滑动拼图验证组件分享 已开源

   基于安卓平台的滑动拼图验证组件 SwipeCaptcha,实现了鸿蒙化迁移和重构,代码已经开源....
的头像 HarmonyOS技术社区 发表于 12-03 10:04 144次 阅读
鸿蒙滑动拼图验证组件分享 已开源

盘点分布式软总线数据传输技术中的黑科技

作者:houweibo,软总线首席技术专家;lidonghua,软总线技术专家 随着万物互联时代的到....
的头像 HarmonyOS开发者 发表于 12-03 09:50 118次 阅读
盘点分布式软总线数据传输技术中的黑科技

单片机固件模块化架构设计资料分享

关注、星标嵌入式客栈,干货及时送达ID:嵌入式客栈作者:逸君[导读] 为什么写本文?最近遇到一些初学单片机的同学,刚刚入手做...
发表于 12-03 06:42 0次 阅读

C和C ++编程语言的区别是什么

单片机c语言+编程c语言C & C++ are computer programming languages that are used to write programs to communicate with co...
发表于 12-03 06:25 0次 阅读

工控机启动故障的简单处理方法

一、工控机接通电源能听见CPU风扇在转,但显示器却不亮,主板也没有报警的提示,如何处理? 工控机通电....
发表于 12-02 16:31 91次 阅读

单片机串口发送数据很慢?这种方法帮助你提高!

大家好,我是张巧龙,本文介绍如何使用带FIFO的串口来减少接收中断次数,通过一种自定义通讯协议格式,....
发表于 12-02 14:36 5次 阅读
单片机串口发送数据很慢?这种方法帮助你提高!

Graphcore公布最新MLPerf训练结果:AI性能再刷新高

在本轮或任何一轮MLPerf原始数据中,每个制造商系统相关的主机处理器数量都十分惊人,一些参与者甚至....
发表于 12-02 13:56 394次 阅读
Graphcore公布最新MLPerf训练结果:AI性能再刷新高

痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(3) - 统一FlexSPI驱动访问

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是超级下载算法开发笔记(3)之统一....
发表于 12-02 13:51 4次 阅读
痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(3) - 统一FlexSPI驱动访问

痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之SW Reset...

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT上使能NOR Fla....
发表于 12-02 12:51 7次 阅读
痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之SW Reset...

void 型指针的高阶用法,你掌握了吗?

关注+星标公众号,不错过精彩内容转自 | 嵌入式客栈要比较灵活的使用C语言实现一些高层级的框架时,需....
发表于 12-02 12:36 13次 阅读
void 型指针的高阶用法,你掌握了吗?

提高单片机设计的10个细节

前言1 干扰对单片机应用系统的影响1.1测量数据误差加大1.2 控制系统失灵1.3 影响单片机RAM....
发表于 12-02 12:06 13次 阅读
提高单片机设计的10个细节

痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件

--  痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2....
发表于 12-02 09:36 17次 阅读
痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.5)- 串行NOR Flash下载算法(IAR EWARM篇)...

  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是IAR开发环境下i.MXRT的串....
发表于 12-02 09:06 30次 阅读
痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.5)- 串行NOR Flash下载算法(IAR EWARM篇)...

单片机的显示方式有哪几种

对于单片机的显示方式有很多种:闪烁,交替,流水灯等等。但今天我做的就是流水灯,但实际上所用的代码都差不多,只有把显示方式...
发表于 12-02 07:53 0次 阅读

用单片机测试代码

用单片机测试以下代码,加解密OK;aes,c 文件#include "AES.h"#include #include //#include static const uint8_t S_BO...
发表于 12-02 07:04 0次 阅读

STM32是如何去实现对12V电压的检测呢

STM32是如何去实现对12V电压的检测呢?有哪位大神可以解答一下这个问题吗...
发表于 12-02 06:43 0次 阅读

单片机的万能语言是什么

毫无疑问,单片机的万能语言就是状态机,在嵌入式单片机编程中,也是我们常用的方法。在此之前,我曾分享过两种状态机的实现方法...
发表于 12-02 06:40 0次 阅读

求大神指教怎样在main.c中去增加一些代码呢

求大神指教怎样在main.c中去增加一些代码呢? ...
发表于 12-02 06:32 0次 阅读

如何编写控制LED灯的亮灭程序代码

【蓝桥杯单片机 控制LED灯电路经典程序】(2)接上篇:上一篇(1)中只介绍了控制LED灯的电路,138译码器打通573锁存器,锁...
发表于 12-02 06:23 0次 阅读

单片机点阵 l love you效果实现代码相关资料分享

#include "reg51.h"         #include typedef unsigned int uint;   typedef unsigne...
发表于 12-02 06:23 0次 阅读

stm32的代码区和常量区的地址分配在哪

stm32的代码区和常量区的地址分配在哪? stm32的全局变量和堆栈区的地址又分配在哪? ...
发表于 12-02 06:05 0次 阅读

STM32L0芯片FLASH编程示例及提醒

关注+星标公众号,不错过精彩内容来源|茶花MCU这里就STM32L053芯片的FLASH编程做个简单....
发表于 12-01 21:06 10次 阅读
STM32L0芯片FLASH编程示例及提醒

给电子类大学生一点求职建议

读大学的时候应该想清楚以后要干嘛,不然很可能要面对毕业即失业的窘境。每年近千万毕业生涌向社会,这个数....
发表于 12-01 20:06 10次 阅读
给电子类大学生一点求职建议

推荐 | 几个我星标的嵌入式公众号

小麦大叔 推荐一位我的好朋友的公众号:小麦大叔,号主麦叔,万粉号主。CSDN知名博客专家,万粉博主。....
发表于 12-01 20:06 9次 阅读
推荐 | 几个我星标的嵌入式公众号

多核CPU和单核的区别~

昨天有同学问我多核cpu和单核的区别大不大,今天简单写一篇回复下吧。大家有其他问题也可以文末给我留言....
发表于 12-01 20:06 9次 阅读
多核CPU和单核的区别~

PCB 设计布线 Cadence 20问

关注、星标公众号,不错过精彩内容来源:EDA365电子论坛Cadence Allegro现在几乎已成....
发表于 12-01 19:21 8次 阅读
PCB 设计布线 Cadence 20问

【正点原子Linux连载】第八章汇编LED灯试验--摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

【正点原子Linux连载】第八章汇编LED灯试验--摘自【正点原子】I.MX6U嵌入式Linux驱动....
发表于 12-01 19:21 12次 阅读
【正点原子Linux连载】第八章汇编LED灯试验--摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

给电子类大学生一点求职建议

‍读大学的时候应该想清楚以后要干嘛,不然很可能要面对毕业即失业的窘境。每年近千万毕业生涌向社会,这个....
发表于 12-01 19:06 11次 阅读
给电子类大学生一点求职建议

STM32F4时钟触发ADC双通道采样DMA传输进行FFT+测频率+采样频率可变+显示波形(详细解读)...

此文转载自:https://blog.csdn.net/qq_45620831/article/de....
发表于 12-01 18:06 7次 阅读
STM32F4时钟触发ADC双通道采样DMA传输进行FFT+测频率+采样频率可变+显示波形(详细解读)...

怎么样判断工控机是否需要重新装系统呢?

工控机在使用过程中,用户误删了系统文件,导致工控机某项功能出现了异常;工控机遭到病毒木马的入侵,导致....
发表于 12-01 16:45 151次 阅读

新唐单片机代码评审总结

昨晚上,我们一个同事组织了一个小会议,大家一起讨论了一个项目的单片机代码,这个单片机用的是新唐单片机....
发表于 12-01 16:06 8次 阅读
新唐单片机代码评审总结

单片机为什么叫单片机

单片机之所以叫单片机,是因为单片机芯片把CPU、数据存储器、程序存储器、总线系统都集成到了一个芯片上....
发表于 12-01 15:51 14次 阅读
单片机为什么叫单片机

1.单片机和嵌入式的关系(3)

单片机和嵌入式的关系什么是单片机?什么是嵌入式单片机和嵌入式的核心差异单片机和嵌入式的相同点单片机和....
发表于 12-01 15:51 13次 阅读
1.单片机和嵌入式的关系(3)

嵌入式CPU、单片机数组、结构体内存溢出问题

嵌入式、单片机等硬件软件开发中,经常会用到结构体或者数组,但是在调试中我们经常会发现数组或者结构体变....
发表于 12-01 15:51 4次 阅读
嵌入式CPU、单片机数组、结构体内存溢出问题

TMS320VC5501 定点数字信号处理器

TMS320VC5501(5501)定点数字信号处理器(DSP)基于TMS320C55x™DSP生成CPU处理器内核。 C55x™DSP架构通过增加并行性和全面关注降低功耗来实现高性能和低功耗。 CPU支持内部总线结构,该结构由一个程序总线,三个数据读总线,两个数据写总线以及专用于外设和DMA活动的附加总线组成。这些总线能够在一个周期内执行最多三次数据读取和两次数据写入。并行,DMA控制器可以独立于CPU活动执行数据传输。 C55x™CPU提供两个乘法累加(MAC)单元,每个单元能够进行17位×17位乘法运算。单循环。额外的16位ALU支持中央40位算术/逻辑单元(ALU)。 ALU的使用受指令集控制,提供优化并行活动和功耗的能力。这些资源在C55x CPU的地址单元(AU)和数据单元(DU)中进行管理。 C55x DSP代支持可变字节宽度指令集,以提高代码密度。指令单元(IU)从内部或外部存储器执行32位程序提取,并为程序单元(PU)排队指令。程序单元解码指令,将任务指向AU和DU资源,并管理完全受保护的管道。预测分支功能可避免执行条件指令时的管道刷新。 5501外设...
发表于 10-09 14:55 411次 阅读
TMS320VC5501 定点数字信号处理器