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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# M2 R% z5 _8 n5 h! F1 H7 G0 ^
/ M( Q% l& S7 N0 o. K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# S; G0 \4 {$ k) s) Z& p. \( \$ T
其他程序段。。。。。6 C: s" {' C: r+ N" E
( @( ~4 U" W: h* |0 l7 }& d
   free(x_d);
$ ?7 K' I/ w3 ]
7 a+ F+ y3 c0 D# G; S使用DSP侧单独调试功能,验证动态申请没有问题,2 {; T: C: {7 a6 ?% _1 I# o, B9 h
9 `) ^, k+ r2 b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- c: d; p3 q: \! R2 L% K) B

, m2 N0 [6 q7 n( N/ L" O) @; A( F7 V

+ C$ p/ v3 b* s+ I9 P# i9 I" y6 _+ U. g% D8 B

0 u; g5 h# V& P0 f& S* `$ h* _$ o. s. Y  c+ p

& g* e0 v" n/ D7 v- l" i2 G. ?' @6 N& a

+ i6 R8 Y) @; u1 S& B( c6 C( \, \/ D! r0 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( V% m) D0 T# f2 k
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& A. X, W4 h+ R2 ^$ F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 g* h. r5 |2 I
1 i& M% S9 \% S; n+ \
是不是需要在DSP.CFG中进行配置
0 A" E  p' Q& I: l$ `" i2 m& W我现在的配置为2 W7 @+ L/ D& z' {, S3 D

( |# x6 A8 _* W' ?/*' V4 |+ c6 U7 I' y; u  x
*  ======== Operating System Configuration ========
; t7 ]% {: f# \  p4 G8 S# c4 U2 x */8 i/ D: [0 x' j

$ X3 M. ?) E7 j+ P" a' l/* no rts heap */
3 h2 l* k' [! O6 `' YProgram.heap = 0;1 Z, [  e8 o# y4 O: g
Program.argSize = 100;  /* minimum size */
$ Z, s/ y" O( p" |) |; BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% `! f/ ?, k5 T. j; f8 C4 `- ]: s; c
/* create a default heap */
( G+ k$ c( n: C: }0 h/ X- ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' Q8 }, [& R1 w9 b# \0 Lvar heapMemParams = new HeapMem.Params();0 g1 ~% q" n$ Z( I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, {9 {0 ]( R0 X8 E
  i! |0 }; @, |0 P0 m9 V. R+ P0 I
var Memory = xdc.useModule('xdc.runtime.Memory');
8 i* ~& y3 I. Z& _+ VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. ^. Z3 n2 z, s' G- j, F8 @- z% {" S; w+ X

5 P& W' h# `' u8 Y1 _7 Z: t/* configure System module */0 O6 S" Z' P% l8 Z) H
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 N3 e4 [& b* w! }1 L& Q! X( Q
SysMin.bufSize = 0x1000;6 G# `' N& N: s9 [3 e
SysMin.flushAtExit = false;6 F6 J% r" l3 Y; z6 U& ~

1 [6 m/ {7 H7 Y  ]5 b, c. Cvar System = xdc.useModule('xdc.runtime.System');6 B* B1 T8 ~3 y2 B( s
System.SupportProxy = SysMin;
0 @3 Q: {( O, b7 k
' j  \" H  g3 N- N2 s. u/* configure SysBios to use the lower half of Timer 1 */* s' B2 V8 S& B+ j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 B* \. Q( |  w! X; Y* W: nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* i& e0 @6 V, ITimer.timerSettings[1].master = true;$ r( M% I% ^: G$ F' F# V0 f
Timer.defaultHalf = Timer.Half_LOWER;
* y; w  f6 C% q9 J1 `* w# PClock.timerId = 1;, S, J5 C- I4 U" s
' H2 a7 @6 r! R$ J4 ^
9 _4 @6 u: Q/ x$ N
/*. M5 _; N2 ^5 X6 R$ A- s4 e$ n
*  ======== Miscellaneous Configuration ========
3 |5 ~9 X" q9 A! V# l+ y2 T */
  Y& m" G) l" \2 ]4 O# a
, N& d+ x$ M# X  k; K9 D0 Z. Z9 B/* set default diags mask */
, O- [5 R3 n0 o  N; U, |/ i8 ivar Diags = xdc.useModule('xdc.runtime.Diags');
/ _6 c8 I+ t/ z. Z* pvar Defaults = xdc.useModule('xdc.runtime.Defaults');; w5 ]. u3 u% `0 ]( H3 w! N& P8 @8 ]$ n
6 t/ j5 h% A) ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  v. t' ]- K# p$ d* a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% `; m: h" S1 _" K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: R: \/ [4 |1 z1 s3 R6 XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* m$ E0 Q1 X2 U/ R* pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" r5 `5 R: u  @+ {) i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" d" N- N& N8 c& X; D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ u0 i/ Z( l; w) E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) \9 S5 _- M& C  P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  j( e" }8 x0 ?: |8 K4 YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& x8 J9 v2 t1 j; sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 @; l: \  n  D' _: F, s2 i/ a$ E
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, h6 B2 Z, b- A. l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' @' c' Q  J( N7 nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ A  y& Z/ b' Q% U! I3 V! w. U* w0 K0 [. [7 X7 P6 m
/* override diags mask for selected modules */7 ~$ a% |* {/ f4 c
xdc.useModule('xdc.runtime.Main');  g4 `' y- G. ^7 p4 G$ V
Diags.setMaskMeta(0 I) u4 G; W* s" s
    "xdc.runtime.Main",
5 K. `3 ^0 b2 I0 a, m5 C    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 O8 V, C, [8 f. n' ?7 \, F    Diags.RUNTIME_ON  @2 E5 x( k$ `8 J5 V
);
9 n2 e. J: O. D  `9 p) F% k! a) T2 y- ~: T( {+ ]4 W
var Registry = xdc.useModule('xdc.runtime.Registry');
- \% ?! b; S' e' ORegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. x2 a1 W* _" Y9 I2 ]; Y9 g6 `. hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, @& a1 I2 d: JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* S3 }* w6 M% n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- z- z( `% h2 {

$ l; J4 h. T7 ^7 x+ Z/* create a logger instance */6 c3 R8 R" \# R+ G# y; x8 c# D5 r
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ J3 R' ^9 @$ ~! q- N+ s: ]var loggerBufP = new LoggerBuf.Params();
2 ^9 H* ~, U& ?, rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ o: w( h8 u* |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 c; d  P+ ^! M. m/ }3 e5 Q  z" Z' b4 B# k" z
var appLogger = LoggerBuf.create(loggerBufP);3 V8 S* m" Q9 F
appLogger.instance.name = "AppLog_Core1";, R. R# |+ }  G. B! p# Z/ c" ?
Defaults.common$.logger = appLogger;; m4 r3 B7 m8 x& q  K7 D0 J8 i
Memory.defaultHeapSize = 0x8192;   
0 }$ m# Z1 N$ ~4 _6 TIdle.idleFxns[0] = "&LEDStatus";
0 [! x1 h; w+ L2 `) E2 J# dCache.initSize.l2Size = Cache.L2Size_32K;0 s4 N( n7 V5 o  e

) p' X5 Z; Y' k0 Y2 P8 p3 ?( V
回复 支持 反对

使用道具 举报

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 */
( D$ p# Z( o4 G( V* ]# V6 k: mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% j7 n3 q, z: D& u& Fvar heapMemParams = new HeapMem.Params();3 d& S+ Z0 l2 U+ P6 t4 w6 [7 k
heapMemParams.size = 0x4000;
3 U+ Q. c+ {* y1 `. w% H6 U( ^( V! `( g9 D: z+ N
var Memory = xdc.useModule('xdc.runtime.Memory');
* f& `& Q, w' U# aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 n% [8 B7 _; u
6 [1 x" Y# O  t/ N5 A! l我大约calloc  每次共计大小为5K*16bits,
3 h7 L8 E5 ]2 V" \7 V而默认配置才0x4000、需要改大。
% N* i0 F' O4 h6 f: b  R" }2 h8 ^0 R! v' S) w' z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& ?1 I& Q* E: p/ e" `5 R: J
Program.heap = 0;3 U7 L. i5 j0 Q5 u
Program.argSize = 100;  /* minimum size */8 A, }# `3 W0 Z7 C
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 22:59 , Processed in 0.038065 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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