我有以下规则
define compile_c
$(ECHO) "CC $<"
$(Q)$(CC) $(CFLAGS) -c -MD -o $@ $<
@# The following fixes the dependency file.
@# See http://make.paulandlesley.org/autodep.html for details.
@# Regex adjusted from the above to play better with Windows paths, etc.
@$(CP) $(@:.o=.d) $(@:.o=.P); \
$(SED) -e 's/#.*//' -e 's/^.*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $(@:.o=.d) >> $(@:.o=.P); \
$(RM) -f $(@:.o=.d)
endef
vpath %.c . $(TOP)
$(BUILD)/%.o: %.c $(BUILD)/%.pp
$(call compile_c)
vpath %.c . $(TOP) …Run Code Online (Sandbox Code Playgroud) 环境:C和micropython虚拟机中的协作RTOS是其中的任务之一.
为了使虚拟机不会阻止其它RTOS的任务,我插入RTOS_sleep()的vm.c:DISPATCH(),这样,每次执行字节码后,虚拟机放弃控制到下一个RTOS任务.
我创建了一个uPy接口,使用生产者 - 消费者设计模式从物理数据总线异步获取数据 - 可以是CAN,SPI,以太网.
在uPy中的用法:
can_q = CANbus.queue()
message = can_q.get()
Run Code Online (Sandbox Code Playgroud)
C中的实现can_q.get()不会阻止RTOS:它轮询C队列,如果没有收到消息,它会调用RTOS_sleep()给另一个任务填充队列的机会.事物是同步的,因为C队列仅由另一个RTOS任务更新,而RTOS任务仅在RTOS_sleep()被调用时切换,即协作
C实现基本上是:
// gives chance for c-queue to be filled by other RTOS task
while(c_queue_empty() == true) RTOS_sleep();
return c_queue_get_message();
Run Code Online (Sandbox Code Playgroud)
尽管Python语句can_q.get()不会阻止RTOS,但它会阻止uPy脚本.我想重写它,所以我可以使用async defie coroutine并让它不阻止uPy脚本.
不确定语法,但这样的事情:
can_q = CANbus.queue()
message = await can_q.get()
Run Code Online (Sandbox Code Playgroud)
题
如何编写C函数以便我可以await使用它?
我更喜欢CPython和micropython的答案,但我会接受仅限CPython的答案.
我安装哪个cygwin软件包来获取parallel命令?
有时候我是grep成千上万的文件,看到某种进展(条形或状态)会很高兴.
我知道这不是一件容易的事,因为grep将搜索结果输出到STDOUT,我的默认工作流是我将结果输出到文件,并希望将进度条/状态输出到STDOUT或STDERR.
这需要修改源代码grep吗?
理想的命令是:
grep -e "STRING" --results="FILE.txt"
和进展:
[curr file being searched], number x/total number of files
Run Code Online (Sandbox Code Playgroud)
写入STDOUT或STDERR
我有一个.map名为的文件a.out.map是从.cpp/ .obj文件创建但我不记得如何.我已经包含了一个片段:
.plt 0x0000380c 0x848
*(.plt)
.plt 0x0000380c 0x848 C:/QNX650/target/qnx6/armle-v7/lib/crti.o
.text 0x00004054 0x5448
0x00004054 _btext = .
*(.text .stub .text.* .gnu.linkonce.t.*)
.text 0x00004054 0x0 C:/QNX650/target/qnx6/armle-v7/lib/crti.o
.text 0x00004054 0xf4 C:/QNX650/host/win32/x86/usr/lib/gcc/arm-unknown-nto-qnx6.5.0eabi/4.4.2/pic//crtbegin.o
.text 0x00004148 0x1b3c C:\Temp\2qccTulUdb\eventlookupmodel.o
0x00004b80 AL2HMIBridge::EventLookupModel::data(QModelIndex const&, int) const
0x000054f8 AL2HMIBridge::EventLookupModel::rowCount(QModelIndex const&) const
0x000046a8 AL2HMIBridge::EventLookupModel::getNameFromId(unsigned int, unsigned int)
0x00004148 AL2HMIBridge::EventLookupModel::EventLookupModel(AL2HMIBridge::CsvImporter&, QObject*)
0x00004738 AL2HMIBridge::EventLookupModel::getElementFromId(unsigned int, unsigned int)
0x00004ab4 AL2HMIBridge::EventLookupModel::getElementFromName(QString const&)
0x00005548 AL2HMIBridge::EventLookupModel::appendElement(AL2HMIBridge::EventLookupModel::EventElement const&)
0x00005804 AL2HMIBridge::EventLookupModel::appendElement(QString const&, unsigned int, unsigned int, QList<
Run Code Online (Sandbox Code Playgroud)
什么是生成.map文件的gcc命令?
我需要检测给定的函数是否已使用一组特定的参数被精确调用一次。
EXPECT_CALL(Mock_Obj, func("abc")).Times(1)
但是可以使用不同的参数多次调用该函数。
我该如何表达?
在 Github 中,我使用左上角的搜索窗口在存储库中进行搜索。
我知道最好的方法是下载代码并搜索,但有时我无法这样做。
问题
如何将搜索限制在特定文件夹内?
最新版本make有一个选项--output-sync,可以使每个目标的STDOUT成为原子,以便在使用时不会交错多个目标的语句make --jobs=N
不幸的是,我必须使用,make v 3.81因为这是我们的SDK附带的那个.
为了确定我是否需要--output-sync,我在目标周围添加了一些"保护声明"
all: $(patsubst %.cpp, %.o, $(wildcard *.cpp))
%.o: %.cpp
@echo BEFORE
@echo MAKEFLAGS=$(MAKEFLAGS)
qcc.exe $(CC_FLAGS) $@ $<
@echo AFTER
Run Code Online (Sandbox Code Playgroud)
输出非常交错.
AFTER
BEFOREAFTER
AFTER
AFTER
Run Code Online (Sandbox Code Playgroud)
有没有办法模拟--output-sync功能?
据我所知,如果有一种方法可以"锁定STDOUT mutex"预配方并在配方后释放它,那么构建速度可能会受到影响.
我很好修改我们的每个目标,如果这是它需要的.
如果有的话有什么区别?
例如:int operator()与operator int()
我正在寻找“官方”C++ 文档的答案。
c++ ×4
bash ×2
github ×2
gnu-make ×2
makefile ×2
async-await ×1
c ×1
coroutine ×1
cygwin ×1
gcc ×1
gmock ×1
googlemock ×1
googletest ×1
grep ×1
linux ×1
micropython ×1
python ×1
qnx ×1
unit-testing ×1