关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# a' S7 U+ C& V( r6 D0 J. V
6 [; b! P3 ?8 a$ M! k    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 }  {, C) `8 P5 L) n9 \
. n2 M2 K( I( q$ A: R其他程序段。。。。。% [& G' y3 V* b  z* @8 ^: C
# n8 y2 H. g0 I& D! ]' r) Q
   free(x_d);. W! L; x- v& }  E! T. h

: n9 v1 e- P6 M3 R# [/ g' d使用DSP侧单独调试功能,验证动态申请没有问题,
$ z' o+ J& b5 t* V9 p& S
% n) r( v) D+ _+ }6 v8 y, Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  o9 I2 G4 k0 E4 k' U

. X  z0 h' a+ R. J) C
  M5 O+ f$ s$ c: x8 d9 a2 D* X! _* q( I' [2 d1 z

: o% K: s7 L2 o8 [! ~4 K/ [3 Q: t- M/ d" d  {
$ m) D  ~0 x5 t& Y4 z* l! q
2 X& ]. G! S: h7 F6 H4 C

4 U0 e1 ^, X4 Y1 y3 B/ ]6 Q. K- @  C, @9 r& z0 g! I0 F1 D; S8 @& e! u
/ O/ j$ k8 \  O. K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ k2 h( j. k/ f# y8 g+ O我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 h* Z/ @) `6 ?0 k5 l+ s9 P5 ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ O; I% `4 v* \( a* `' {* ?% v' L$ a

9 P- ?$ v; L7 \' i8 J是不是需要在DSP.CFG中进行配置& h& Y0 F! `1 P4 s
我现在的配置为
4 Z1 T3 U3 u' d% a# U& u5 z) u( }" Y- T2 n! X8 W1 _& C" l
/*
# z% O: S/ o6 a- u9 ?' [2 W *  ======== Operating System Configuration ========( F/ O$ q; q3 \
*/% ~5 C) O/ N. x( F9 E2 `
% s. U$ d6 b+ j% s0 Z( B& K
/* no rts heap */
5 u- R7 g8 r! m7 g1 S8 z+ q" VProgram.heap = 0;% a  J8 Y, @; p" C1 D
Program.argSize = 100;  /* minimum size */& T$ D0 [) {# P. h4 X6 B7 r$ j
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- \- W( ~9 P/ ?* w5 P) R

/ V. b9 {- c$ q/ w, w( K, N/* create a default heap */
0 r- h( k, s' ~* d) ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 \# G7 y; a# Q
var heapMemParams = new HeapMem.Params();
2 f3 H" ^7 ?  l0 M+ {2 ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& U( {- R# T8 K! U) P. L- o% k2 ~0 t0 @
6 N0 {4 m$ \5 ~
var Memory = xdc.useModule('xdc.runtime.Memory');' B# M' b) s, k; m7 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 N  w) i  m8 \/ i8 B% V

& L* ]6 y# v% H3 Q0 y1 X/* configure System module */
9 G& T# D1 Y2 J% Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');" X* f1 G4 |; b) h3 i6 K( C
SysMin.bufSize = 0x1000;
- N0 f! \  }3 i! G4 c" ]SysMin.flushAtExit = false;
0 A4 K0 C& G  {7 @4 R5 X/ D! V; J( Q4 Y0 \% n
var System = xdc.useModule('xdc.runtime.System');+ X; y5 f1 S0 ]7 h; A5 Z
System.SupportProxy = SysMin;. r) E8 J& m& Y3 C0 H% m
+ _3 j3 ?& ^: Z/ h  r8 T  F
/* configure SysBios to use the lower half of Timer 1 */
: {2 x3 N, U. U* Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ |/ x1 ?$ ^* U0 q# pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');) \5 ]$ j! z+ Z/ n- @
Timer.timerSettings[1].master = true;3 d6 i5 }& ]1 J9 o# @
Timer.defaultHalf = Timer.Half_LOWER;
+ f3 h4 }% V2 b7 Z  a- M- z) l# hClock.timerId = 1;) N: v$ R8 l5 m0 l( I. [

5 e+ H  w9 ~9 A! R% `8 V8 ^" `: ^
  ~: t3 \% c2 c9 x6 R5 a: P7 G: m8 Q8 a4 k/*
' H' I7 ~* x% R1 ^ *  ======== Miscellaneous Configuration ========8 c$ ]9 M8 w9 z
*/4 ]4 q9 Z' ]! Q0 `
, i7 t& {- x% m  g1 E) t
/* set default diags mask */( H3 D4 a# Z' C) F: a
var Diags = xdc.useModule('xdc.runtime.Diags');
) H# K/ ?8 Q3 _var Defaults = xdc.useModule('xdc.runtime.Defaults');
: i9 A( i* I0 V+ Y7 L4 F) _. {( ]( V5 B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) H. _/ j# p  }# e9 ^8 ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ E+ M3 Z) e! O. A0 T( d2 ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ I$ P: X6 c% D- |' W9 W! r2 B
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& ?0 C4 L, g; p- T, O# Q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 W. Z8 `5 f. F& x6 {) dDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' h5 n: h* O4 P% ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, r4 Z3 y$ ?) t' N7 q! n- n4 hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% f' M! g- Z/ mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) X7 Q& b0 o( w) h) U$ @! B" A9 ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' ^* L, I% g7 e# k: RDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ ^- q$ K, Q, U, v  g& N/ gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& f" C0 D8 j7 J2 W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 Z4 }' Z) P6 H+ }# C& w" z, BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: E. B, s7 n% Q. H$ i  U

+ a( Y0 C2 Z3 b- n" Y* k! ^+ V/* override diags mask for selected modules */
" n9 f  b' l0 U# X) z1 Q6 ^$ mxdc.useModule('xdc.runtime.Main');
. ~5 X3 |, C" |  ]6 g# O& b- nDiags.setMaskMeta(8 c* R+ |$ F0 F, S4 ~8 x
    "xdc.runtime.Main",
( _8 R" ?% V  w2 ]" p; R, X    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% S+ h; v1 ^6 x& F8 X' }    Diags.RUNTIME_ON
, k7 Z. H, T. [5 u) \  |; t);
' L9 X) `% v# G) H7 v" X  e: x0 ?, l$ C  S
var Registry = xdc.useModule('xdc.runtime.Registry');7 L" |: W  T, Z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% S7 F: i  b: A, i* R, b. P
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* R' Q/ L! i, R  \% URegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" C+ q0 P# E# n7 A( W  X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 t( V9 [# m: F' H" w% \! P
% e  T. }2 u4 C/* create a logger instance */
4 Q# D/ |) e' Rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" O1 d6 x+ |9 l4 u4 ]' a7 t9 tvar loggerBufP = new LoggerBuf.Params();
: t# d; ?$ Y) [2 K7 UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* L" m) M. {+ R9 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 q% U8 i/ V$ Y( u% j8 {6 N& w
) h5 v) h( j9 [9 ?8 e5 O8 ivar appLogger = LoggerBuf.create(loggerBufP);. t) P5 f1 d6 C; X# S/ K
appLogger.instance.name = "AppLog_Core1";5 U6 h. [' p5 d' H, h" `* N
Defaults.common$.logger = appLogger;; h; u- V( \0 i! l. q; e$ D' _- j
Memory.defaultHeapSize = 0x8192;   
' \# G, f( p. n& u3 o2 LIdle.idleFxns[0] = "&LEDStatus";
4 i' J8 y, ^  m8 P) fCache.initSize.l2Size = Cache.L2Size_32K;0 k1 Y- w0 S$ Q3 s# z  k$ |

6 Y4 h' d$ T# Y0 P. B! f
回复 支持 反对

使用道具 举报

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 */) W# v+ v6 {6 W' _7 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 C2 p9 z( i; z3 j! [
var heapMemParams = new HeapMem.Params();. X' r0 s8 _1 d& O3 K% _& b' {/ R
heapMemParams.size = 0x4000;
9 O, y* |! C4 M' a3 b: w9 @1 K# R
. u- T& z- R/ j) |var Memory = xdc.useModule('xdc.runtime.Memory');; U; q$ G* O% @& A/ Q/ S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 F( ?2 I. ~$ c  s9 M
/ _) d$ _+ h" L. |  m( V; |% N
我大约calloc  每次共计大小为5K*16bits,
3 o- N4 L$ v; y0 P% I. l而默认配置才0x4000、需要改大。' J" u+ V* c( v( y5 X

  j: S4 i- P9 F! Y2 t  @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! W* @* x  Y4 ~; a* x* ~! @
Program.heap = 0;
) G9 R- i. @6 R: BProgram.argSize = 100;  /* minimum size */* L6 W" C  w; G* P! x, k: V( D
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-17 04:34 , Processed in 0.041016 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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