关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7685|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& c2 }/ T8 }0 d) v* B* Z
# J5 E) M. \- C; ?    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; {  t  w2 G6 p% j# z

5 Z3 G, @( @, b+ v4 E6 C. H1 G其他程序段。。。。。- i# Q7 Q7 B0 U* i' s6 p( p

/ S/ Y% n" a0 @. d2 g# _  m4 L   free(x_d);
6 Y; G1 x; \' o
4 _5 I8 a0 y. i$ D/ f使用DSP侧单独调试功能,验证动态申请没有问题,
4 k4 ]$ K  K5 d) Q+ c: F0 }2 s" @+ t6 m, A8 F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 h! K* P4 g, ]' i9 B  g! i
& ?' r  q1 C0 o/ _# z" |
5 s3 j9 k: j' {5 _5 D  o

9 e4 ^, F$ O" A
/ @6 n) ?& T4 l% P) F5 Z" m$ R6 n. _( l6 l' f- i

" d% g. s2 x# l. R& }! Z: O/ B5 o: G6 r1 K" E/ s
' q* a5 r- Q% m+ t/ W+ Z5 R9 T9 {

" }6 k$ j$ _$ p4 n, a
) S! I4 {% p7 m0 @- g* I# ]4 w) b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 `/ H( r7 L; K8 p' ?我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) X7 y, G, ^5 N6 z. h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# Y) j, j# O+ X( J3 `; l

8 L7 }$ ]- J' y' {, [: T+ h, w, y是不是需要在DSP.CFG中进行配置
( M3 F1 _" J& f5 b7 A$ w我现在的配置为
2 l- E8 T0 |. n$ u* b" Q5 `
: F! N' z! X3 n; Y/*
, s8 ^8 |3 L4 P3 s: ^9 b *  ======== Operating System Configuration ========
1 r3 v1 x; Q* {& w) S: H; g/ e# j */
5 [. N& ]. U; _/ I( B( L! z+ ]0 V3 Y9 S
/* no rts heap */* ~' ]8 @; t2 d( z* K+ n; K, I
Program.heap = 0;! j2 `, E* P' I1 x: R
Program.argSize = 100;  /* minimum size */
8 X3 z; o$ o2 y5 @" j1 j& ?Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 Y  k( D0 z8 |; z2 o- x! j9 V9 L# j4 i
/* create a default heap */
, D( L" Y9 _* r& a9 J& {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: s1 _& n6 \; ?+ Vvar heapMemParams = new HeapMem.Params();5 a+ w1 {7 |; h: Q5 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
/ i  p" d; ~. e$ ]6 B: c
) d# n) C. {1 z
var Memory = xdc.useModule('xdc.runtime.Memory');  V( z+ [8 u$ X/ V, s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* v" K3 y( s7 l  v2 [( h4 {! R
) S; T0 H  d, W) ^! Y& {4 o1 I
/* configure System module */# ]8 d( w% O- k5 r4 `& g6 z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: M3 Y0 _+ E. v/ U! Y3 ]SysMin.bufSize = 0x1000;  Z+ ]0 M( g, j# y( ?# B
SysMin.flushAtExit = false;- i- V5 r4 p! u( w( E, t- z2 v
2 d* I$ F8 c9 F0 h
var System = xdc.useModule('xdc.runtime.System');$ d8 R4 Y' K. c' T
System.SupportProxy = SysMin;
4 Q2 P2 Y* I6 X- A4 {0 L' k1 W1 Q; }) h
/* configure SysBios to use the lower half of Timer 1 */; {3 ^' p# K8 g' g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 M8 K1 D  `. a# W4 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');' [0 y0 g# ]- i. Z# ~
Timer.timerSettings[1].master = true;
' a* f. ]: j7 O/ O& ?5 N) O* hTimer.defaultHalf = Timer.Half_LOWER;  o. ]/ G" F3 ?# y0 x; c( V. m
Clock.timerId = 1;
7 O4 r0 D$ b% O) E$ O( J- u! a6 J( ~  y$ F) i
* m& B% e: }/ g) V# F4 H
/*
% U3 M; |; y7 |  q- }5 Q2 ~6 @3 ~ *  ======== Miscellaneous Configuration ========) v' x2 c, N* T- Q; F& B
*/
+ H% W$ v9 e* l4 \3 G1 b3 @, D; Q8 ~& [0 r8 ?
/* set default diags mask */) D! s, q, c" c; ]3 I
var Diags = xdc.useModule('xdc.runtime.Diags');
' W9 f! I8 I* V! K3 p4 Ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 e! T  G# E# `, C8 S  o" u3 T: O! V2 H4 o& ~2 b, l! M# G# B8 Q- L: ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ Y- A. y$ q) z  |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ }" d# O4 O  x7 j2 A6 x, b1 v- H3 ^6 xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 F( l# L$ e+ `! R. _' m! j3 m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 {- K' C& q, ]1 W' ]
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# M+ }1 `9 T8 V) f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: p- a4 g; W8 D$ CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 e! \8 ~6 ~; n" d8 S9 wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% T# c: c! }2 U% j; ^/ F: z9 }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 L+ l1 q+ ?$ F$ ^- bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 q, T! ^! d- i9 L- T5 T* B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) J8 A) A6 V5 P8 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; j4 R3 w- ?1 M( J+ g' f$ T
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ L+ V: y# Z6 g3 n
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 \0 y( W* [* j

/ \1 R0 N0 @' i* m* s1 \/* override diags mask for selected modules */
4 P% j9 h; l# M, q9 _- d  f+ Nxdc.useModule('xdc.runtime.Main');3 e9 _' `! e) L9 A9 L
Diags.setMaskMeta(
" t: w, b) `, p) k$ q    "xdc.runtime.Main",
+ Y; m( X4 y- |  G- B  i0 V    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) ]& b6 b# G  x  n  e& }    Diags.RUNTIME_ON! t* ^/ b- Q2 f( J% X# w
);
3 R* e. |6 U  H3 I& q* T  v0 R- T2 o7 h) f
var Registry = xdc.useModule('xdc.runtime.Registry');1 f, K& o! B  l1 ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; ?4 a# s. N9 @* }" s/ o, r1 m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& _6 ?7 g8 b3 a' gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 j" s, k" x+ L; C# \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  q, q8 W# e' y* t- g

7 ^6 v/ {& F$ ?2 ?/* create a logger instance */1 \7 i) g# E( W( |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, h0 }2 M6 }+ t# o4 _
var loggerBufP = new LoggerBuf.Params();2 V/ [! ]4 j- M5 b; ?! `2 a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  X; Y1 \1 U, h2 A) FloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 O- _0 V" }' A2 t6 S+ X" P( @; W5 I6 w3 V+ l
var appLogger = LoggerBuf.create(loggerBufP);
" j* w- k. s/ C- c8 b9 P. oappLogger.instance.name = "AppLog_Core1";: t& t0 h# M7 b" G9 o- @4 Z, D+ `
Defaults.common$.logger = appLogger;
4 j: _- v% N$ {" H* IMemory.defaultHeapSize = 0x8192;   
3 ^( O+ J# o8 B- hIdle.idleFxns[0] = "&LEDStatus";
0 ]" X5 }: N6 L$ g% P" w, KCache.initSize.l2Size = Cache.L2Size_32K;
$ p. q5 p. u% Q
! X6 M' ^% X4 X7 O3 T/ I( Y; U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 `' r% r; |$ B2 x- b# ]7 Evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 G1 `5 x% w/ W( ?; L
var heapMemParams = new HeapMem.Params();/ G2 _' ]" ~6 D6 C- a* t  |7 I4 ?
heapMemParams.size = 0x4000;! q4 P$ }3 E% |, Q9 t" t3 c2 k( `. R
8 u8 `+ N$ o9 _# d3 j
var Memory = xdc.useModule('xdc.runtime.Memory');
3 J0 T% S2 C, [& g5 l' k& }+ mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, Y4 O5 `% g. t" P9 K/ ]
! w, q; z7 F7 g
我大约calloc  每次共计大小为5K*16bits,+ {/ J; m+ Z$ p% A: s0 m
而默认配置才0x4000、需要改大。
8 n" n- x6 R, B4 E8 w6 P6 L: [  n6 T5 Z" n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: U8 n) i, _% A3 E4 |& GProgram.heap = 0;& _- Z7 h% e  M9 l
Program.argSize = 100;  /* minimum size */3 J0 F$ ?2 ?2 ^; s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-15 10:56 , Processed in 0.039585 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表