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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 A( S" X# y: L* T* I# d4 n/ j2 |9 }1 z7 f  Y2 a3 _' l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. |  Z0 f: T7 f7 C7 L6 R: L- `" Q
5 t% d/ y$ Y3 t2 r) F$ \
其他程序段。。。。。2 B- p! w* s. o

) t! n* R3 k; o2 j" e   free(x_d);
* I* x) n2 g8 ~& P! A. j& m: _  Z, i- [! y$ G4 g
使用DSP侧单独调试功能,验证动态申请没有问题,
/ E- f$ r  h9 S3 M) g
  }1 o! a& A5 [+ l( n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 M  s& F7 i% ]0 g- k1 e' ^' F
" M: Q/ q, e* g

. K' l: U6 y+ m. r
! S: p" X# J' K" ^- R' ~
% e  [, U* m4 B  Y! R, |  Q) T4 b; S& |  ?- L
1 S# @7 I( j( |
: |2 ~0 H+ W2 P& g7 U4 s. G+ }- S

/ j; W9 l$ D& ]4 J3 W- K) ^
4 L4 \& a  V) ]# P8 l! i- L* e4 C7 x2 `: a2 |4 M. E5 m4 z% g
分享到:  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 */. ?2 U( x4 F# x+ \7 x8 e( f# [
Program.heap = 0;
% i4 E$ g: q, t/ v# @Program.argSize = 100;  /* minimum size */) U1 s* S8 b$ P" r6 f3 U- B7 i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# Y# l2 ~5 G  P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ D9 M1 l6 B9 X; e$ Fvar heapMemParams = new HeapMem.Params();
5 F8 V1 M% K; I% l7 R  y$ A, ?heapMemParams.size = 0x4000;. j2 M4 C8 _* [

' N* a8 f! c/ ~, n" O  N: dvar Memory = xdc.useModule('xdc.runtime.Memory');% X" ^- Z0 C* i/ Z* p. J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! O7 A$ e( ?0 ?+ p8 o! f* F% J# k( }7 j; T- C; {3 X$ Z
我大约calloc  每次共计大小为5K*16bits,
5 G( S- D4 E2 f! ^/ [) M- r而默认配置才0x4000、需要改大。
# U& i0 l# Q, K1 n+ N5 A+ Z* M7 {' V4 F" r0 d! w- k: j1 ^$ d
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, S8 D# R4 X5 s7 h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  ?2 N  r6 F: R* {) \4 n2 `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 J: M% `. w# `6 w
" B: h$ j1 s; i3 F; ~
是不是需要在DSP.CFG中进行配置# j" M, o. |2 B. j' Z; Y
我现在的配置为
" p; j" _0 d; v+ x6 G+ b2 U! k1 O, h
/*
4 l( B9 |" O* W+ d7 g; v7 N *  ======== Operating System Configuration ========
2 p* j  Z& H9 g, l' F- @ */7 v2 g) L+ _+ n- G! W
+ K) K; M$ P. e7 Y
/* no rts heap */# d- b, S. L& D  [- E* f
Program.heap = 0;
' G: i) x  H$ sProgram.argSize = 100;  /* minimum size */
4 Y1 w0 G4 k; W9 s+ P2 m- D) _Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 R& G' l/ S( Y+ q
, O7 O3 q  n/ U% j/* create a default heap */
# `6 o& n  e- L  d7 z6 X& gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& ?; O; J6 ^( \. J/ {
var heapMemParams = new HeapMem.Params();: N( Z, p7 r& [+ P9 r4 `5 Z  k8 [1 o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 }4 j& s6 e- W, _" \! I  r" A2 X% H4 K2 {, ~: o
var Memory = xdc.useModule('xdc.runtime.Memory');
, ]( `- q$ u# p& v9 {- Y# i; jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 F" v9 U% v5 c# O$ N
& ]( S* m; I' ^  z7 T' p/* configure System module */
) _+ b+ b- B0 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 o  |9 M6 A: m# @  ?) I
SysMin.bufSize = 0x1000;
& h% M& B5 o  N* X* p8 bSysMin.flushAtExit = false;2 g7 L+ m! Z; {1 z
, x. u$ f- \( I7 ^5 I
var System = xdc.useModule('xdc.runtime.System');
% [1 V1 @2 h. {6 |System.SupportProxy = SysMin;
( R) ]4 E5 D0 B- y( `( F
/ s6 f, \+ `3 N! N7 K4 A- F/* configure SysBios to use the lower half of Timer 1 */9 J1 k& u/ X% a9 d/ T$ n
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ q6 F: _! K  K  O2 o+ F( ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 {8 d0 U5 B! l7 ]
Timer.timerSettings[1].master = true;: D: q5 _3 g$ m: j& |
Timer.defaultHalf = Timer.Half_LOWER;0 O% F1 w; v) u6 x5 c0 @6 L8 ]2 [
Clock.timerId = 1;
1 u# v. r- Q1 }! Q1 d- v0 `1 `6 j! b/ n8 x9 F* e7 W
5 g1 D5 e7 d/ E5 |" J
/*9 [8 D0 P: H1 o2 K9 |
*  ======== Miscellaneous Configuration ========, b( n  T9 T. N
*/
  M# z1 T/ g9 S" A. K  h
+ k# }) H/ \0 A! u3 h/* set default diags mask */  n, j; f! G- O0 b
var Diags = xdc.useModule('xdc.runtime.Diags');6 C  J( s* ]. e3 O: P
var Defaults = xdc.useModule('xdc.runtime.Defaults');, _- O: W* R8 _. D" W

* I: [& z! v) hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- A; Z! C4 i  v* i  z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ ~% `' K, B* }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 D" V4 {1 F8 d0 ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) i/ X9 n+ w" H' I0 t. A: ODefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 {6 \' q$ \+ a7 \* PDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 m4 U" S; v* @Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( g) p6 z) U8 w0 K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) ]' I( z& j' }
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# J, K" c, `* E4 h% K( F. s7 ^% fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) V2 j8 s7 D; C1 q1 R2 g" X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 K+ U1 [8 Y6 b! }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 J+ v6 }4 l, [9 P, G/ O5 k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: |1 s) c- \( Q9 t1 m8 r3 o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ x6 y8 |3 ~$ W& v

' \/ d3 @/ U; Y2 ?* J1 s4 _/* override diags mask for selected modules */
: G7 I& H; y( S! s* exdc.useModule('xdc.runtime.Main');
3 M5 U! T' _3 s8 c1 {- p8 dDiags.setMaskMeta(3 Q  B, k; H: e; p* D( q
    "xdc.runtime.Main",
( `; Z3 X6 e. f$ Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" Q8 z/ O$ L# k" _    Diags.RUNTIME_ON, ~( Q; ^5 W3 s) i( }3 i: d4 F  X
);
, |) d& \0 I" x& F( y1 K+ b( N4 B# ^) R2 M
var Registry = xdc.useModule('xdc.runtime.Registry');& L, \8 K9 m; ]! O1 ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- |# c; ~# g/ z8 i( ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ a  |' z# k' K5 q0 \1 n5 }1 ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* L3 ]8 ~5 @0 E. H; \Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, F4 d. {  Y9 ?+ D# O( T+ d" f1 n& W! q" k& S4 c5 W# M* x) T3 t, u) H
/* create a logger instance */3 e5 B$ ]3 E! T  z5 l) y3 I7 c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( X* f4 I# r& f  evar loggerBufP = new LoggerBuf.Params();2 H2 H* v9 W9 s4 M# o8 s" B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" P; A- m1 ~1 q6 u2 N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ S/ j  t+ q8 [9 O& Y
$ u' s4 I. _5 r2 L# e; k7 X
var appLogger = LoggerBuf.create(loggerBufP);8 o8 `+ `/ w+ ^& S, t: _
appLogger.instance.name = "AppLog_Core1";0 }" f3 `9 R6 R, }5 t* `! Z( S
Defaults.common$.logger = appLogger;
! Q9 u2 a2 Y' t% [/ GMemory.defaultHeapSize = 0x8192;   
: v8 s4 u4 V+ iIdle.idleFxns[0] = "&LEDStatus";
, |, ]) n% ~: x$ l7 x4 kCache.initSize.l2Size = Cache.L2Size_32K;
' n2 Z' U: z8 ^, p1 z2 t6 I( m
# ?% b- F/ J$ y+ b
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 00:31 , Processed in 0.042552 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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