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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 ]$ ]8 `2 q. C6 Y# f
+ B) S% V4 d' @; f% L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% z3 h$ b" b* L
( c( Y7 J8 Q( z+ ~3 @
其他程序段。。。。。) V# R, A3 k8 A2 i; L

) k! _5 g3 ?( ?( k2 T* m" ]   free(x_d);
$ C( |8 ]( B* `' g" Y0 m. n" y$ M. b+ f$ @
使用DSP侧单独调试功能,验证动态申请没有问题,9 z2 F% ~( d2 }4 D8 Q

( o2 t: Q+ H; d3 \4 b3 C* k6 }7 O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 C6 f* f2 b0 w
, k2 K9 `8 x1 \5 |$ `' v
1 B& h3 h7 j! c/ k0 ~1 p

6 S. _9 g  b# |) ~' g4 P) {
) h- U: }- C9 I4 a, Z. E3 Y5 |8 o: ~: G
; A) C7 \1 _5 q1 J3 P1 u" k5 e& G/ \
* x) `% v; l  u' K( B
) T6 p- O9 k: E- s: s  n. A' K
4 u1 k: F; n; q4 d- Q8 n

: Q) F) i6 A0 N' H! l* A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 V8 ?% s% M1 c+ T+ j  k1 k
Program.heap = 0;/ D3 T; E5 K& r
Program.argSize = 100;  /* minimum size */
( R- `8 g% E% V  h3 J$ g% L4 ^Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
, J1 |% [4 W* O& O; n' B: xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' ?  k0 D" J- u  O
var heapMemParams = new HeapMem.Params();2 F7 S# C/ }$ Y+ A3 A
heapMemParams.size = 0x4000;* F6 r& [& r3 J
9 l) m5 i/ b5 M9 Q& s
var Memory = xdc.useModule('xdc.runtime.Memory');: z8 n3 g  s3 T  s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 e- l5 j6 ~& f& `

* F8 B. L( ]8 r* A, _' A5 N, B我大约calloc  每次共计大小为5K*16bits,
) `% Y! @2 z4 {% p1 ^4 t9 r而默认配置才0x4000、需要改大。, r1 G1 s) o6 S  G; K' a' b

& v6 c: q+ \- O3 @2 k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 n6 x5 T' P" Z- W4 A6 ^  {9 Q7 d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 W( E, k# S8 K& P) i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), U4 b; t9 @  @" Z3 `/ c% D
0 i; j' r3 M9 A3 C. {1 B
是不是需要在DSP.CFG中进行配置
( m' g- v" Y; s我现在的配置为
/ I+ w1 W- D! @% l9 t9 o# ~
  C/ ^" `" n; c3 t/*# K8 t5 Q3 h, I' l2 n
*  ======== Operating System Configuration ========
5 a+ ^( c: _% X) \. T */9 q) q7 }; r" v8 e' Q$ z

2 u6 F$ t, \% h$ P8 C/* no rts heap */
  a# {" s1 j& _8 u" E  cProgram.heap = 0;( m  q3 Y" P- Y6 K+ l
Program.argSize = 100;  /* minimum size */5 z. Z+ y' X/ |1 V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! Z: G. G5 g' B  s' m8 o* F3 h! a# r
/* create a default heap */
  h( ^8 S9 m3 C: J! S, Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' D. f3 |; d5 i  u$ @: x
var heapMemParams = new HeapMem.Params();) ]% V) {' k9 ?) }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 ]+ n  I3 V' Y* Y
% n/ c+ i! b6 }7 I0 U& g/ G5 a
var Memory = xdc.useModule('xdc.runtime.Memory');
7 Z1 }! ^7 s6 r& V' cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% J* d" r7 u+ O" T. i# {5 n3 n) e' n
/* configure System module */
6 x8 E1 _! K2 U5 |var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 X& v' @5 v4 \9 o! _; ~$ `SysMin.bufSize = 0x1000;6 s- h1 ]" D8 e; ?+ ]/ t6 s" v3 T; X0 ^
SysMin.flushAtExit = false;
5 ^4 r; p( y' ?7 i; z! n) _9 [' N4 Z+ w
var System = xdc.useModule('xdc.runtime.System');9 t! k, g* t, c  q' t5 y. c9 P& [
System.SupportProxy = SysMin;
& {* d2 a% L0 p% o9 H9 _8 ?$ Z0 O/ k% W7 E
/* configure SysBios to use the lower half of Timer 1 */- r, e: k  @1 }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" \& |1 U( }/ b" ^7 h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: E) J/ M! i: m* @Timer.timerSettings[1].master = true;
$ ?. K( C  f( c2 qTimer.defaultHalf = Timer.Half_LOWER;
9 t( X6 ~! I- MClock.timerId = 1;
! c9 i) @- i) g+ Y; |+ X& e3 z% @1 \
- N2 {1 _: J3 m
/*5 _; `; w+ w+ ^
*  ======== Miscellaneous Configuration ========) j. I  Y8 O7 q3 N) s
*/
+ [6 O+ A0 A& h" y! r2 x# W& V* F4 E- [" O2 B
/* set default diags mask */
3 Y9 H8 C7 \; L8 s  Mvar Diags = xdc.useModule('xdc.runtime.Diags');6 w" S5 o- `; ]1 H
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ t4 n# B/ c: `+ m0 R+ P. o; Z0 ?' m  \0 _) I, s) {. O0 e1 b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* o; c' M5 E3 h% d+ [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& I& A6 G/ H4 ?* [. Y/ DDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 K. ]$ l: s8 u$ O# ^9 pDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 C0 U; w/ c7 F' r' c: l2 w7 D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 \0 k* A; `5 }- R6 w+ I( p5 o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! h2 c" q6 P% O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" J! N) E' o. K5 W  I( u: I2 L: pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ H8 R- z0 R3 P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ L$ n8 P+ D; b! p2 _
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: F. {# y' K2 {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 o* ^1 ]1 {* A3 w8 t* p' |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 E$ E3 w# h4 P) s- M* U: y* K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, Y$ f0 h3 d- b9 c9 w4 MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& I8 Q$ G& r+ u) b. D
. `4 [9 b" `. c9 @7 `% N4 x
/* override diags mask for selected modules */& S0 u$ M# I. C, d* O
xdc.useModule('xdc.runtime.Main');
" j9 l* _( e: f* @) R7 C$ d3 [% i  {- ODiags.setMaskMeta(# t3 K% t; T( [+ `" f( e
    "xdc.runtime.Main"," J/ q2 V( q3 ~2 N* x1 W( f/ J# T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; e3 ~# N, \, T. h% X) Q6 [, X
    Diags.RUNTIME_ON8 u5 ]% V1 g$ J7 P& C" }
);. O5 R% t' v! y$ t+ l
; c! a- r. @* C2 o- p  [  y0 I
var Registry = xdc.useModule('xdc.runtime.Registry');
2 X2 G* r4 u4 W5 V% n- V) FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' t2 ^1 ?* ]" x% L' PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 J4 S5 u. P! ]" h6 a8 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;, r5 W5 @' r& B$ ?# r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ E: l% m: V! Y0 m8 |3 W3 D; ^

0 x0 _8 q  f1 n$ j3 @. n/* create a logger instance */8 R5 T$ `/ I% ]- _
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- W7 y4 ]" O3 c' {
var loggerBufP = new LoggerBuf.Params();
8 {! H% j( n3 B7 K: K" bloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 w8 C  q: C0 t; M& T/ ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" Y6 _1 O8 Q6 W5 Y4 H3 @
- |2 G- G- C9 K) C$ J. jvar appLogger = LoggerBuf.create(loggerBufP);4 z+ O$ y. N8 T& Z. H* Q4 b
appLogger.instance.name = "AppLog_Core1";
3 {! `# U- \4 S" [' v1 TDefaults.common$.logger = appLogger;
1 l- o! E' ~$ k  i: q' v4 `Memory.defaultHeapSize = 0x8192;   
! O$ q, L. B- cIdle.idleFxns[0] = "&LEDStatus";. M% P, }& v- X5 n, U7 c$ z
Cache.initSize.l2Size = Cache.L2Size_32K;6 F2 b4 ]5 K" }% @( E/ O+ J

" n1 {# h5 x! ?+ J; g
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-21 16:44 , Processed in 0.042085 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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