我正在使用git-subtree(来自Avery Pennarun).在我目前的git repo中,我当然拥有所有项目文件/文件夹和一个名为"lib"的子树.如果我现在克隆这个git repo使用git clone
我得到所有的项目文件和子树"lib"(一切都应该是).我现在尝试了:我在克隆的repo中的子树"lib"中更改了一些东西并试图将更改推回到子树"lib"的远程仓库中
git subtree push
,但是它没有用.问题是什么?我是否必须首先使用git子树添加将其添加为子树?
Thx提前
我目前正在开发一个使用ARM Cortex M3微控制器和FreeRTOS作为系统操作系统的嵌入式项目.代码是由一位前同事编写的,遗憾的是该项目有一些奇怪的错误,我必须尽快找到并修复.
简短说明:该设备集成到车辆中,并使用集成调制解调器向远程服务器发送一些"特殊"数据.
主要问题:由于设备集成在车辆中,设备的电源可能随时丢失.因此,设备将"特殊"数据的某些部分存储到两个保留的闪存页面.此代码模块在两个闪存页面上作为eeprom仿真进行布局(用于从一个闪存页面到另一个闪存页面的耗损均衡和数据传输).eeprom仿真与所谓的"虚拟地址"一起使用,您可以在其中将任意大小的数据块写入当前活动/有效的闪存页面,并使用这些虚拟地址将其读回.前同事将eeprom仿真实现为多任务模块,您可以从应用程序中的每个任务读取/写入闪存页面.乍一看,一切似乎都很好.
但是我的项目经理告诉我,设备总是会丢失一些"特殊"数据,车辆中的电源电压下降到几伏,设备会尝试将数据保存到闪存中.通常电源大约为10-18伏,但如果电压降至7伏以下,则设备会收到一个被调用的中断powerwarn
,并触发一个叫做的任务powerfail task
.它powerfail task
具有所有任务的最高优先级,并执行一些回调,例如调制解调器关闭,以及"特殊"数据存储在闪存页面中.我试着理解代码并调试了几天/几周,现在我很确定我发现了问题:
在powerfail任务执行的那些回调(称为powerfail回调)中,有RTOS调用,其他任务被暂停.但不幸的是,那些被填充的任务也可能EEPROM_WriteBlock()
在接收到电源警告中断之前有一个未完成的呼叫.因此,powerfail任务执行回调,并且在其中一个回调中有一个EE_WriteBlock()
调用,其中任务无法接受互斥锁,EE_WriteBlock()
因为另一个任务(已暂停)已经采取了 - >死锁!
这是将数据写入闪存的例程:
uint16_t
EE_WriteBlock (EE_TypeDef *EE, uint16_t VirtAddress, const void *Data, uint16_t Size)
{
.
.
xSemaphoreTakeRecursive(EE->rw_mutex, portMAX_DELAY);
/* Write the variable virtual address and value in the EEPROM */
.
.
.
xSemaphoreGiveRecursive(EE->rw_mutex);
return Status;
}
Run Code Online (Sandbox Code Playgroud)
当调用'xSemaphoreTakeRecursive()'时,这是RTOS特定的代码:
portBASE_TYPE xQueueTakeMutexRecursive( xQueueHandle pxMutex, portTickType xBlockTime )
{
portBASE_TYPE xReturn;
/* Comments regarding mutual exclusion as per those …
Run Code Online (Sandbox Code Playgroud) 这是我简单的dojo示例:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dijit/themes/dijit.css">
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dijit/themes/claro/claro.css">
<title>ShowMovies </title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" data-dojo-config="isDebug: false, async: true, parseOnLoad: true" src="http://ajax.googleapis.com/ajax/libs/dojo/1.9.2/dojo.js"></script>
<script type="text/javascript">
require(
[ "dojo", "dojo/parser", "dijit/layout/BorderContainer",
"dijit/layout/ContentPane", "dojox/grid/DataGrid",
"dojo/data/ItemFileReadStore" ],
function(dojo) {
dojo.ready(function() {
dojo.xhrGet( {
url : "MovieList.json",
handleAs : "json",
load : function(response, ioArgs) {
var newData = {
identifier: "title",
items: response.result
};
var dataStore = new dojo.data.ItemFileReadStore({data: newData, id:"dataStoreId"});
var grid = …
Run Code Online (Sandbox Code Playgroud) 我在parse()函数中找不到问题.简介:我从终端程序发送"boot\r \n",调用parse()函数,strncmp(缓冲区,"boot",4)永远不会进入if分支?此刻,我看不到树木的木材.之后,从parse()函数返回的字符串将被提供给remove_cr_lf_chars()函数.我需要删除这些字符才能将字符串与图像名称进行比较,当然这些字符没有任何'\ r'或'\n'字符.
static char *parse(void)
{
static char buffer[100];
char *p = buffer;
char c;
do {
while (!(USART1->SR & USART_FLAG_RXNE));
*p++ = c = ((char)USART1->DR);
} while (c != '\r' && p-buffer < sizeof buffer-1);
*p = '\0';
if (strncmp(buffer, "boot", 4))
{
p = buffer+4;
/* skip to argument, p might point to '\0' if none */
while (*p != '\0' && (*p == ' ' || *p == '\r')) p++;
return p;
}
return NULL;
} …
Run Code Online (Sandbox Code Playgroud)