我正在为ARM Cortex M3(NXP LPC1769)微控制器开发软件.目前我正在寻找机制以检测我的功能是否在ISR中被调用.我认为我必须检查一个寄存器.基于这些信息,我想称之为困难的功能.
如果有一个包含必要信息的寄存器,我已经检查了参考手册.
例如,我试图根据"中断有效位寄存器"(IABR)寄存器检测我是否从ISR(我使用SysTick-ISR)调用.如果ISR处于活动状态,该寄存器应为!= 0.但值为0x00000000.这意味着没有中断处于活动状态.除了这个测试,我在参考手册中检查了NVIC和SC寄存器,搜索包含必要标志的寄存器,但我没有找到.
有没有人知道我的问题适合的注册/机制?
我在我的项目中使用git,它包含几个子项目.每个子项目使用git-subtree命令在主项目中"链接" .这是我在git中实现"svn externals"的方式.我几周以来一直在使用它,但是在每次提交期间,将我的更改从子树推送到远程位置的时间都会增加.当我使用命令推送更改时,它看起来像这样
git subtree push -P platform/rtos rtos master
git push using: rtos master
1/ 215 (0)2/ 215 (1)3/ 215 (2)4/ 215 (3)5/ 215 (4)6/ 215 (5)7/ 215 (6)8/ 215 (7)9/ 215 (8)10/ 215 (9)11/ 215 (9)12/ 215 (10)13/ 215 (11)14/
....
20 more lines
....
(204)209/ 215 (205)210/ 215 (206)211/ 215 (207)212/ 215 (208)213/ 215 (209)214/ 215 (210)215/ 215 (211)To https://github.com/rtos/rtos.git
64546f..9454ce 9a9d34c5656655656565676768887899898767667348590 -> master
Run Code Online (Sandbox Code Playgroud)
有没有办法"清理"子树,从而减少推动更改的时间?
我想在RAII的帮助下实现一个课程.资源应该在构造函数中获取,但是acquistition可能会失败.我将在下面使用FILE给出一个示例:
class file {
public:
file(const char* filename) {
file_ = fopen(filename, "w+");
if(!file_) {
// Okay
}
else {
// ERROR
}
}
~file() {
if (fclose(file_)) {
// ERROR
}
}
void write(const char* str) {
if (EOF == fputs(str, file_)) {
throw runtime_error("file write failure");
}
}
private:
FILE* file_;
};
Run Code Online (Sandbox Code Playgroud)
那么,如果fopen返回NULL,那么处理错误的最佳方法是什么?因为它是构造函数,所以我也无法返回NULL.
我希望有人能给我一个如何处理这些错误的提示!
谢谢您最好的问候,
闪光