自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 接劳巴,拔掉KL15,MCU重启。不接劳巴,拔掉KL15,MCU正常下电

在当前的状态管理中,监测到KL15断开后,SWC会清除唤醒事件POWER,并调用RTE接口将状态切换到POST_RUN,选择的Shutdown Target为ECU_SHUTDOWN_TARGRT_OFF,而不是ECU_SHUTDOWN_TARGRT_RESET。那么看来就是在这里设置了不是POWER的源,而状态管理的SWC只清除了POWER源,下电流程中判断到还有唤醒源事件没有清除,就将Shutdown Target改成了RESET。所以下电的时候,RESET源没有被清除,就走了重启的流程。

2024-03-29 21:25:16 827

原创 汽车VBF格式文件详解---使用python解析VBF文件

将file.read()后,调用熟悉的库函数(例如binascii等)转换成bytes或者str类型,那么数据从起始就是data block的start address(4bytes),length(4bytes),data,crc16(2bytes),按照顺序遍历提取即可。因为vbf文件格式是二进制文件,所以在open的时候,需要使用rb参数,extract_header_body在处理完file后,就把header截取掉了,所以我们接着使用file,file的起始就是data段。

2024-03-29 21:24:06 1838

原创 汽车VBF格式文件详解---HEX文件转成VBF文件

在安装完VBF转换工具后,文件夹里面附带了使用命令行脚本转换的的demo。其中配置文件的后缀为.VBB,我们按照模板将自己的需求填入到里面,一般需要配置源地址,目的地址,SwType,ECUaddr,Compressed等属性。OEM会提供VBF转换工具,如果使用UI界面转换的话,只要按照手册将配置信息填入即可。在加签的时候,也需要手动在命令行通过调用exe文件,并输入相关参数,就可以生成加签后的VBF了。配置完VBB文件后,新建一个.bat,就可以写命令了。当然,这些都是可以通过脚本自动化转换的。

2024-03-29 21:23:30 2460

原创 VBF格式文件详解---VBF格式解析

Tier1将加了研发签的VBF释放给OEM后,OEM会再加一个生产签 sw_signature,也就是说一个VBF文件会有两个签名值,即一个研发签名值,一个生产签名值。Tier1在转换VBF的时候,使用研发私钥给VBF加签,研发私钥由OEM给出,研发私钥对应的解签用的研发公钥也是由OEM给出,研发公钥固化在MCU内部。在刷写MCU时,刷写流程中的Check Memory会附带研发签名值的明文,MCU收到签名值后,结合研发公钥 和 已经刷到Flash的数据一起,验证刷写文件的完整性和合法性。

2024-03-29 21:22:56 4793 3

原创 RTOS介绍------十、Multicore Systems

Concepts在Recommended Readingintroduction-to-rtos-solution-to-part-12-multicore-systems:https://www.digikey.com/en/maker/projects/introduction-to-rtos-solution-to-part-12-multicore-systems/369936f5671d4207a2c954c0637e7d50ESP-IDF FreeRTOS SMP Changes: ht

2022-02-01 19:56:15 1086

原创 RTOS介绍------九、Priority Inversion

Concepts优先级反转是一个bug,表现为 高优先级的task被低优先级的task间接抢占。例如,低优先级的task占用着某个mutex,高优先级的task就必须等待 才能继续执行。简单case:高优先级的task(Task H)会被阻塞,只要低优先级的task(Task L)拿着lock。这被称作“有界优先级反转”,因为优先级反转的时长 和低优先级task在临界区(hold the lock)的时长 相关。上图可以看出,只要Task L 拿着lock,Task H 就会一直被阻塞 。tasks

2022-01-28 22:02:22 754

原创 RTOS介绍------八、Deadlock and Starvation

Concepts想象一下 5 位哲学家坐在一张圆桌旁,桌子中间放着一碗面条。 一根筷子夹在每个哲学家之间。 哲学家只有拿着两根筷子才能吃饭。 吃完后,他们放下筷子,让另一个哲学家吃。需要想出一个办法让所有的哲学家都有机会吃饭。 这是对 Edsger Dijkstra 在 1965 年向他的计算机科学专业学生提出的经典哲学家就餐问题的描述。这是一个类比,用于演示多线程系统中的饥饿和死锁。 哲学家就像任务(或线程)试图使用共享资源(一碗面条)执行某些工作。 筷子类似于在访问共享资源之前需要的锁(信号量或互

2022-01-25 22:17:29 432

原创 RTOS介绍------七、Hardware Interrupts

Concepts硬件中断是许多嵌入式系统的重要组成部分。 它们允许事件异步发生(不作为任何执行程序的一部分)并通知 CPU 它应该采取一些行动。 这些类型的中断会导致 CPU 停止它正在做的任何事情并执行一些其他功能,称为“中断服务程序”(ISR)。此类硬件中断可能包括按钮按下(输入引脚电压变化)、硬件计时器到期或通信缓冲区被填充等事件。在大多数 RTOS(包括 FreeRTOS)中,硬件中断的优先级高于任何任务(除非我们故意禁用硬件中断)。使用硬件中断时,需要记住的事项很少。首先,ISR 永远不

2022-01-24 22:22:18 504

原创 RTOS介绍------六、Software Timers

Concepts定时器(在嵌入式系统中)允许我们延迟某些功能的执行或定期执行某个功能。这些可以是架构独有的硬件计时器,也可以是基于某些运行代码或 RTOS tick计时器的软件计时器。注意,一些硬件定时器还允许我们在完全无需软件干预的情况下控制一些硬件功能。在 FreeRTOS 中,有几种方法可以延迟函数的执行:vTaskDelay() 允许我们将当前运行的任务阻塞一段时间(以tick为单位)。您还可以通过将 xTaskGetTickCount() 与某些已知时间戳进行比较来执行非阻塞延迟。许

2022-01-24 22:03:54 570

原创 RTOS介绍------五、信号量 semaphore

Concepts在编程中,信号量是一个变量,用于控制 多线程或多进程 对 共享资源的访问。它类似于互斥锁,因为它可以阻止其他线程访问共享资源或临界区。但是,mutex意味着对锁拥有所有权(即 在临界区执行时,单个线程被称为拥有锁),信号量则是计数器,它可以允许多个线程进入临界区。理论上讲,信号量是一个共享的counter,可以做原子级别的加减(PV操作)。例如,上图中Task A,B,C都想进入临界区。每个Task都调用了semaphoreTake(),使得信号量计数减1.这时,这三个task都在临

2022-01-22 23:42:24 2085

原创 RTOS介绍------四、互斥 mutex

Conceptsmutex类似一个flag或者一个lock,用来限制一次只能有一个线程访问某块代码。它会拦住访问代码或者资源的所有其他线程。这确保任何在临界区执行的代码是线程安全的,不会被其他线程破坏。mutex就像放在咖啡店篮子里的唯一一把钥匙。 该钥匙可用于解锁共用的公共厕所。一个人在他们希望使用共享资源(洗手间)时拿走钥匙,并在完成后归还。 当他们在洗手间时,其他人不得进入。 其他人(类似于线程)必须等待密钥。 当它被归还时,另一个人可能会拿走厕所的钥匙。...

2022-01-20 21:41:42 869

原创 RTOS介绍------三、队列

实时操作系统 (RTOS) 中的队列是一个内核对象,它能够在任务之间传递信息,而不会引起其他任务的覆盖或进入竞争条件。 队列是先进先出 (FIFO) 系统,其中项目在读取后从队列中删除。Concepts大多数多线程操作系统提供了许多内核对象,这些对象有助于在线程之间创建线程安全的通信。 这些对象包括队列、互斥体和信号量。队列是具有原子读写的简单 FIFO 系统。 “原子操作”是指在执行过程中不能被其他任务中断的操作。 这确保了另一个任务在预期目标读取数据之前无法覆盖我们的数据。在此示例中,任务 A

2022-01-19 23:17:04 812

原创 RTOS介绍------二、内存管理

ConceptsRAM通常分为Stack区,Heap区和 Static区。全局静态区用来放 全局变量和static变量。栈区放 局部变量。栈内存被设计成先入后出系统,即在调用一个函数时,这个函数的局部变量被压入栈。在前一个函数return时,变量被pop出,函数可以接着运行。堆区一定是由程序员显式分配,即动态分配。因为C语言没有垃圾回收机制,所以不再使用的时候一定要手动释放。不释放的话会造成内存泄漏,引起未知反应例如损坏内存其他部分。在大多数系统中,栈和堆都是相向增长,占用未被分配的内存。如果不

2022-01-17 23:01:07 1068 6

原创 RTOS介绍------一、任务的状态,优先级,调度

Task Scheduling

2022-01-16 21:33:11 3475

原创 一组数分两组,差值最小

不需要平均分递归:在这里插入代码片```class Solution: def balance(self, candidates): res = [] cur = [] length = len(candidates) for i in range(1, length+1): self.back(candidates, 0, cur, res, i) return min(res)

2020-11-11 08:01:15 1270

原创 10个数平均分两组,差值最小

10个球员准备分两队进行训练赛,教练希望两个队战斗力差值能尽可能小,以达到最佳的训练效果。输入:10个队员的战斗力,如[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]输出:最小的战斗力差值,如:1用递归解决:class Solution: def balance(self, candidates): res = [] cur = [] self.back(candidates, 0, cur, res) ret

2020-11-11 07:41:43 5428

原创 CSS片段

1.优先级内联 > ID选择器 # > 类选择器 . > 标签选择器2.三角形CSS绘制三角形—border法<!DOCTYPE html><html lang="en"><head> <title>Document</title> <style type="text/css"> div { width: 0px; heig

2020-11-02 23:29:13 174

原创 JS代码片段

参考:32个手写JS,巩固你的JS基础(面试高频)01 数组扁平化const arr = [1, [2, [3, [4, 5]]], 6];// => [1, 2, 3, 4, 5, 6]const res1 = JSON.stringify(arr).replace(/\[|\]/g, '').split(',')// [ '1', '2', '3', '4', '5', '6' ]const res2 = JSON.parse('[' + JSON.stringify(arr).r

2020-10-27 21:12:56 175

原创 JavaScript知识架构

文章目录前言1. 运行时1.1 数据结构1.1.1 类型1.1.2 实例1.2 执行过程(算法)2.文法3.语义前言参考《[重学前端](https://time.geekbang.org/column/article/77804)》整理。用一定的词法或语法,表达一定的语义,从而操作运行时。1. 运行时1.1 数据结构1.1.1 类型对象1.1.2 实例应用和机制1.2 执行过程(算法)时间循环微任务执行函数执行语句级的执行2.文法词法语法3.语义...

2020-10-18 22:23:13 356

原创 React部署deploy项目到github上线

https://create-react-app.dev/docs/deployment/使用react脚手架npx create-react-app my-app创建的工程,部署到github。1.生成部署网站链接github项目的setting往下翻,点master,然后save,生成链接如下:2.修改package.json两个地方 "scripts": {+ "predeploy": "npm run build",+ "deploy": "gh-pages -d bui

2020-09-23 22:55:39 503

原创 结合js语言特性举例,说出2种以上设计模式的核心思想,和基础实现。

如何理解这6种常见设计模式?

2020-09-10 22:59:53 290

原创 举例说明class继承与组合寄生继承的差别

class

2020-09-10 22:36:16 629

原创 前端JS实现二分查找,左右边界查找

var binary_search = function (nums, target) { var left = 0, right = nums.length - 1; while (left <= right) { var mid = left + parseInt((right - left) / 2); if (nums[left] < target) { left = mid + 1; } else

2020-08-29 12:13:51 306

原创 JS作用域和作用域链

https://blog.youkuaiyun.com/qappleh/article/details/80311443作用域JS局部作用域一般只在固定的代码片段内可访问到,而对于函数外部是无法访问的:function fn(){ var innerVar = "inner";}fn();console.log(innerVar);// Uncaught ReferenceError: innerVar is not defined看这两段代码: var scope = "global";.

2020-08-09 00:01:53 162

原创 Mac的sql8出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

数据库版本:8.0.19执行./mysql -u root -p报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)方法:1.苹果->系统偏好设置->最下面点mysql,关闭mysql服务2.在终端cd /usr/local/mysql/bin/...

2020-04-12 22:58:29 719

原创 Autosar Classic Platform R4.4

1

2020-03-05 20:46:33 454

原创 AUTOSAR_SRS_FunctionInhibitionManager

功能抑制管理模块 软件需求标准规范1 Scope of document这份文件定义了FIM模块的功能需求

2020-03-03 22:17:49 617

原创 VMware Fusion网络适配器模式不能更改

网络适配器这里是灰的,不能更改配置模式实际在上面的栏里,虚拟机-》网络适配器-》更改想要的模式

2019-09-24 20:12:43 3328 5

原创 vi 新建文件保存文件时遇到的问题:E212: Can't open file for writing

网上有说是权限的问题 我遇到的文件名导致的 我的文件名是 intro/day.c 时不能保存 改成 intro_day.c 即可

2018-09-03 10:09:04 3242

thirsty for thirty_刘功勋

刘功勋,美国卡耐基梅隆大学计算机工程硕士,曾任北京新东方北美部托福口 语教师,北美精英计划规划师,托福口语满分,著《机经小册子》《Thirsty for Thirty -托福口语素材大全》,现致力于利用一切现有手段改善学习体验。

2017-09-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除