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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 n3 N8 B3 Q" C4 Z6 F: Y* M) v4 t' O' N& F- ?: n8 Q) m8 Y. F& [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 t6 {+ J5 P" J! z* N' L% w; v
! a1 K5 M" E3 I; O9 j3 e0 y+ X
其他程序段。。。。。
" e* m$ l9 z, R& ^4 c ( Z& e6 [; z# L( A1 l4 ?2 ^9 u5 u' k
   free(x_d);
; V; c( }  J. @" u+ b
( E9 v) ~7 t* n# k% Z2 ]$ A使用DSP侧单独调试功能,验证动态申请没有问题,  k& E3 r/ ^8 u5 [

3 T8 S9 q+ [' R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ p7 b* x. |! `  e

, \7 J* I( P6 x* Z8 O
3 E+ F2 a3 b$ W& |/ m
/ m: y! t+ H3 e* N$ [* g# s3 G& x8 t1 l4 x. J
8 R2 S* Z) g, ?; c% ?  n+ O

! h% y2 A$ C  \" u2 S" M# p1 ?- ~' ]' ~
1 \% X$ p8 \4 h5 R* r& O( K. ?4 G; d+ E6 c* q$ i7 O% I" b

* l1 l, J: w4 m2 g/ n- u
! O" ]) G6 U+ Z! z& x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! i' x$ j% o+ H9 v% ]) a# H5 |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" W" Z- U6 m5 d# `! o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! P/ j4 Y4 j' h: ~* E( W; o( V) T" i

1 A! f6 E6 C0 T8 k/ ~8 T是不是需要在DSP.CFG中进行配置
4 T! ]1 G1 n) n% H3 v7 s我现在的配置为
3 `/ a  B2 \# P
, ?: Q0 x0 C/ u) ^) Z/*; i, i2 N+ j, ~  ?  S7 o
*  ======== Operating System Configuration ========
" O+ m- C7 J4 X& \9 m- [2 L */
! V/ Q) Q  l( J. H$ Q" i
. Q& m& `, N* w% d: e/* no rts heap */
. D! p' J/ W5 ~- l$ QProgram.heap = 0;$ f+ r$ E! H" P( E7 y9 V: ~9 R
Program.argSize = 100;  /* minimum size */
$ P  v) h$ Q4 X% x) sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 Q7 H% S+ v7 `* C. ^8 F$ v, o4 C9 I+ R4 A' k; @
/* create a default heap */$ d2 q8 }; `. Z9 f  @8 c0 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ r/ J# \2 w& `/ n6 ~' K
var heapMemParams = new HeapMem.Params();
+ j' {1 u! |* K% T( ZheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& @8 V! f6 E$ o" g# h# s

9 k' H, _! ~' e" c
var Memory = xdc.useModule('xdc.runtime.Memory');. a3 X9 |/ e$ o" G+ ~( O) A* I$ i6 k4 P. d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* O+ g$ }  t7 j) H
% M& |6 `" }* z+ b0 W7 n2 l- e# \' v/* configure System module */
/ q" j% P' Q- g! |. ]var SysMin = xdc.useModule('xdc.runtime.SysMin');4 ^7 x/ W5 u7 H( N4 D
SysMin.bufSize = 0x1000;
, A0 x3 q. a  A2 TSysMin.flushAtExit = false;
; {+ A  @6 ^( v; S1 Y6 [! `9 _+ Y0 H1 o: e) C3 s
var System = xdc.useModule('xdc.runtime.System');
/ v9 h3 J* B% M! O6 sSystem.SupportProxy = SysMin;
) d& f6 J7 \4 d! J7 i
% K9 w1 R( R1 m* `! s" N/* configure SysBios to use the lower half of Timer 1 */
9 J( V7 p9 k8 v' a/ q7 Zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; s  {4 e- H- u$ [3 ~, k/ g/ I7 Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ C8 j9 k6 ]" ^9 J$ `% b
Timer.timerSettings[1].master = true;+ @4 z9 m: \/ J8 x/ o
Timer.defaultHalf = Timer.Half_LOWER;
# T% y$ h+ M4 @* O0 ~Clock.timerId = 1;6 {6 {* ~' @- y- }& [

. o0 m- }- _8 ~. R& n  ~( V0 m- ~6 Z" \7 t" d
/*) M7 R- c, X' ~
*  ======== Miscellaneous Configuration ========2 a2 \7 G1 c  I% G
*/& c8 _- S( ~, l/ G1 }. S
3 Y) L: }/ K; l* N7 y( E4 g
/* set default diags mask */
, G- R3 N/ ]. H; Cvar Diags = xdc.useModule('xdc.runtime.Diags');# e3 W8 {9 t) j+ r# m8 B
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 c4 R8 `1 l# u! q: U' w* j0 |/ q

" @) }( m" \1 i$ O8 V6 ]+ p; p6 eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* V& d- b5 i- GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 y, _4 D: f" P5 K9 ~* cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ a! Y3 _; m1 x4 L3 B9 ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 J$ I3 k2 K7 u9 c7 J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! O* N- o9 W* Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ J- `$ V+ _8 H& @+ v' i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 O# r. j+ R  x5 i" C; a/ nDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ }" E% D; U+ T9 _8 U: F. W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* F: R$ A9 x! `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 K) j' u" q; qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 C6 p5 v- W4 a1 A/ y) H; f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 u. z1 V( w6 L6 \: g* A2 F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 Q! C! ?$ F8 A8 a5 c; P. _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& d/ q# H  f% ]( Q6 x$ R! V  R0 @
  I  g. p2 O8 |- ?
/* override diags mask for selected modules */" I. i6 ?3 L. a" i4 X! C
xdc.useModule('xdc.runtime.Main');
- z" t& l) @+ O6 W/ _Diags.setMaskMeta(" N8 E  x9 @& ?/ L! ^
    "xdc.runtime.Main",
7 i; j) H) T# L4 A4 V5 Y9 q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ ~% y* d$ M. m% k" s0 G/ E    Diags.RUNTIME_ON
, k& Y$ M) M4 n9 b3 {);6 g4 v0 M2 s$ p
7 {  F7 d, u* }6 Z7 U
var Registry = xdc.useModule('xdc.runtime.Registry');. Q& k: u/ p- q* z8 b6 e) Z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% T* e' I7 x/ yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: L$ h( Y% V% V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
  c" z* B9 U3 ~& U; rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 m' m% @9 Q$ l! y7 ^: q$ |, @

  X( o: `  `" r) q" U5 V/* create a logger instance */
; r; ~* L8 M* F4 Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. P) y3 l" m" j% c9 V- C  m- F/ A, c
var loggerBufP = new LoggerBuf.Params();
- t: ^9 s7 A6 a! m" o$ |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& g/ w2 a9 ~; f5 ]7 Z7 }2 qloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 d; G3 W" W& e* S* S. J! j

3 o* h. Y) v  i8 j! Yvar appLogger = LoggerBuf.create(loggerBufP);- Z2 E& D& y/ z- K$ Y9 V
appLogger.instance.name = "AppLog_Core1";( s  s$ I; ]' i8 F
Defaults.common$.logger = appLogger;1 l- o8 g. e' u( m4 I
Memory.defaultHeapSize = 0x8192;    9 T' \! p4 B" y% X
Idle.idleFxns[0] = "&LEDStatus";
3 _, P$ {7 O! G7 ?Cache.initSize.l2Size = Cache.L2Size_32K;: o6 {1 @; U2 q( F$ O

" u6 ?$ E, z6 p9 x" z3 ]7 y
回复 支持 反对

使用道具 举报

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 */
8 m$ h% w- Z/ c1 K6 M3 Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! s$ x/ Q+ Z+ ~0 }9 Vvar heapMemParams = new HeapMem.Params();
3 R7 X! q2 n! b" o& m* UheapMemParams.size = 0x4000;
8 d' z8 Y- b  c. Y. r4 a& y- L& r$ ?' h. O9 e- u
var Memory = xdc.useModule('xdc.runtime.Memory');1 f- G. x$ {* ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 O" H; s6 W4 u; q6 w3 b1 ]3 E/ p8 L. d
我大约calloc  每次共计大小为5K*16bits,+ K6 P1 X5 r3 o4 ]/ h" k
而默认配置才0x4000、需要改大。: E/ ^- H3 `6 D1 I* U5 @) A6 q

0 r, Z3 `! ~" H1 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 ?& A9 S( B# z' G1 R  i, K
Program.heap = 0;
! R7 _" ~& ?0 \. qProgram.argSize = 100;  /* minimum size */6 @3 r: v8 v5 U3 [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-11 18:16 , Processed in 0.044536 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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