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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 w! F0 Y' K5 i' u5 _; ]1 X* U3 F) W: m. b# C
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 w, s/ {: {' E& w: \

3 E3 X# ?3 {% S. ^9 Z: P" c+ k其他程序段。。。。。5 |; p' {* j: v; Y  |
# n5 @6 w3 [$ X9 F4 {
   free(x_d);
4 }5 \! i' V) f
- h; J: n; t6 o" s使用DSP侧单独调试功能,验证动态申请没有问题,
8 Z3 ]4 F9 X& f9 t8 K8 Q1 |9 i) u
& m8 g' |! n7 x! F, x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 F! x2 D- y' P3 Y+ o) s

. D  n9 o/ C1 D% G* A
8 B, h: ?% J* f8 L! T9 z8 a; [2 ]8 X% w. ]% j. @
# D3 Q9 G. W1 s1 k4 {- C6 L" g

5 c( |. b" M& F* N+ T+ q; h# ]5 q1 l
9 y$ M  T4 p; _+ P% l1 R5 O
* f- z" @+ W6 |% I6 `

6 A5 G$ E+ S2 d+ M
" X5 _8 d( ^) r( F  @4 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 H6 R4 c( K1 H2 V0 [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% @5 U' Y9 v$ x! A2 [! z$ K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 u0 s, `- V) |% J- r  _  `9 ?
* |3 w' L# T& g+ ?/ e$ s
是不是需要在DSP.CFG中进行配置
/ U) J: ]. W0 w+ ~+ c我现在的配置为# g# h% |0 l. @

2 e/ ]5 b1 }* \; S) e4 [! c/*
: T3 h% C' z' M/ G* |9 r *  ======== Operating System Configuration ========
! i% q1 p, X4 E$ M- |& K */! I9 U1 J8 S8 p3 K1 K

! s& K$ @0 l* V3 c/* no rts heap */
7 g# o8 {/ i, C4 [& o  k) D- HProgram.heap = 0;
" n& j% R. I, [Program.argSize = 100;  /* minimum size */
6 B* Z* a9 ], Z( ]! v* q: AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# L3 X5 s' W: e! U7 h# I
' u: j/ C, M& p; T! [
/* create a default heap */
& l( ~3 E+ `) B4 y3 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ Q/ ~2 l  |* h0 [$ S4 f( Mvar heapMemParams = new HeapMem.Params();/ h  I; I8 W1 T, c$ U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 H2 k- {+ P& z8 o2 l7 c/ D
3 F% e4 q' w! |
var Memory = xdc.useModule('xdc.runtime.Memory');
- D! {, P! A6 EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! b0 C' _. W  S! V' E2 x8 Q6 D$ o, s$ B6 w2 \; U
/* configure System module */, Y# ^- H4 E/ ~8 J
var SysMin = xdc.useModule('xdc.runtime.SysMin');; |. j; G8 p1 E) _
SysMin.bufSize = 0x1000;; C, T( r7 U) v
SysMin.flushAtExit = false;
  L$ V9 p  [% |* \2 T2 r( |3 T; y
4 t3 n# {4 p- A: Q6 Yvar System = xdc.useModule('xdc.runtime.System');
3 V1 l: {, Z/ F! L5 e( `3 T8 gSystem.SupportProxy = SysMin;3 f2 R* Z  I; B4 N# T

1 A( f/ G6 V9 X5 D$ e4 R3 o% V! ^/* configure SysBios to use the lower half of Timer 1 */
, z% R8 }# p$ Y6 D; e  J2 c2 Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: v% H& k8 }. i# e. n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& ?: R3 j! p! B" U) A4 E- }Timer.timerSettings[1].master = true;
( D" }4 `  _9 \/ MTimer.defaultHalf = Timer.Half_LOWER;
( g9 K8 w  O( i. C  [' t# g& wClock.timerId = 1;: `/ n, u. o$ v
( c  M, h- p9 P+ `
: b# H& I. D, Z( V2 G
/*4 E9 {' J) J" T6 X- C
*  ======== Miscellaneous Configuration ========" b( M) k7 ^* s! k9 w, Z
*/" k* O  @* y4 y" `6 B0 |! A' l2 Y
% U6 R2 v" `5 b: B+ U% ~) _) F  g6 P
/* set default diags mask */8 h7 e% G7 m) r5 @7 d
var Diags = xdc.useModule('xdc.runtime.Diags');/ O# J* Z3 |  N* r1 [" N* k
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 |6 T- s# F: v3 I9 n0 F

9 z+ A3 z! A- E" V* Y$ `; ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 ^# Y8 C: e& `: @, B, v! Y1 HDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; a) o. h! |. z, [+ J* I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ }5 `7 H& x+ P0 g; v# y/ K" cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 S; s& T/ E2 u4 K. EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- [; g4 R0 E, d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; d1 O: s% |6 i; y3 E3 s4 x& N5 w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ U1 r: V+ n* P" v: w# f8 ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: k1 J; {5 T+ a7 L$ y, P/ [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, q% A# l; h/ o  ?- x# i! Q& K5 B- u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- J4 r* [8 S8 }
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 }: d1 ]* P$ v9 V! K" O  D1 cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 v5 ^7 {6 J3 H" J1 a7 X& k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: E' I* N+ f8 |; a/ y  M+ QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  _8 m2 ^. R% r* I# k9 t6 q; ^2 ~4 e+ S

0 p' y* }; X9 Y/ u- S6 v* \/* override diags mask for selected modules */5 _! }% G' K- L1 G9 C* Y
xdc.useModule('xdc.runtime.Main');
  D% T  _" h1 V% l4 ?) `Diags.setMaskMeta(
7 \/ y1 U  k6 h) o# D% n    "xdc.runtime.Main",, O7 S1 K( o( G5 R' P; L% ^
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 W, t$ y- ^& h
    Diags.RUNTIME_ON
/ W" F0 `1 }3 H8 X( r4 r);& a0 }! F) c0 r" A

9 m1 }5 z2 }  `( p1 e- z4 vvar Registry = xdc.useModule('xdc.runtime.Registry');2 x! m( T! K3 h. j3 z$ n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 k1 E$ |8 V* [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  E" j8 j& l. @5 E; s0 L5 \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  ~- R' [! Z0 y0 t( b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 |6 R* `% k: [" r
5 j1 a! d! @; i, w) D/* create a logger instance */, g$ G4 X. y6 |( x. z& M) W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 Z9 N/ h( B; R7 z8 }1 y" W: y7 r' pvar loggerBufP = new LoggerBuf.Params();% S, R& G1 f" c9 L' |3 n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! N" Q* q( W# f2 v; K* rloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ l. `- R7 C( }6 \: c& N! n) Z1 R8 A2 k2 o% F+ D1 j% F3 A
var appLogger = LoggerBuf.create(loggerBufP);
; i& r9 r& i# E6 HappLogger.instance.name = "AppLog_Core1";
( _1 B4 r, B) H2 E+ D. uDefaults.common$.logger = appLogger;  V+ m8 F: D9 G: M! @0 _
Memory.defaultHeapSize = 0x8192;    " h- t0 A$ E7 e" J
Idle.idleFxns[0] = "&LEDStatus";3 `( d; Z' p. M
Cache.initSize.l2Size = Cache.L2Size_32K;1 |5 _1 S; e* ^9 W* [9 a

1 l4 b  \, U, h) k) o3 q
回复 支持 反对

使用道具 举报

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 */$ A" W; B+ o% ^/ L% f; h. [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! K9 t( ^. I# V* L+ r+ r3 y' R1 Y
var heapMemParams = new HeapMem.Params();
9 {, {: _6 Z, g* }7 |heapMemParams.size = 0x4000;% c8 x" d! @2 G& u0 {3 a, r7 b

/ j0 S# K. s( U( w: Q( Yvar Memory = xdc.useModule('xdc.runtime.Memory');# A" j: E# t3 r7 z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% j. K, T! ]% u6 C, w! [
$ A% U  o; F, c# k# b  ~( C6 ~
我大约calloc  每次共计大小为5K*16bits,
2 g' ]+ Y, n* v. g4 h5 T1 p% I+ Q而默认配置才0x4000、需要改大。
; K! `' ^1 I" t7 @' u7 Y% |2 ~  f% ^
% @4 L, ~: D8 ?( Q0 G# G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  ~2 @* b& S2 y
Program.heap = 0;. M) v# u8 O+ V; y- L
Program.argSize = 100;  /* minimum size */
6 E1 u. W1 u' v+ IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 23:24 , Processed in 0.043307 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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