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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: d6 T* D7 s: T9 Z- A: F

- {. y' d# Q1 F) Q: |" B7 Y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- T- |$ r# @1 o& R. m! y3 `! Z! R0 P! U0 `
其他程序段。。。。。2 e: i5 w7 G/ T$ x- [

' N9 y- `+ P7 I1 _   free(x_d);
. g/ O, ~. E+ G2 L) C5 v3 c; r; ?6 e
$ G6 j% L6 e1 I; f' R使用DSP侧单独调试功能,验证动态申请没有问题,( E9 {8 e& x  g+ s  p

9 P+ ^1 Z, w: O$ ?, h; F4 f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- B% s- o" T5 v$ J
( d" \) s3 _* H! D8 X: l
: h; n) F( H# E; I% A9 j

2 k' r  p9 B- K
8 T, S6 Q% B# o7 v7 X8 V4 a8 k
$ I, t' [: n4 }/ S) s/ v; D

; l" v: \5 W7 J7 R9 [8 m# H
8 _8 q2 T9 D+ m, G3 q" ?  g( [, [; `$ i$ Z9 O5 J
6 @( S% O% p9 Y; e& g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 j* F% a+ a4 t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  Z  ?/ j( ^( m; i( I/ @2 r% k# D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& ~2 b1 g/ o/ t) t
  Q5 d( Y  l: S* Z/ d0 m
是不是需要在DSP.CFG中进行配置
! P( A, |% T$ P我现在的配置为; _, Q) X+ b5 A4 {

/ L0 N0 K6 }, N: m+ q2 M, L/*3 Y' C. |/ C: F2 g4 s$ z# S( |9 ~  W
*  ======== Operating System Configuration ========2 r% A) A% v! [: X7 ?7 L" n
*/; H* L# m, z) O& [. A* P

/ S4 b7 W5 |5 p$ `& V9 \/* no rts heap */7 y3 ~; k2 i( G1 f. w
Program.heap = 0;0 N6 d& E- W# k* I9 |- K
Program.argSize = 100;  /* minimum size */
' k4 P2 C: _( W7 j/ Z. N) ^& u9 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 G0 `7 c2 {2 b9 u7 p+ i
& U- D& J; Q) L8 l6 F( Q9 }/* create a default heap */
3 X+ ^' o7 [4 X8 U9 Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 A/ g' T! `8 ~% j$ [
var heapMemParams = new HeapMem.Params();0 Z0 v( b8 ]" s3 @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 {) k0 Q% G1 x& |) c) ?$ p

- T) f- ~! v/ i. p' _2 i
var Memory = xdc.useModule('xdc.runtime.Memory');* `/ E, f$ g) L9 N) Q: J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! v7 u) m; L( d7 _
$ v$ N% G- O1 Z* r/ V4 k
/* configure System module */
% F# Q3 q* z3 Q* v7 o4 tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
3 P8 Z1 X' W5 h* p1 }SysMin.bufSize = 0x1000;
$ E' a& C# [  j- e5 q( _SysMin.flushAtExit = false;$ Y1 a6 [0 u  E/ d
: |& [0 U4 {( p' L2 ]2 p; }
var System = xdc.useModule('xdc.runtime.System');4 A# d& j' L; S+ R. S  I5 b
System.SupportProxy = SysMin;5 [: Q. j8 V9 _8 u
- D; h" }  @2 Y3 n1 D: O
/* configure SysBios to use the lower half of Timer 1 */) {" M' h1 O/ I. x
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 I$ R8 J6 x" Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' U% t5 k8 F$ A$ w) |! L0 ZTimer.timerSettings[1].master = true;
7 b: P( ?/ v+ I' A) k( DTimer.defaultHalf = Timer.Half_LOWER;- D/ N# Y" a6 F! D  ^: y" c
Clock.timerId = 1;
: N% O/ Z2 {" z, R  m0 }: m/ x" p5 E0 ?! k' ~

& a. W: |  A% A( T7 Z1 r8 n/ N! x/*
/ }( Z3 T6 }9 Z  @ *  ======== Miscellaneous Configuration ========
. q/ m9 n/ U3 s, U */
* W* O- w& @6 v& a, P- ~1 O% W
0 M; G$ Z4 d! G- Q& h$ f. n/* set default diags mask */+ d; N& V  X, s7 @- r+ w8 N, \: u
var Diags = xdc.useModule('xdc.runtime.Diags');2 `6 O/ [+ q& n1 A! j# ^
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% D7 X) O3 a' e. m2 ~8 ]0 C) }; z0 }
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 d: A: K8 e8 x% j" o5 PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% a3 ?1 Z: A' H/ ~3 W7 Y. o( YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; D7 U+ m8 K8 N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. [/ R0 \" d% ]7 q) \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! }) j/ ]2 R6 g  {& p  W/ ?Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" W  m. q) s* k% N% ?9 oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) n6 W- _+ M9 }2 ^! W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- b% i6 M5 g% ], K- w( V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 S3 \! d& M7 i2 \/ E8 ?* S* FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ I- H2 I) T2 j- ]# ?* Y, e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* {* O8 }, I. ]; A( t7 [* T$ |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, B" I& `0 w  r5 i6 f$ s8 ADefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 @) o" w+ @- ?; Y# {, u! T/ t8 i6 }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 x/ g6 U; Y7 I0 D) A, N/ G" D* ^0 o
6 P0 B% T! q% z7 C& @4 K
/* override diags mask for selected modules */9 O: P9 a2 r1 t5 g. j; j* |9 X
xdc.useModule('xdc.runtime.Main');
: w% i7 u2 V1 J3 o5 ODiags.setMaskMeta(
1 r  q. I# `1 {' D    "xdc.runtime.Main",
8 i5 f: q/ }# ?- i% s    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 G4 R3 ^3 p$ Q1 t; c    Diags.RUNTIME_ON7 U5 C( X/ Q% C/ w
);
/ ~2 g+ C; M9 Z8 w: C5 J- u$ U+ Q' m! v* T2 {
var Registry = xdc.useModule('xdc.runtime.Registry');+ J% ?! z0 G) V
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 L6 A' @& ]) B: Y! W: lRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 _5 Y- d3 I7 s! Q) CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. Y( x- A/ h- Q( m/ L( uRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ V4 k$ {% z4 Y: A$ k

/ R; e! w7 S- h; v, g6 D! q) w/* create a logger instance */- B( h2 g& z  X: e) O2 U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! \8 t$ F/ w. x* M5 w& |
var loggerBufP = new LoggerBuf.Params();$ ^( {. P* H( A" Y# m  ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! |% E$ I# t. Z; v- {loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" R: h! \& H' n: t$ z% r0 {. [- x9 l: X& s4 y4 @! q, A* Q4 Q/ }
var appLogger = LoggerBuf.create(loggerBufP);
3 L0 m% E0 `8 o# T" }9 j0 @0 `8 r$ {appLogger.instance.name = "AppLog_Core1";
4 J0 ]8 N6 ?! d, }) aDefaults.common$.logger = appLogger;; a* l4 N# Q% F
Memory.defaultHeapSize = 0x8192;    ; ]) o0 u0 o9 K* F
Idle.idleFxns[0] = "&LEDStatus";/ `4 }& K$ v. @; `* t; n
Cache.initSize.l2Size = Cache.L2Size_32K;
1 p* g& \) a( T% K. n) @3 [4 Q
5 s; n  L3 a9 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 */
0 R8 u: f! [8 F" K, i' e3 `9 mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 L8 O% o% M7 U$ J' Ovar heapMemParams = new HeapMem.Params();1 r1 p% o' c9 e1 m
heapMemParams.size = 0x4000;
+ m$ k2 q: q" |! i8 }/ i# b! E6 Q0 C8 v
var Memory = xdc.useModule('xdc.runtime.Memory');; p1 j* m+ d/ B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ `) |* L2 B; F7 ]/ I% M4 R
+ C$ i* b9 H% N& p4 }我大约calloc  每次共计大小为5K*16bits,; T9 F4 l! m* C" u3 a6 b
而默认配置才0x4000、需要改大。
' t: U+ {5 B" Y
9 H+ k+ J0 d& b$ q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! Z/ h9 T7 F: E! i$ KProgram.heap = 0;' T9 ^* n& _5 w! G4 y
Program.argSize = 100;  /* minimum size */
7 y' r, D$ g9 ~* u, s; b' {, {9 R, g6 vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-27 13:10 , Processed in 0.042504 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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